Unity3D開發基礎知識詳解
本文簡介
本文旨在總結之前的部落格,因為之前的部落格比較零散,對於各個模組之間劃分不夠清晰,在此部落格進行總結歸納,並且附上最新遇到的一些問題及解決辦法,希望能夠對自己和他人都能夠有所幫助。另外在本文最後附加我瀏覽過的比較好的,相關問題解決的文章和網站,供大家方便查閱;如果您對我的文章滿意,可以收藏或者關注我。
常用方法簡介
1、Start() 開始方法;
2、Update() 正常更新邏輯,每渲染一幀都會呼叫
3、FixedUpdate() 不受幀率的變化,固定的時間間隔被呼叫,怎麼設定間隔?Edit->Project Setting->time下面的Fixed timestep
4、LateUpdate() 會在每一幀中被呼叫。在所有Update函式被呼叫之後才執行。有利於程式的有序執行。(例如:跟隨攝像機就應該在LateUpdate執行,因為它跟隨的物件也許需要在Update中執行
5、OnGUI() 遊戲介面繪製、更新
6、OnCollisionEnter(Conllision other) 在剛體與剛體開始接觸時候呼叫此方法,(記住是剛體之間的碰撞)
7、OnCollisionStay(Conllision other) 在剛體與剛體碰撞的過程中,呼叫此方法 每幀都會呼叫此方法,知道碰撞結束;
8、OnCollisionExit( Conllision other) 在剛體與剛體停止接觸時,呼叫此方法
9、OnTriggerEnter(Collider other) 當Collider(碰撞體)進入trigger(觸發器)時呼叫,這個訊息被髮送到觸發器碰撞體和剛體(或者碰撞體假設沒有剛體)。注意如果碰撞體附加了一個剛體,也只發送觸發器事件
10、判斷兩個物體之間的距離 Vector3.Distance( position1,position2)
物體操作
例項化
Transform shoot = (Transform)Instantiate(shotPrefab,firePoint.gameObject.transform.position,
firePoint.gameObject.transform.rotation);
shoot.rigidbody.velocity= transform.TransformDirection(Vector3.forward*100f);
velocity是對物體設定某個方向的速度
- 旋轉
Vector3.Rotation() 繞某個軸旋轉 Quaternion.Angle()
網路相關
在這麼一個多元化,網路越來越便宜和硬體效能越來越好的時代,單機遊戲已經被很多早年出道的公司佔據一席之地,並且單機遊戲不能夠有很好的社交性,至於你的應用聯網了,才算一個真正的應用,那麼在Unity中我們該怎麼使用網路呢?
網路協議
TCP
TCP(Transmission Control Protocol 傳輸控制協議)是一種面向連線的、可靠的、基於位元組流的傳輸層通訊協議,由IETF的RFC 793定義。在簡化的計算機網路OSI模型中,它完成第四層傳輸層所指定的功能,使用者資料報協議(UDP)是同一層內[1] 另一個重要的傳輸協議。在因特網協議族(Internet protocol suite)中,TCP層是位於IP層之上,應用層之下的中間層。不同主機的應用層之間經常需要可靠的、像管道一樣的連線,但是IP層不提供這樣的流機制,而是提供不可靠的包交換。 詳細簡介還是問度娘或者檢視相關書籍,建議書籍。
UDP
UDP 是User Datagram Protocol的簡稱, 中文名是使用者資料報協議,是OSI(Open System Interconnection,開放式系統互聯) 參考模型中一種無連線的傳輸層協議,提供面向事務的簡單不可靠資訊傳送服務,IETF RFC 768是UDP的正式規範。在網路中它與TCP協議一樣用於處理資料包,是一種無連線的協議。 詳細簡介還是問度娘或者檢視相關書籍,建議書籍。
程式碼怎麼寫
其實在unity中,我們用的就是Socket程式設計,和伺服器建立連線,並維持心跳,通過協議進行通訊;程式碼和我們平時在C#中寫的沒什麼差別,要記住,unity提供的是遊戲渲染引擎,開發工具,並不是語言,我們用的是C#,C#的很多特性,我們都可以使用,當然切記要注意.net版本;unity中的版本是3.5 full 和3.5 sub;這個你可以在unity buildsetting中的othersetting中找到,基本上我們如果沒有特殊需求,都會採用3.5sub。
編譯相關
我們的遊戲或者應用做好了,肯定要燒錄到裝置的,那麼這就牽涉到我們打包部署這個環節,如何正確打包,針對不同的平臺,我們的配置該如何呢?都有哪些差異呢?
檔案儲存路徑
每個應用安裝到裝置,系統都會在硬碟給它分配相應的檔案儲存空間,但是在不同的平臺,他們相對與系統的目錄路徑是不一致了,unity是個跨平臺的開發工具,就需要針對不同的平臺進行改變,為了方便,我們都會使用條件編譯,如下:
#if UNITY_ANDROID
the code of android
#endif
#if UNITY_IPHONE
the code of iphone
#endif
#if UNITY_WIN
the code of android
#endif
那麼這些條件在哪裡定義呢?首先你在VS的工程屬性中可是設定,在unity中的buildsetting中也能夠進行條件設定,程式碼中你也可以使用unity自帶的平臺個列舉,你可以通過程式碼提示列舉(RuntimePlatform)出來Application.platform==RuntimePlatform.Android判定運行遊戲的裝置是什麼型別。