簡體   English   中英

最快的旋轉方式 object Unity3D

[英]The fastest way to rotate object 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;
}

這似乎性能更高,但我現在的問題是我不知道如何將 Time.deltaTime 鏈接到此,因為你不能只寫

transform.rotation *= _rotationDelta * Time.deltaTime;

所以,我的問題是,如果旋轉增量在對象的生命周期內保持不變,那么旋轉 object 的最快方法是什么?

有兩個大問題:

每幀調用一次(更新方法)

未優化的算術(Transform.rotate)

改用剛體

解釋:
Transform.Rotate 的工作方式是它計算旋轉並將旋轉作為四元數返回,然后可以將其分配給旋轉值。 Update 方法中的調用是一個很大的性能問題,因為它們在每幀丟失之前被調用,並且可能導致卡頓或持續低 fps。

解決所有這些問題的方法很簡單,RigidBody。 您應該將阻力和 angular 阻力設置為 0,這樣旋轉就不會減慢。 如果您不想移動物體,也可以凍結 position。

調用只會在游戲開始時進行一次(在 Start() 方法中):

int angularPower = 5;

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM