unity-movement-ai icon indicating copy to clipboard operation
unity-movement-ai copied to clipboard

3D rigidbody units rotate using x as forward

Open jjoshpoland opened this issue 3 years ago • 2 comments

Using the 3d units, the lookatdirection function seems to orient units using the x axis as forward, as they will align their x axis with the velocity direction instead of their z axis.

I've tried messing with the LookAtDirection code and haven't been able to determine the issue. The math looks right, so I don't know if the x-forward assumption is made somewhere else I haven't found. This would be useful for most applications as the assumption is that z is forward.

jjoshpoland avatar Aug 31 '20 15:08 jjoshpoland

Update for insight - after recreating the code from scratch without any references to 2D or flying, I was able to implement logic that keeps the unit looking forward along the z axis without spinning in circles.

Logic for forward looking (doesn't work when inserted into current master branch):

public static Quaternion GetLookDirection(Vector3 direction, ISteerable unit)
        {
            direction.Normalize();

            Quaternion targetRotation = Quaternion.LookRotation(direction);

            Quaternion newRotation = Quaternion.Slerp(unit.Rotation, targetRotation, 20f * Time.deltaTime);
            return newRotation;

            
        }

jjoshpoland avatar Sep 04 '20 20:09 jjoshpoland

unit in the above case is just a interfaced reference to a monobehavior with the MovementAIRigidbody logic implemented

jjoshpoland avatar Sep 04 '20 20:09 jjoshpoland