Unity小知識點大全(一)

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

1. 高亮選擇

在Scene面板右上角的Gizmo下拉列表中,能夠經過設置Selection Outline選項決定是否在選中物體時顯示邊緣高亮的標識。數據結構

 

2.Pixel Perfect Camera

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

 

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()方法會當即銷燬遊戲對象,若是想延遲一段時間再銷燬,可在此方法中傳遞一個時間參數,以下:ide

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,這樣可以方便在兩個遊戲對象之間互相拷貝組件數據。

相關文章
相關標籤/搜索