關於uLua在Unity3D的效能測試

2021-07-05 05:09:34 字數 1755 閱讀 9045

一:例項化並帶清空物件的對比

- lua中例項化5w個空物件並且直接刪除

function main.test( )   

print('lua start at:'..time.realtimes******artup)

for i=1,50000 do

local go = gameobject('init')

gameobject.destroyimmediate(go)

end

print('lua end at:'..time.realtimes******artup)

end

複製**

平均大概都要3.3秒

- mono中例項化5w個空物件並且直接刪除

debug.log("mono start at:"+time.realtimes******artup);     

for(int i =0; i < 50000; i++)

debug.log("mono end at:"+time.realtimes******artup);

複製**

大概平均下來是0.75秒

二:呼叫方法的對比

- lua中呼叫方法並做乙個簡單的處理,5w次

function main.testcall(go) go.transform.localposition = vector3(0,0,0)

end

複製**

耗時:1.64秒

- mono中呼叫方法做乙個簡單處理,5w次

void testinstantiate()
複製**

耗時:0.01秒

三:總結

從2組對比來看,第一組lua是mono的4.4倍耗時,第二組lua是mono的164倍耗時.

3.1:可能第一直覺,lua中go.transform會實時去get transform的指令碼,那麼我們優化一下

function main.testcall(go) go.localposition = vector3(0,0,0)

end

複製**

把transform快取一下,測試時間消耗:1.3秒 3.2:實際上上段優化中還是存在vector3(0,0,0)是構造乙個新物件,那麼我們直接用vector3.zero呢

function main.testcall(go) go.localposition = vector3.zero

end

複製**

耗時:0.86秒 3.3:最後我們把localposistion也快取一下

function main.testcall(pos) pos = vector3.zero

end

複製**

耗時:0.35秒  把指定的'物件'先取出來,在lua中都能提高很高的執行效率.因為通過" . " 去獲取乙個value時候,實際上是遍歷了table把裡面的key給搜尋一遍.

至於在unity3d中,我個人還是覺得,如果是涉及到update每幀都要處理的邏輯.還是mono妥妥的.實際上我們可以通過快取這些變數物件在lua中.可以最大限度地減少效能消耗.

unity3d關於碰撞問題

這個是我做忍者遊戲出現的問題,做個記錄也為以後有人遇到也可以借鑑。因為剛接觸unity,所以對其所知甚少,說錯的地方請指教。渲染幀的時間跟不上程式處理力速度的時間,所以產生了人物碰撞體碰到了牆,然後碰到了地面了,在渲染下一幀時,因為最後碰到的是地,所以發生碰撞 地面的事件,那它是怎麼回來的呢,應該是...

unity3d 關於MouseLook的問題

今天碰到乙個有關於unity引擎自帶的第一人稱視角中自帶的mouselook的指令碼的問題,任我怎麼修改rotationaxes中的列舉變數他都執行的單一的判斷操作。例如 指令碼一開始有public rotationaxes axes rotationaxes.mou andy 那麼引擎就不斷的捕獲...

Unity3D開發(九) Unity3d流光效果

遊戲開 壇 hello game 遊戲開發群 201276069 之前曾經注意過material 中紋理的屬性都有 tiling 和offset 但沒有深究過其用途,今天才知道竟然可以利用 offset做uv 動畫,從而完成各種有趣的動畫,比如流光效果!流過效果即通常一條高光光在物體上劃過,模擬高光...