Unity的许多功能实际上是用C++编写的,并且在C#中作为内部调用公开。这是四元数。Slerp例如:
[MethodImpl(MethodImplOptions.InternalCall)]
private static extern void Slerp_Injected(ref Quaternion a, ref Quaternion b, float t, out Quaternion ret);
[FreeFunction("QuaternionScripting::Slerp", IsThreadSafe = true)]
public static Quaternion Slerp(Quaternion a, Quaternion b, float t)
{
Slerp_Injected(ref a, ref b, t, out var ret);
return ret;
}
幸运的是,如果您想要的是与转换相关的功能,那么有一个内置的实现
Quaternion
Vector3
System.Numerics
C#的命名空间与Unity中的命名空间具有许多相同的功能,这可能会为您提供您想要的:
using System.Numerics;
var axis = Vector3.UnitX;
var angle = 2f; // This is in radians
Quaternion q = Quaternion.CreateFromAxisAngle(rotAxis, rotAngle);