Unity3D知識點

世界空間(World):整個虛擬世界的3d空間,在Unity3d中以米做爲單位,如長100米寬100米高100米的立體空間。android

屏幕空間(Screen):屏幕2d空間,大小就是屏幕的大小,以像素做爲單位,能夠設定屏幕大小,0點在左上角,向右爲x正向,向下爲y正向。多線程

視口空間(Viewport):攝像機的顯示範圍空間,x介於0-1,y介於0-1的2d空間,0點在左下腳,(1,1)點在右上角。世界空間座標經常須要轉換到視口空間,而後轉換到屏幕空間。app

 

Unity3D的坑:在C#腳本中建立了枚舉類型後,若是你已經在物體的腳本上指定了不一樣的枚舉類型,此時你打亂枚舉類型中變量次序,或者把新建類型放在最前面,那麼你以前指定的類型所有亂了,必須恢復順序。編輯器

 

Application.LoadLevel,該函數在加載關卡時不會重置已存在的靜態變量的值,須要手動重置ide

Destroy,使用這個銷燬對象的函數時,注意參數不是"類的對象",應該是"對象名.GameObject",不然場景中物體不會消失函數

DontDestroyOnLoad(GameObject obj),這個函數最好放在靜態構造函數中,這樣就只會執行一次;或者loading界面執行;或者用代碼來建立物體並掛載腳本。性能

WorldToScreenPoint,使用這個函數能夠進行場景3D與屏幕2D的座標轉換,相反的是camera.screenToWorldPointui

StartCoroutine,用於啓動一個協程,與主線程一塊兒執行,貌似多線程,其實是CPU分時的單線程,性能不是太好。可是,它有時用起來很方便,至關於在Update裏啓動一個計時器函數,能夠防止界面卡死。spa

Input.GetKey(KeyCode.LeftShift) && Input.GetKey(KeyCode.W),同時按下多個鍵 ,經常使用於實現人物奔跑效果插件

GetKey:按鍵按下期間返回true

GetKeyDown:按鍵按下的第一幀返回true

GetKeyUp:按鍵鬆開的第一幀返回true

GetAxis("Horizontal")和GetAxis("Vertical"):用方向鍵或WSAD來模擬-1到1的平滑輸入

退格鍵:backspace;回車鍵:return;退出鍵:esc;後面是按鍵名,例如, Input.GetKey("up"), Input.GetKey("esc")

 

Unity3D使用GUI或者GUILayout時,若是用代碼動態建立對象,可能會出現畫面閃爍問題。我一般的解決辦法是,看看哪些變量在其中被改變了,找到它們,儘可能不要改變便可。

GuiText始終會被放置在頂層,若是你不想這樣顯示,但又須要程序文字,建議使用3DText,把scale調小,把font size調大便可。 

 

若是須要NGUI支持Android電視的空鼠,能夠打開UICamera腳本,找到Awake函數, 把useMouse改成true,useTouch改成false

Android盒子遙控器按鍵:

Up Arrow          KeyCode.UpArrow
Down Arrow      KeyCode.DownArrow
Left Arrow         KeyCode.LeftArrow
Right Arrow       KeyCode.DownArrow
Center Button    KeyCode.JoystickButton0
Back button       KeyCode.Escape
Menu Button      KeyCode.Menu

 

Unity3D中要想腳本中變量在編輯器中顯示,須要知足如下要求:變量必須被public修飾,不能使用[HideInInspector]修飾,變量的類型必須繼承自MonoBehaviour。若是想把某個腳本掛在GameObject上,該腳本必須繼承自MonoBehaviour,不然根本看不到該腳本。

 

Unity3D Asset Store 下載的文件保存位置 C:\Users\sh\AppData\Roaming\Unity\Asset Store。

 

Unity3D對C#僅提供有限的支持,在Player Settings中能夠看到目前爲.Net 2.0 Subset。因此在編寫C#腳本時,可能沒法對某些C#特性提供支持,出現一些奇怪的現象。好比沒法修改單實例對象,經常須要把變量改成static類型才能夠修改爲功。

 

使用Android插件與外置硬件設備交互時,我遇到過數據讀取的錯誤,這裏可能須要對AndroidManifest.xml配置文件作以下修改:

<meta-data android:name="unityplayer.ForwardNativeEventsToDalvik" android:value="true" />

 

若是在Unity中使用了Android插件,那麼須要修改AndroidManifest.xml文件,主要改package和activity中的name,例如android:name=".MainActivity"。

 

在使用UnityPlayer.UnitySendMessage("gameobject", "functionname", result)這個函數時,有一點須要注意:第三個參數result中不能包含特殊字符,不然整個字符串傳遞到Unity遊戲中都會爲空。好比,在Android開發中,我先把"00"這個16進制字符串轉換爲了char字符,而後append到了一個StringBuilder字符串中,最後傳遞這個字符串到Unity中,收到的值老是爲空,且不管原來這個字符串是什麼。

相關文章
相關標籤/搜索