2014-03-31 40 views
1

在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的自我時間。如果你想以合適的幀率運行,這太糟糕了。 除了顯而易見的運行此方法的次數更少。如何改善這種行爲?

我從來沒有見過團結就這麼高,只是設置轉換和職位。

我已經嘗試將變量放在方法之外,所以它們只會覆蓋每個更新。但是,這完全沒有區別。 (我想這已經在構建代碼時進行了優化?)

任何幫助將不勝感激。

+0

看起來你已經收窄到變換屬性調用,所以它的出比其他你的控制稱它不太經常。你真的不知道這些屬性背後發生了什麼,例如變換可以存儲在一個集合而不是對象上,以優化迭代轉換,這取決於集合可能導致更長的查找時間。您可以通過查看運行時如何隨着轉換次數的增加而進行測試。 –

+0

您正在8ms內運行2200次方法調用?這是每次通話3.63微秒,看起來不錯。 – Roberto

+0

所有事情都考慮在內。我設法檢查一次,通過簡單地放入一個微型計時器,每隔50ms檢查一次,如果失敗,則確保持續100ms直到下一次檢查。因此,這些調用分散得更多(因爲每個腳本都會像2次調用變換,覆蓋該腳本的幾百個副本),並且讓它有時間呼吸:) – Smileynator

回答

2

當你抓住對象或大多數組件的變換時,你付出了計算的代價。看看你是否可以在將它們傳遞給函數之前使用緩存來存儲你的gameObject的變換。

您可以將此行

private bool checkPiece (GameObject targetPiece, int side)

改變

private bool checkPiece (Transform targetPiece, int side)