void Start() { CloneExisting(); input = new NativeArray <TestableData>(Testable.All.Count, Allocator.Persistent); output = new NativeArray <TestableData>(Testable.All.Count, Allocator.Persistent); int i = 0; foreach (var t in Testable.All) { var d = new TestableData(); d.position = new float4(t.transform.position.x, t.transform.position.y, t.transform.position.z, 0); d.mass = t.mass; d.rotation = t.transform.rotation; input[i] = d; i += 1; } }
public void Execute() { for (int i = 0; i < Input.Length; i++) { TestableData result = Input[i]; result.position += result.velocity * deltaTime; result.rotation = result.rotation * Quaternion.AngleAxis(30 * deltaTime, Vector3.up) * Quaternion.AngleAxis(45 * deltaTime, Vector3.forward); result.velocity += result.acceleration * deltaTime; result.acceleration = (center - result.position) * 0.5f; #if !NO_INTERACTION for (int j = 0; j < Input.Length; j++) { if (i == j) { continue; } var other = Input[j]; var delta = other.position - result.position; var distance = math.length(delta); if (distance <= 0.001f) { continue; } var dir = delta / distance; result.acceleration -= dir * 0.01f / distance; } #endif result.acceleration /= result.mass * 10; Output[i] = result; } }