// public override void ControllerUpdate(ControllerMotion controller) public void MotionUpdate(RigNodeMotion controller) { motionInput = controller; this.currentMotion = new RigNodeMotion(controller); if (motionInput.velocity == Vector3.zero) { currentMotion.velocity = (currentMotion.position - lastMotion.position) / Time.deltaTime; } if (motionInput.acceleration == Vector3.zero) { currentMotion.acceleration = (currentMotion.velocity - lastMotion.velocity) / Time.deltaTime; } if (motionInput.angularVelocity == Vector3.zero) { currentMotion.angularVelocity = Quaternion.LerpUnclamped(Quaternion.identity, currentMotion.rotation * Quaternion.Inverse(lastMotion.rotation), 1 / Time.deltaTime).eulerAngles; currentMotion.angularVelocity.x = currentMotion.angularVelocity.x > 180f ? currentMotion.angularVelocity.x - 360f : currentMotion.angularVelocity.x; currentMotion.angularVelocity.y = currentMotion.angularVelocity.y > 180f ? currentMotion.angularVelocity.y - 360f : currentMotion.angularVelocity.x; currentMotion.angularVelocity.z = currentMotion.angularVelocity.z > 180f ? currentMotion.angularVelocity.z - 360f : currentMotion.angularVelocity.x; } if (motionInput.angularAcceleration == Vector3.zero) { currentMotion.angularAcceleration = currentMotion.angularVelocity - lastMotion.angularVelocity / Time.deltaTime; } lastMotion = new RigNodeMotion(currentMotion); interpolatedControllerUpdate.Invoke(currentMotion); }
// public override void ControllerUpdate(ControllerMotion controller) public void MotionUpdate(RigNodeMotion node) { transform.localPosition = node.position; transform.localRotation = node.rotation; }
public void MotionUpdate(RigNodeMotion node) { gameObject.transform.localPosition = node.position * (scale - 1); }
public RigNodeMotion(RigNodeMotion m) : this(m.position, m.velocity, m.acceleration, m.rotation, m.angularVelocity, m.angularAcceleration) { }