旋转Unity3D对象的最快方式



我有大量的对象,我想在Update()方法中移动和旋转。移动部分非常简单。这个问题与旋转性能有关。使用欧拉角的操作非常昂贵,我想优化这部分。

我试过同时使用

transform.rotation.eulerAngles += _rotationDirection * Time.deltaTime;

transform.Rotate(_rotationDirection * Time.deltaTime);

但是调用它们很昂贵。

由于对象有一个恒定的旋转值,我尝试了这个:

private void Awake()
{
_rotationDelta = Quaternion.Euler(_rotationDirection * _rotationSpeed);
}
private void Update()
{
transform.rotation *= _rotationDelta;
}

这似乎更性能,但我现在的问题是,我不知道如何链接时间。deltatime到这个,因为你不能只写

transform.rotation *= _rotationDelta * Time.deltaTime;

那么,我的问题是,如果在对象的生命周期内旋转增量是恒定的,旋转对象的最快方法是什么?

有两个大问题:

每帧调用一次(Update Method)

未优化算法(Transform.rotate)

使用RigidBody代替!

解释:
变换的方式。Rotate的工作原理是它计算旋转并将旋转作为四元数返回,然后可以将其分配给旋转值。调用Update方法是一个很大的性能问题,因为它们在每帧被丢弃之前被调用,并且可能导致口吃或持续低fps。

修复所有这一切是简单的,刚体。您应该将拖动和角拖动设置为0,这样旋转就不会减慢。如果你不移动你的对象,你也可以冻结位置。

在游戏开始时调用一次(在start()方法中):

int angularPower = 5;
void Start(){
GetComponent<Rigidbody>().AddTorque(angularPower, 0, 0);
}

最新更新