Unity小知識點大全(一)


原帖地址:https://zhuanlan.zhihu.com/p/54763553

1. 高亮選擇

在Scene面板右上角的Gizmo下拉列表中,可以通過設置Selection Outline選項決定是否在選中物體時顯示邊緣高亮的標識。

 

2.Pixel Perfect Camera

在攝像機上掛載Pixel Perfect Camera組件能夠使2D像素風格的游戲畫面更加整潔清晰。此組件需要使用Package Manager安裝2D Pixel Perfect包。

 

3.以Y軸為依據進行Sprite排序

對於2D游戲,將Transparency Sort Mode (Edit > Project Settings > Graphics ) 設置為Custom Axis,然后設置Transparency Sort Axis,場景中的Sprite可以根據Y軸進行排序。如下圖所示,當設置為(0,1,0)時,Y坐標相對較大的Sprite排在Y坐標相對較小的Sprite之下,當設置為(0,-1,0)時,則相反。

 

4. 延遲銷毀游戲對象

默認情況下,使用Destroy()方法會立即銷毀游戲對象,如果想延遲一段時間再銷毀,可在此方法中傳遞一個時間參數,如下:

Destroy(gameObject,2f);

 

5. 快速新建基於自定義Shader的材質

在Project面板中選中一個自定義Shader,右鍵選擇新建材質(Create>Material),則材質默認使用的着色器為z之前選擇的Shader,同時材質名稱為Shader的名稱。

 

6. 腳本不掛載到游戲對象執行

通常情況下,新建的腳本要掛載到游戲對象上才能運行,如果在腳本中的方法前使用[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.AfterSceneLoad)],可以不用掛載到任何游戲對象上即可在程序運行時執行此方法,方便在在程序初始化前做一些額外的初始化工作。如下代碼所示:

[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.AfterSceneLoad)]
public static void DoSomething()
{
    Debug.Log("It's the start of the game");
}

 

7. 保存程序運行時組件屬性的改變

在程序運行時改變組件的各屬性值,當停止運行后,這些改變將重置為編輯狀態下的數值,。程序運行時改變了組件的屬性值,可以點擊組件右上角的齒輪按鈕,選擇Copy Component命令,停止播放后,在相同的組件上,執行Paste Component Value,從而能夠保存在運行時對該組件做出的改變。

 

8. 獲取一個隨機布爾值

我們知道Random.value能夠返回0~1之間的隨機數,所以讓此隨機數與0.5f進行比較,就能夠獲取一個隨機的布爾值True或者False,如下代碼所示:

bool trueOrFalse = (Random.value > 0.5f);

 

9. 使用Struct代替Class

如果數據結構僅保存了有限的幾個數值變量,可以考慮使用struct代替Class,因為Class實例由垃圾回收機制來保證內存的回收處理;而struct變量使用完后立即自動解除內存分配。

 

10. Visual Studio 自動語句補全

當使用Visual Studio進行代碼編寫時,可雙擊Tab鍵來輔助完成像if、for、switch等語句的補全。

 

11.協程嵌套

在一個協程里開啟另外一個協程,可使用以下方法:

void Start()
{
    StartCoroutine(FirstCo());
}

IEnumerator FirstCo()
{
    yield return StartCoroutine(SecondCo());
}

IEnumerator SecondCo()
{
    yield return 0;
}

 

12.腳本變量參與動畫制作

使用Animation工具還可以改變腳本的變量。

 

13/14. Animation窗口快捷鍵

在Animation窗口中,按下Ctrl+A,所有關鍵幀將集中顯示在窗口中;選擇某些關鍵幀,按下F鍵,可將它們居中顯示在窗口中;按下C鍵,可以在曲線視圖和關鍵幀視圖間切換;按下K鍵添加關鍵幀。

 

15. 反向播放動畫

在Animator窗口中,設置動畫的Speed屬性為-1可使動畫片段反向播放。

 

16.快速比較距離

