在Unity 3D中工作時,我遇到了一個實際上只運行其他幾種方法的8ms自我時間。 (所以說整個方法花了10ms,自己的時間是8ms,只有2ms進入了「其他方法」,所以那些8ms,必須來自profiler所示的方法)可變設置代碼效率
評論完成後,我注意到這個問題可以追溯到幾行代碼。 以下方法運行2200次。具有8.
private bool checkPiece (GameObject targetPiece,int side){
if(targetPiece == null) return false;
Transform targetTransform = targetPiece.transform;
Vector3 origin = myTransform.position;
Vector3 target = targetTransform.position;
/*
...
*/
return false;
}
自毫秒我試圖測試出每那些,只是做:
變換targetTransform = targetPiece.transform;
已經使2ms的自我時間。如果你想以合適的幀率運行,這太糟糕了。 除了顯而易見的運行此方法的次數更少。如何改善這種行爲?
我從來沒有見過團結就這麼高,只是設置轉換和職位。
我已經嘗試將變量放在方法之外,所以它們只會覆蓋每個更新。但是,這完全沒有區別。 (我想這已經在構建代碼時進行了優化?)
任何幫助將不勝感激。
看起來你已經收窄到變換屬性調用,所以它的出比其他你的控制稱它不太經常。你真的不知道這些屬性背後發生了什麼,例如變換可以存儲在一個集合而不是對象上,以優化迭代轉換,這取決於集合可能導致更長的查找時間。您可以通過查看運行時如何隨着轉換次數的增加而進行測試。 –
您正在8ms內運行2200次方法調用?這是每次通話3.63微秒,看起來不錯。 – Roberto
所有事情都考慮在內。我設法檢查一次,通過簡單地放入一個微型計時器,每隔50ms檢查一次,如果失敗,則確保持續100ms直到下一次檢查。因此,這些調用分散得更多(因爲每個腳本都會像2次調用變換,覆蓋該腳本的幾百個副本),並且讓它有時間呼吸:) – Smileynator