當前位置:首頁 » 游戲種類 » unity安卓游戲案例

unity安卓游戲案例

發布時間: 2023-08-30 19:35:44

⑴ 使用Unity開發安卓游戲怎麼進行性能優化

一、遇到麻煩時要調用「垃圾回收器」(Garbage Collector,無用單元收集程序,以下簡稱GC)

由於具有C/C++游戲編程背景,我們並不習慣無用單元收集程序的特定行為。確保自動清理你不用的內存,這種做法在剛開始時很好,但很快你就公發現自己的分析器經常顯示CPU負荷過大,原因是垃圾回收器正在收集垃圾內存。這對移動設備來說尤其是個大問題。要跟進內存分配,並盡量避免它們成為優先數,以下是我們應該採取的主要操作:

  1. 移除代碼中的任何字元串連接,因為這會給GC留下大量垃圾。

  2. 2.用簡單的「for」循環代替「foreach」循環。由於某些原因,每個「foreach」循環的每次迭代會生成24位元組的垃圾內存。一個簡單的循環迭代10次就可以留下240位元組的垃圾內存。

  3. 3.更改我們檢查游戲對象標簽的方法。用「if (gopareTag (「Enemy」)」來代替「if (go.tag == 「Enemy」)」 。在一個內部循環調用對象分配的標簽屬性以及拷貝額外內存,這是一個非常糟糕的做法。

  4. 4.對象庫很棒,我們為所有動態游戲對象製作和使用庫,這樣在游戲運行時間內不會動態分配任何東西,不需要的時候所有東西反向循環到庫中。

  5. 5.不使用LINQ命令,因為它們一般會分配中間緩器,而這很容易生成垃圾內存。

  6. 二、謹慎處理高級腳本和本地引擎C++代碼之間的通信開銷。

  7. 所有使用Unity3D編寫的游戲玩法代碼都是腳本代碼,在我們的項目中是使用Mono執行時間處理的C#代碼。任何與引擎數據的通信需求都要有一個進入高級腳本語言的本地引擎代碼的調用。這當然會產生它自己的開銷,而盡量減少游戲代碼中的這些調用則要排在第二位。

  8. 1.在這一情景中四處移動對象要求來自腳本代碼的調用進入引擎代碼,這樣我們就會在游戲玩法代碼的一個幀中緩存某一對象的轉換需求,並一次僅向引擎發送一個請求,以便減少調用開銷。這種模式也適用於其他相似的地方,而不僅局限於移動和旋轉對象。

  9. 2.將引用本地緩存到元件中會減少每次在一個游戲對象中使用 「GetComponent」 獲取一個元件引用的需求,這是調用本地引擎代碼的另一個例子。

  10. 三、物理效果

  11. 1.將物理模擬時間步設置到最小化狀態。在我們的項目中就不可以將讓它低於16毫秒。

  12. 2.減少角色控制器移動命令的調用。移動角色控制器會同步發生,每次調用都會耗損極大的性能。我們的做法是緩存每幀的移動請求,並且僅運用一次。

  13. 3.修改代碼以免依賴「ControllerColliderHit」 回調函數。這證明這些回調函數處理得並不十分迅速。

  14. 4.面對性能更弱的設備,要用skinned mesh代替physics cloth。cloth參數在運行表現中發揮重要作用,如果你肯花些時間找到美學與運行表現之間的平衡點,就可以獲得理想的結果。

  15. 5.在物理模擬過程中不要使用ragdolls,只有在必要時才讓它生效。

  16. 6.要謹慎評估觸發器的「onInside」回調函數,在我們的項目中,我們盡量在不依賴它們的情況下模擬邏輯。

  17. 7.使用層次而不是標簽。我們可以輕松為對象分配層次和標簽,並查詢特定對象,但是涉及碰撞邏輯時,層次至少在運行表現上會更有明顯優勢。更快的物理計算和更少的無用分配內存是使用層次的基本原因。

  18. 8.千萬不要使用Mesh對撞機。

  19. 9.最小化碰撞檢測請求(例如ray casts和sphere checks),盡量從每次檢查中獲得更多信息。

  20. 四、讓AI代碼更迅速

  21. 我們使用AI敵人來阻攔忍者英雄,並同其過招。以下是與AI性能問題有關的一些建議:

  22. 1.AI邏輯(例如能見度檢查等)會生成大量物理查詢。可以讓AI更新循環設置低於圖像更新循環,以減少CPU負荷。

  23. 五、最佳性能表現根本就不是來自代碼!

  24. 沒有發生什麼情況的時候,就說明性能良好。這是我們關閉一切不必要之物的基本原則。我們的項目是一個側邊橫向卷軸動作游戲,所以如果不具有可視性時,就可以關閉許多動態關卡物體。

  25. 1.使用細節層次的定製關卡將遠處的敵人AI關閉。

  26. 2.移動和障礙,當它們遠去時其物理碰撞機也會關閉。

  27. 3.Unity內置的「動畫挑選」系統可以用來關閉未被渲染對象的動畫。

  28. 4.所有關卡內的粒子系統也可以使用同樣的禁用機制。

⑵ unity3d在安卓手機上開發游戲,如何實現左手手指移動虛擬按鈕來控制方向

先得到虛擬搖桿Joystick的XY,UI上的局部坐標。
Vector3 dir = new Vector3(joystick.x, 0f, joystick.y).normalized;//joystick的方向
帶入攝像機的坐標系中得到要走的方向
dir = Camera.main.transform.TransformVector(dir);
至於速度就由你來定了。
character.position += dir * speed;
在Unity官方的例子中,就有UGUI做的虛擬搖桿的例子,可以參考。

熱點內容
絕地求生未來之役比賽為什麼進不去 發布:2023-08-31 22:07:08 瀏覽:1039
dota2位置什麼意思 發布:2023-08-31 22:00:04 瀏覽:432
lol電競是什麼樣子 發布:2023-08-31 21:58:40 瀏覽:946
絕地求生八倍鏡的那個圓圈怎麼弄 發布:2023-08-31 21:58:31 瀏覽:973
lol龍龜一個多少金幣 發布:2023-08-31 21:55:07 瀏覽:400
王者如何改游戲內名稱 發布:2023-08-31 21:55:06 瀏覽:683
游戲主播打廣告是什麼意思 發布:2023-08-31 21:55:06 瀏覽:1297
絕地求生如何免費拿到ss7賽季手冊 發布:2023-08-31 21:52:13 瀏覽:554
pgg是哪個國家的戰隊lol 發布:2023-08-31 21:52:07 瀏覽:442
一個人的時候才發現游戲很沒意思 發布:2023-08-31 21:49:24 瀏覽:1026