將兩點之間的距離與一個固定距離進行比較時,可使兩點相減然后取平方(即sqrMagnitude),然后用該值與某個距離值的平方進行比較。不建議使用Vector3.Distance方法獲取兩點之間距離,然后與給定的距離值進行比較。因為Vector3.Distance(a,b) 相當於 (a-b).magnitude,即求平方后開根,而sqrMagnitude方法省去了求平方根的操作,所以比magnitude執行快。

建議:

if ((pointA - pointB).sqrMagnitude < dist * dist)
{
}

不建議:

if (Vector3.Distance(pointA, pointB) < dist)
{
}

 

17. 使用TextMeshPro

使用TextMeshPro能夠獲得更多的文字控制自由度,並且能夠有效防止文字邊緣模糊。如下圖所示,第一行文字通過"Create > UI > Text"命令創建,第二行文字通過"Create > UI > TextMeshPro - Text"命令創建。

 

18.在Inspector面板中顯示私有變量

將私有變量標記為SerializeField,可在Inspector面板中將其顯示。

[SerializeField]
private int myNumber = 20;

 

19. 在Inspector面板中隱藏公有變量

如果不希望在Inspector面板中顯示公有變量,可將其標記為[HideInInspector]。

[HideInInspector]
public int myNumber = 20;

 

20. 變量重命名后繼續保持值

當變量重命名后,如果希望繼續保留其數值,可使用FormerlySerializedAs,如下代碼所示:

[FormerlySerializedAs("hp")]
public int myNumber = 20;

需要引用命名空間:

using UnityEngine.Serialization;

 

21.使用文件夾快捷方式

可將經常訪問的文件夾的快捷方式拖入Project面板中,雙擊快捷方式可快速打開此目錄。

 

 

22/23.F與Shift+F

選擇游戲對象,按下F鍵,可將Scene的視口中央移動到該游戲對象處;按下Shift+F,可將視口與該游戲對象鎖定,即無論如何移動游戲對象,視口中央始終跟隨此游戲對象。

 

24.對齊Scene與Game視圖

在Hierarchy面板中選擇攝像機,按下Ctrl+Shift+F,可將攝像機移動到能夠呈現Scene窗口中內容的位置。

 

25. CompareTag方法

當對游戲對象的Tag進行比對時,從性能考慮,可使用CompareTag方法,不建議使用雙等號進行判斷。因為CompareTag不需要內存分配以及垃圾回收,而從游戲對象中檢索字符串的話,會分配內存並且需要垃圾回收。

建議:

if (gameObject.CompareTag("Enemy"))
{

}

不建議:

if (gameObject.tag == "Enemy")
{

}

 

26.使用空游戲對象作為分隔符

在Hierarchy面板中,可以使用名稱中帶有分隔符的空游戲對象進行組織管理。

 

27. 查找含有某組件的游戲對象

如果需要查找掛載了某個組件的游戲對象,直接在Hierarchy面板的搜索框中輸入組件名稱即可,需要注意組件名稱中的空格,比如搜索”MeshCollider“而不是”Mesh Collider“。

 

 

28. 查找某種類型的資源

在Project面板中的搜索框中輸入"t:"+資源類型,可以過濾顯示某種類型的資源,比如輸入"t:scene",會過濾出所有場景文件,輸入"t:texture",則會顯示所有貼圖。

 

29. 移動代碼行

在Visual Studio中,使用快捷鍵Alt+上下鍵,可以在代碼塊中快速上移/下移光標所在的代碼行,不用復制粘貼。

 

30.快速查看組件文檔

點擊組件右上角的文檔按鈕,可快速打開關於當前組件的文檔。建議下載離線文檔,以便更加快速打開文檔,如果沒有下載,Unity將打開在線文檔。

 

 

31.文檔版本歷史

在Unity文檔中點擊Documentation Version鏈接,可查看不同版本的文檔。

 

32. 展開/折疊所有節點

在Hierarchy面板中,按下Alt鍵,鼠標左鍵點擊樹形節點,可展開/折疊當前節點下的所有子節點。

 

