- Home /
Syncing Position and Rotation data in ECS tests?
Hey, everyone!
I'm working on a project where I'm trying to sync physics data into ECS (I know this is probably a bad idea, but we'll see).
At first, I was syncing the Position and Rotation entities inside the PhysicsSyncSystem, but I realized that something built in should probably be doing that.
In the IDE, I'm able to add the "CopyTransformFromGameObject" Entity. However, when I try to add this via AddComponentData in a test, it results in a compilation error.
I've referenced Unity.Transforms, and addComponentData works fine. CopyTransformFromGameObject seems to be in the Unity.Transforms namespace, but the compiler can't find it. What am I missing?
I'd like to release this as a unity package, because I imagine a lot of people could use this until Unity releases an ECS-compatible physics engine.
Below is the code, in case my description wasn't clear enough:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Unity.Entities;
using Unity.Mathematics;
using Unity.Transforms;
using UnityEngine.TestTools;
using NUnit.Framework;
namespace ECS {
namespace Tests
{
[TestFixture]
public class PhysicsSyncSystemTest : ECSTest
{
private GameObject camera;
private GameObject physicsObject;
[SetUp]
public void setupWorld() {
Physics.gravity = Vector3.zero;
camera = new GameObject("camera");
camera.transform.position = new Vector3(0, 500, 0);
camera.transform.rotation = Quaternion.Euler(90,0,0);
camera.AddComponent<Camera>();
physicsObject = new GameObject("main");
physicsObject.AddComponent<Rigidbody>();
sutObjectEntity = physicsObject.AddComponent<GameObjectEntity>();
var physicsSync = new PhysicsSyncData{mass=2};
physicsSync.AddForce(new Vector3(200, 0, 0));
physicsSync.AddTorque(Vector3.up);
physicsSync.AddRelativeTorque(Vector3.right);
addComponentData<PhysicsSyncData>(sutObjectEntity, physicsSync);
addComponentData<Position>(sutObjectEntity, new Position{Value=new float3(100,0,0)});
addComponentData<Rotation>(sutObjectEntity, new Rotation());
//the line below won't compile
addComponentData<CopyTransformFromGameObject>(sutObjectEntity, new CopyTransformFromGameObject());
// act
updateSystem<PhysicsSyncSystem>();
}