【Unity3D】基礎知識學習筆記

1、基礎知識:

標題欄

菜單欄

工具欄:變換工具、gizmos切換、播放控件、層列表、布局列表

功能窗口

2、資源及資源類型:在project里面能夠create的資源。project面板可以對資源進行組織管理,創建資源,搜索資源。

3、模型和角色動畫:

角色動畫創建過程時:創建角色模型、骨骼設置、蒙皮、烘焙動畫。

maya、3dmax創建的模型、動畫,用插件輸出(fbx、obj)或者軟件自己的格式(max、blend),unity自身轉換。

maya、3dmax創建的模型、動畫,需要把IK/FK動畫烘焙為關鍵幀動畫,然后導入到unity中,才能識別。關鍵幀動畫能夠節省很多計算資源,因為IK/FK運動學動畫是每一幀都會涉及到運動學計算的。

maya、3dmax創建的模型、動畫,可以全部導入到unity中,然后分割;或者按照一定的命名規則,先分割再導入到untiy中。

4、材質和著色器:

材質和著色器都是屬于資源類型,在project面板中create,或者外部導入,紋理即圖片,不能使用unity創建,但是可以通過ps等圖形處理軟件創建編輯之后,導入到unity中使用。

Mesh Renderer組件:包含材質、著色器、紋理(貼圖)的選項和參數設置

可以這樣理解:紋理+著色器=材質

2D紋理:一張2D貼圖

movie紋理:視頻(mov/mpg/mpeg/mp4/avi/asf)通過quick time導入之后,被unity自動轉換為ogg theroa格式。即動畫紋理,之后可以像普通紋理一樣使用。

5、聲音文件:

聲音資源存放于project面板中,可以通過component中的audio listener和audio source組件進行使用。

6、prefab預設:

prefab預設:就是把設計好的游戲物體存為一個備份,當需要生成多個實例化物體時可以直接拷貝使用,避免了重復造輪子的問題。

重用性和運行實例化:創建預設的instance

實例的繼承性:修改預設屬性,所有的實例會跟著改變。

實例的重載:單獨修改實例,則只會對此實例生效。

7、游戲物體使用組件來豐富功能,組件使用project里面的資源來設置屬性。

8、scene視圖操作;

透視模式persp、正交模式iso

snap移動,按住ctrl鍵拖動物體,以一定的增量來移動。

表面移動,ctrl+shift拖動物體,一個物體在另一個物體表面移動。

頂點吸附:v鍵激活移動物體頂點,選擇好之后拖動,可在另一個物體的頂點上移動。

9、燈光和攝像機:

燈光類型:spot(聚光燈)、directional(方向光)、point(點燈光)、area(區域光)

10、unity腳本的使用:

5*Time.deltaTime:每秒5度或者5米,和unity的幀速率無關。deltaTime記錄了上一幀執行完成的時間。 1/FPS 這里的FPS是實時變化的。

11、C#腳本:test01.cs test02.cs

test01.cs引用test02.cs變量

需要把變量定義為public static類型,然后可以直接引用 test02.var;test02.cs

可以在test02中定義方法(讀寫變量的實現),然后在test01中調用test02的方法即可實現

在test02中定義靜態方法public static test02 instance;并在Awake中賦值為this,在test01中調用此方法test02.instance.var即可

test01和test02屬于同一個GameObject:直接調用getcomponent獲取腳本組件

test01和test02不屬于同一個GameObject:可以通過定義test02所屬GameObject的tag,然后在test01中FindGameObjectWithTag或者直接在test01中Find而不定義tag

12、GameObject的獲取:

通過腳本里面定義public的GameObject的變量,然后在Inspector面板中拖動另一個GameObject獲取

通過在腳本里面Find函數實現(直接Find或者給GameObject定義tag,然后通過Findtag來獲取)

13、腳本使用:

腳本里面的時間控制:

time類

yield WaitForSecond(5);//等待5s鐘之后再次返回執行。

腳本里面的隨機數產生:random類

腳本物體間通信方式:

GameObject.SendMessage:向自身的腳本中發送消息。參數為函數名和函數的參數

GameObject.BroadcastMessage:向自身及子物體的腳本中發送消息

GameObject.SendMessageUpwards:向自身及父物體的腳本中發送消息

使用delegate委托特性來實現。

用一段代碼來理解事件/委托機制的用法:下面的代碼是點擊中文,顯示中文名字,點擊英文,顯示英文名字:

[cpp]view plaincopy

usingUnityEngine;

usingSystem.Collections;

publicclassTestDelegate?:?MonoBehaviour

{

//定義一個委托(格式是不是很類很像),用來指向我們某個函數。(c++里面的指針函數)

//param參數是名字

privatedelegatevoidDebugString(string?param);

///?

///?輸出中文名字

///?

publicvoidDebugNameOfChina(string?str)

{

Debug.Log("中文名字:"+?str);

}

///?

///?輸出英文名字

///?

publicvoidDebugNameOfEnglish(string?str)

{

Debug.Log("English?Name:"+?str);

}

//定義一個委托的變量事件

privateDebugString?handlerDebugString;

voidOnGUI()

{

if(GUILayout.Button("輸出中文名字"))

{

//我想輸出中文名字的話就給handlerDebugString??賦值成輸出中文名字的這個函數DebugNameOfChina

handlerDebugString?=?DebugNameOfChina;

handlerDebugString("丁小未");

}

elseif(GUILayout.Button("Debug?English?Name"))

{

//我想輸出英文名字的話就給handlerDebugString??賦值成輸出中文名字的這個函數DebugNameOfEnglish

handlerDebugString?=?DebugNameOfEnglish;

handlerDebugString("DingXiaowei");

}

}

}

14、物理引擎:碰撞器與觸發器、射線碰撞檢測

collider組件、rigidbody組件。

constant force組件:世界坐標系方向力,局部坐標系方向力,世界坐標系扭矩力,局部坐標系扭矩力

在腳本里面使用rigidbody類,和力有關的,需要放到FixedUpdate里面更新。

能檢測碰撞發生的方式有兩種,一種是利用碰撞器,另一種則是利用觸發器。

碰撞器:一群組件,它包含了很多種類,比如:Box Collider(盒碰撞體),Mesh Collider(網格碰撞體)等,這些碰撞器應用的場合不同,但都必須加到GameObjecet身上。

觸發器,只需要在檢視面板中的碰撞器組件中勾選IsTrigger屬性選擇框。

碰撞器是觸發器的載體,而觸發器只是碰撞器身上的一個屬性。

當Is Trigger=false時,碰撞器根據物理引擎引發碰撞,產生碰撞的效果,可以調用OnCollisionEnter/Stay/Exit函數;

當Is Trigger=true時,碰撞器被物理引擎所忽略,沒有碰撞效果,可以調用OnTriggerEnter/Stay/Exit函數。

兩個物體碰撞,可以不要rigidbody存在,但必須要有collider組件存在。只要勾選了is Trigger,就會進入OnTriggerEnter方法。

如果想實現兩個剛體物理的實際碰撞效果時候用OnCollisionEnter,Unity引擎會自動處理剛體碰撞的效果。如果想在兩個物體碰撞后自己處理碰撞事件用OnTriggerEnter。

發送一條射線:physics.Raycast(),出參為RayCastHit類型變量 hit.collider.gameObject

15、物理引擎:joint關節組件

joint關節組件依賴于rigidbody剛體組件

hinge joint鉸鏈關節:開關門、兩個物體彈簧等

fixed joint固定關節:兩個物體的脫離效果

spring joint彈簧關節:

character joint角色關節:實際是一個球形關節,常用在人模型關節處,所以稱為角色關節

configurable joint配置關節:極高的可配置性,可以配置出以上所有關節的效果

16、mecanim動畫系統:

MAYA或3DMAX(角色建模、骨骼設置、蒙皮、動畫、烘焙)->導出到unity中->動畫分割(如果是一個完整的動畫)->

mecanim系統專門為人類模型資源提供了一套avatar系統。

avatar的創建過程:分析導入角色資源骨骼結構,與mecanim提供的標準骨骼結構對比,最后轉換或標志位mecanim可以識別的骨骼結構。通過avatar的創建,可以實現角色之間的retargeting(角色資源的重用)

在角色資源的輸入配置中,Rig的Animation Type選擇Humanoid,選擇Apply之后自動生成Avatar,之后可以通過configure avatar手動調整。

可以調整關節的mapping映射、調整muscles的運動范圍

body mask身體遮罩:在輸入配置的animation中,有mask選項,目的是讓身體的某部分運動失效。這樣減少動畫曲線的數量,減少計算量,優化CPU和內存的性能。

retargeting:只要角色創建了avatar,不同角色之間的animator controller就可以重用,這就是retargeting的原理。在animator組件中進行設置。

動畫片段設置:有些動畫效果只播放一遍,有些需要循環播放。在角色輸入的animations中設置。

root motion:角色的移動重心,勾選上就運用到scene的實例中,角色就可以運動,否則角色沒有重心指向,不能運動。通過root motion就可以使用角色動畫驅動角色運動。

root motion的腳本控制:如果不勾選,又想讓角色運動,則需要用腳本控制,一是在角色片段中創建curve曲線,二是在animator狀態機中添加變量,三是創建腳本,重寫方法OnAnimatorMove。

blendtree:幾個類似的動畫片段復合為一個動畫片段,在動畫狀態機里面創建。比如(左走,直走,右走動畫片段可以融合為一個blendtree)

嵌套blendtree可以實現走到跑的切換效果。

blendtree的參數設置:1D 2D效果

mecanim動畫層的使用:使用層、身體遮罩、權重等設置,可以實現兩個層的動畫同時播放的效果,比如一邊跑一邊射擊。

mecanim反向運動學運用:可以讓角色去精確的抓取物體。腳本里面需要重寫OnAnimatorIK,在動畫層中,打開IK Pass選項。

mecanim目標匹配:通過animator.MatchTarget函數,可以實現角色攀爬的效果,定位到某個具體目標上。

一般性角色動畫:非人類角色動畫,也可以使用mecanim動畫系統,唯一區別是avatar不可配置。

腳本實現角色跟隨效果。

腳本實現群組動畫效果。

17、輸入與控制:

輸入接口:input類

float h = Input.GetAxis("Horizontal");

float v = Input.GetAxis("Vertical");

判斷輸入值,然后控制player的移動

getaxis、getkey、getbutton、getjoystick等函數。

注意:unity GUI事件在一幀中可能觸發多次。OnGUI函數可能在一幀中執行多次。

18、角色控制器:CharacterController組件

角色控制常規方式:rigidbody、角色控制器(最常用)

角色控制器內置一個capsule collider,所以可以進行碰撞檢測。

角色控制器+第一人陳視角可以實現漫游效果。

19、粒子系統:particle system

創建:直接創建一個粒子系統GameObject或者先創建一個Empty的對象,再添加粒子系統組件。

粒子系統功能十分強大,可以創建出各種需要的特效。

20、樹:

Tree component

可以使用程序自動生成,但是如果手動調節過后,一些參數將不再可調。

樹的基本屬性、樹干的基本屬性、樹葉的基本屬性、樹與地形的配合使用。

21、地形引擎:Terrian

地形工具欄十分重要。下面的操作都是基于工具欄來選擇和設置。

地形創建與繪制:注意海平面flatten的設置才能產生凹地效果。

地形紋理和材質的選擇和使用。

地形中添加樹木、植被。

地形工具欄中最后一項是地形設置。包括基本的地形分辨率顯示,樹木植被顯示,風等效果的設置。

可以使用插件EasyRoads3D來創建公路效果。

22、GUI圖形用戶界面:

UGUI和NGUI學習。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,363評論 6 532
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,497評論 3 416
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,305評論 0 374
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,962評論 1 311
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,727評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,193評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,257評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,411評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,945評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,777評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,978評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,519評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,216評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,642評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,878評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,657評論 3 391
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,960評論 2 373

推薦閱讀更多精彩內容