33.保存編輯器窗口布局

Unity窗口布局可自定義,調整完畢以后,如果希望以后繼續沿用此布局,點擊編輯器右上角的Layout下拉列表,選擇命令Save Layout,可將當前窗口布局進行保存。

 

34+35. 改變編輯器顏色

選擇命令Editor > Preferences命令,可自定義編輯器當前主題的顏色。

修改Playmode tint的顏色值,可以改變編輯器在運行模式時的顏色,以提醒開發者此時為運行模式。

 

36.開關場景特效

在Scene面板頂部的圖片下拉列表中,可選擇開關某種類型的特效。

 

37.MenuItem屬性

要在編輯器的菜單欄中選擇執行編寫的函數,可在函數前添加MenuItem屬性,如下代碼所示:

[MenuItem("MyMenu/Do Something")]
static void DoSomething()
{

}

 

38.ContextMenu

使用ContextMenu屬性標記函數,能夠在腳本所在的上下文菜單中調用,如下代碼所示:

[ContextMenu("Do Something")]
void DoSomething()
{
    
}

 

39+40. 隱藏和鎖定層

在編輯器右上角的Layers下拉列表中,點擊對應層右側的眼睛按鈕,可以隱藏或顯示某個層上的對象;點擊鎖按鈕,可對某個層進行鎖定或解鎖,當被鎖定后,該層上的所有對象將不能被選擇。

 

41.層子菜單

當創建層時,使用斜杠符進行路徑式命名可以為層添加子菜單,可以更好地組織項目。

 

42. 使用Scripting Define Symbols定義腳本

在不同的目標平台下添加 Scripting Define Symbols(Project Settings > Player > Scripting Define Symbols),以分號分隔,可以將這些符號像使用Unity內置標簽一樣用作#if指令的條件。

 

43+44.顏色

在使用Color控件的滴管工具進行顏色選擇時,可以拾取Unity編輯器之外的顏色。

在顏色屬性之間也可以使用右鍵命令進行復制粘貼。

 

45.最大化窗口

使用快捷鍵Shift+空格鍵,可以快速最大化鼠標所在的窗口,而不用選擇窗口右上角的Maximize命令。

 

46. 序列化Struct和Class

在數據類型Struct和Class聲明前使用[System.Serializable],可以將其顯示在Inspector面板中進行賦值。

using System.Collections;  
using System.Collections.Generic;  
using UnityEngine;  
public class Test : MonoBehaviour {  
    public A[] AList;  
    public B[] BList;  
    public A a;  
    public B b;  
    // Use this for initialization  
    void Start () {  
    }     
    // Update is called once per frame  
    void Update () {  
    }  
}  
[System.Serializable]  
public struct A  
{  
    public int a;  
    public GameObject b;  
    public Vector3 c;  
}  
public struct B  
{  
    public int a;  
    public GameObject b;  
    public Vector3 c;  
}  

可以看到,結構體B的數據無法再面板內顯示,而A的則可以顯示。

 

47.碰撞矩陣

在 Edit > Project Settings... > Physics 中,通過設置Layer Collision Matrix 可以決定能夠互相碰撞的層。

 

48.Collider相互作用矩陣

當兩個對象發生碰撞時,會發送不同的碰撞事件,如OnTriggerEnter、OnCollisionEnter等等,這取決於具體的碰撞體設置,下表列出了不同類型的碰撞體發生碰撞時所能發出的事件類型。詳情可參考Unity 官方文檔:

 

49. 數值輸入

在Inspector面板中涉及到數值輸入的字段,不僅可以直接輸入數據,還可以在輸入框中輸入數學表達式,按下回車后Unity會將計算結果填充到輸入框中。

 

50.鎖定Inspector

點擊Inspector右上角的鎖定按鈕,或在上下文菜單中選擇Lock命令,可以將當前選中游戲對象的Inspector面板鎖定。然后選擇Add Tab > Inspector命令,添加一個Inspector,這樣能夠方便在兩個游戲對象之間互相拷貝組件數據。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM