sturdyspoon / unity-movement-ai

A Unity library for common movement AI
MIT License
1.95k stars 280 forks source link

3D rigidbody units rotate using x as forward #14

Open jjoshpoland opened 4 years ago

jjoshpoland commented 4 years ago

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 commented 4 years ago

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 commented 4 years ago

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