1帆吻、基礎(chǔ)知識(shí):
標(biāo)題欄
菜單欄
工具欄:變換工具、gizmos切換播掷、播放控件审编、層列表、布局列表
功能窗口
2歧匈、資源及資源類型:在project里面能夠create的資源垒酬。project面板可以對(duì)資源進(jìn)行組織管理,創(chuàng)建資源件炉,搜索資源勘究。
3、模型和角色動(dòng)畫:
角色動(dòng)畫創(chuàng)建過程時(shí):創(chuàng)建角色模型斟冕、骨骼設(shè)置口糕、蒙皮、烘焙動(dòng)畫磕蛇。
maya景描、3dmax創(chuàng)建的模型、動(dòng)畫秀撇,用插件輸出(fbx超棺、obj)或者軟件自己的格式(max、blend)呵燕,unity自身轉(zhuǎn)換棠绘。
maya、3dmax創(chuàng)建的模型、動(dòng)畫氧苍,需要把IK/FK動(dòng)畫烘焙為關(guān)鍵幀動(dòng)畫适肠,然后導(dǎo)入到unity中,才能識(shí)別候引。關(guān)鍵幀動(dòng)畫能夠節(jié)省很多計(jì)算資源侯养,因?yàn)镮K/FK運(yùn)動(dòng)學(xué)動(dòng)畫是每一幀都會(huì)涉及到運(yùn)動(dòng)學(xué)計(jì)算的。
maya澄干、3dmax創(chuàng)建的模型逛揩、動(dòng)畫,可以全部導(dǎo)入到unity中麸俘,然后分割辩稽;或者按照一定的命名規(guī)則,先分割再導(dǎo)入到untiy中从媚。
4逞泄、材質(zhì)和著色器:
材質(zhì)和著色器都是屬于資源類型,在project面板中create拜效,或者外部導(dǎo)入喷众,紋理即圖片,不能使用unity創(chuàng)建紧憾,但是可以通過ps等圖形處理軟件創(chuàng)建編輯之后到千,導(dǎo)入到unity中使用。
Mesh Renderer組件:包含材質(zhì)赴穗、著色器憔四、紋理(貼圖)的選項(xiàng)和參數(shù)設(shè)置
可以這樣理解:紋理+著色器=材質(zhì)
2D紋理:一張2D貼圖
movie紋理:視頻(mov/mpg/mpeg/mp4/avi/asf)通過quick time導(dǎo)入之后,被unity自動(dòng)轉(zhuǎn)換為ogg theroa格式般眉。即動(dòng)畫紋理了赵,之后可以像普通紋理一樣使用。
5甸赃、聲音文件:
聲音資源存放于project面板中柿汛,可以通過component中的audio listener和audio source組件進(jìn)行使用。
6辑奈、prefab預(yù)設(shè):
prefab預(yù)設(shè):就是把設(shè)計(jì)好的游戲物體存為一個(gè)備份苛茂,當(dāng)需要生成多個(gè)實(shí)例化物體時(shí)可以直接拷貝使用,避免了重復(fù)造輪子的問題鸠窗。
重用性和運(yùn)行實(shí)例化:創(chuàng)建預(yù)設(shè)的instance
實(shí)例的繼承性:修改預(yù)設(shè)屬性妓羊,所有的實(shí)例會(huì)跟著改變。
實(shí)例的重載:單獨(dú)修改實(shí)例稍计,則只會(huì)對(duì)此實(shí)例生效躁绸。
7、游戲物體使用組件來豐富功能,組件使用project里面的資源來設(shè)置屬性净刮。
8剥哑、scene視圖操作;
透視模式persp淹父、正交模式iso
snap移動(dòng)株婴,按住ctrl鍵拖動(dòng)物體,以一定的增量來移動(dòng)暑认。
表面移動(dòng)困介,ctrl+shift拖動(dòng)物體,一個(gè)物體在另一個(gè)物體表面移動(dòng)蘸际。
頂點(diǎn)吸附:v鍵激活移動(dòng)物體頂點(diǎn)座哩,選擇好之后拖動(dòng),可在另一個(gè)物體的頂點(diǎn)上移動(dòng)粮彤。
9根穷、燈光和攝像機(jī):
燈光類型:spot(聚光燈)、directional(方向光)导坟、point(點(diǎn)燈光)屿良、area(區(qū)域光)
10、unity腳本的使用:
5*Time.deltaTime:每秒5度或者5米乍迄,和unity的幀速率無關(guān)管引。deltaTime記錄了上一幀執(zhí)行完成的時(shí)間士败。 1/FPS 這里的FPS是實(shí)時(shí)變化的闯两。
11、C#腳本:test01.cs test02.cs
test01.cs引用test02.cs變量
需要把變量定義為public static類型谅将,然后可以直接引用 test02.var;test02.cs
可以在test02中定義方法(讀寫變量的實(shí)現(xiàn))漾狼,然后在test01中調(diào)用test02的方法即可實(shí)現(xiàn)
在test02中定義靜態(tài)方法public static test02 instance;并在Awake中賦值為this,在test01中調(diào)用此方法test02.instance.var即可
test01和test02屬于同一個(gè)GameObject:直接調(diào)用getcomponent獲取腳本組件
test01和test02不屬于同一個(gè)GameObject:可以通過定義test02所屬GameObject的tag饥臂,然后在test01中FindGameObjectWithTag或者直接在test01中Find而不定義tag
12逊躁、GameObject的獲取:
通過腳本里面定義public的GameObject的變量隅熙,然后在Inspector面板中拖動(dòng)另一個(gè)GameObject獲取
通過在腳本里面Find函數(shù)實(shí)現(xiàn)(直接Find或者給GameObject定義tag稽煤,然后通過Findtag來獲取)
13囚戚、腳本使用:
腳本里面的時(shí)間控制:
time類
yield WaitForSecond(5);//等待5s鐘之后再次返回執(zhí)行酵熙。
腳本里面的隨機(jī)數(shù)產(chǎn)生:random類
腳本物體間通信方式:
GameObject.SendMessage:向自身的腳本中發(fā)送消息。參數(shù)為函數(shù)名和函數(shù)的參數(shù)
GameObject.BroadcastMessage:向自身及子物體的腳本中發(fā)送消息
GameObject.SendMessageUpwards:向自身及父物體的腳本中發(fā)送消息
使用delegate委托特性來實(shí)現(xiàn)驰坊。
用一段代碼來理解事件/委托機(jī)制的用法:下面的代碼是點(diǎn)擊中文匾二,顯示中文名字,點(diǎn)擊英文,顯示英文名字:
[cpp]view plaincopy
usingUnityEngine;
usingSystem.Collections;
publicclassTestDelegate?:?MonoBehaviour
{
//定義一個(gè)委托(格式是不是很類很像)察藐,用來指向我們某個(gè)函數(shù)皮璧。(c++里面的指針函數(shù))
//param參數(shù)是名字
privatedelegatevoidDebugString(string?param);
///?
///?輸出中文名字
///?
publicvoidDebugNameOfChina(string?str)
{
Debug.Log("中文名字:"+?str);
}
///?
///?輸出英文名字
///?
publicvoidDebugNameOfEnglish(string?str)
{
Debug.Log("English?Name:"+?str);
}
//定義一個(gè)委托的變量事件
privateDebugString?handlerDebugString;
voidOnGUI()
{
if(GUILayout.Button("輸出中文名字"))
{
//我想輸出中文名字的話就給handlerDebugString??賦值成輸出中文名字的這個(gè)函數(shù)DebugNameOfChina
handlerDebugString?=?DebugNameOfChina;
handlerDebugString("丁小未");
}
elseif(GUILayout.Button("Debug?English?Name"))
{
//我想輸出英文名字的話就給handlerDebugString??賦值成輸出中文名字的這個(gè)函數(shù)DebugNameOfEnglish
handlerDebugString?=?DebugNameOfEnglish;
handlerDebugString("DingXiaowei");
}
}
}
14、物理引擎:碰撞器與觸發(fā)器分飞、射線碰撞檢測(cè)
collider組件悴务、rigidbody組件。
constant force組件:世界坐標(biāo)系方向力譬猫,局部坐標(biāo)系方向力惨寿,世界坐標(biāo)系扭矩力,局部坐標(biāo)系扭矩力
在腳本里面使用rigidbody類删窒,和力有關(guān)的裂垦,需要放到FixedUpdate里面更新。
能檢測(cè)碰撞發(fā)生的方式有兩種肌索,一種是利用碰撞器蕉拢,另一種則是利用觸發(fā)器。
碰撞器:一群組件诚亚,它包含了很多種類晕换,比如:Box Collider(盒碰撞體),Mesh Collider(網(wǎng)格碰撞體)等站宗,這些碰撞器應(yīng)用的場合不同闸准,但都必須加到GameObjecet身上。
觸發(fā)器梢灭,只需要在檢視面板中的碰撞器組件中勾選IsTrigger屬性選擇框夷家。
碰撞器是觸發(fā)器的載體,而觸發(fā)器只是碰撞器身上的一個(gè)屬性敏释。
當(dāng)Is Trigger=false時(shí)库快,碰撞器根據(jù)物理引擎引發(fā)碰撞,產(chǎn)生碰撞的效果钥顽,可以調(diào)用OnCollisionEnter/Stay/Exit函數(shù)义屏;
當(dāng)Is Trigger=true時(shí),碰撞器被物理引擎所忽略蜂大,沒有碰撞效果闽铐,可以調(diào)用OnTriggerEnter/Stay/Exit函數(shù)。
兩個(gè)物體碰撞奶浦,可以不要rigidbody存在兄墅,但必須要有collider組件存在。只要勾選了is Trigger财喳,就會(huì)進(jìn)入OnTriggerEnter方法察迟。
如果想實(shí)現(xiàn)兩個(gè)剛體物理的實(shí)際碰撞效果時(shí)候用OnCollisionEnter斩狱,Unity引擎會(huì)自動(dòng)處理剛體碰撞的效果。如果想在兩個(gè)物體碰撞后自己處理碰撞事件用OnTriggerEnter扎瓶。
發(fā)送一條射線:physics.Raycast()所踊,出參為RayCastHit類型變量 hit.collider.gameObject
15、物理引擎:joint關(guān)節(jié)組件
joint關(guān)節(jié)組件依賴于rigidbody剛體組件
hinge joint鉸鏈關(guān)節(jié):開關(guān)門概荷、兩個(gè)物體彈簧等
fixed joint固定關(guān)節(jié):兩個(gè)物體的脫離效果
spring joint彈簧關(guān)節(jié):
character joint角色關(guān)節(jié):實(shí)際是一個(gè)球形關(guān)節(jié)秕岛,常用在人模型關(guān)節(jié)處,所以稱為角色關(guān)節(jié)
configurable joint配置關(guān)節(jié):極高的可配置性误证,可以配置出以上所有關(guān)節(jié)的效果
16继薛、mecanim動(dòng)畫系統(tǒng):
MAYA或3DMAX(角色建模、骨骼設(shè)置愈捅、蒙皮遏考、動(dòng)畫、烘焙)->導(dǎo)出到unity中->動(dòng)畫分割(如果是一個(gè)完整的動(dòng)畫)->
mecanim系統(tǒng)專門為人類模型資源提供了一套avatar系統(tǒng)蓝谨。
avatar的創(chuàng)建過程:分析導(dǎo)入角色資源骨骼結(jié)構(gòu)灌具,與mecanim提供的標(biāo)準(zhǔn)骨骼結(jié)構(gòu)對(duì)比,最后轉(zhuǎn)換或標(biāo)志位mecanim可以識(shí)別的骨骼結(jié)構(gòu)譬巫。通過avatar的創(chuàng)建咖楣,可以實(shí)現(xiàn)角色之間的retargeting(角色資源的重用)
在角色資源的輸入配置中,Rig的Animation Type選擇Humanoid芦昔,選擇Apply之后自動(dòng)生成Avatar诱贿,之后可以通過configure avatar手動(dòng)調(diào)整。
可以調(diào)整關(guān)節(jié)的mapping映射咕缎、調(diào)整muscles的運(yùn)動(dòng)范圍
body mask身體遮罩:在輸入配置的animation中珠十,有mask選項(xiàng),目的是讓身體的某部分運(yùn)動(dòng)失效锨阿。這樣減少動(dòng)畫曲線的數(shù)量宵睦,減少計(jì)算量,優(yōu)化CPU和內(nèi)存的性能墅诡。
retargeting:只要角色創(chuàng)建了avatar,不同角色之間的animator controller就可以重用桐智,這就是retargeting的原理末早。在animator組件中進(jìn)行設(shè)置。
動(dòng)畫片段設(shè)置:有些動(dòng)畫效果只播放一遍说庭,有些需要循環(huán)播放然磷。在角色輸入的animations中設(shè)置。
root motion:角色的移動(dòng)重心刊驴,勾選上就運(yùn)用到scene的實(shí)例中姿搜,角色就可以運(yùn)動(dòng)寡润,否則角色沒有重心指向,不能運(yùn)動(dòng)舅柜。通過root motion就可以使用角色動(dòng)畫驅(qū)動(dòng)角色運(yùn)動(dòng)梭纹。
root motion的腳本控制:如果不勾選,又想讓角色運(yùn)動(dòng)致份,則需要用腳本控制变抽,一是在角色片段中創(chuàng)建curve曲線,二是在animator狀態(tài)機(jī)中添加變量氮块,三是創(chuàng)建腳本绍载,重寫方法OnAnimatorMove。
blendtree:幾個(gè)類似的動(dòng)畫片段復(fù)合為一個(gè)動(dòng)畫片段滔蝉,在動(dòng)畫狀態(tài)機(jī)里面創(chuàng)建击儡。比如(左走,直走蝠引,右走動(dòng)畫片段可以融合為一個(gè)blendtree)
嵌套blendtree可以實(shí)現(xiàn)走到跑的切換效果曙痘。
blendtree的參數(shù)設(shè)置:1D 2D效果
mecanim動(dòng)畫層的使用:使用層、身體遮罩立肘、權(quán)重等設(shè)置边坤,可以實(shí)現(xiàn)兩個(gè)層的動(dòng)畫同時(shí)播放的效果,比如一邊跑一邊射擊谅年。
mecanim反向運(yùn)動(dòng)學(xué)運(yùn)用:可以讓角色去精確的抓取物體茧痒。腳本里面需要重寫OnAnimatorIK,在動(dòng)畫層中融蹂,打開IK Pass選項(xiàng)旺订。
mecanim目標(biāo)匹配:通過animator.MatchTarget函數(shù),可以實(shí)現(xiàn)角色攀爬的效果超燃,定位到某個(gè)具體目標(biāo)上区拳。
一般性角色動(dòng)畫:非人類角色動(dòng)畫,也可以使用mecanim動(dòng)畫系統(tǒng)意乓,唯一區(qū)別是avatar不可配置樱调。
腳本實(shí)現(xiàn)角色跟隨效果。
腳本實(shí)現(xiàn)群組動(dòng)畫效果届良。
17笆凌、輸入與控制:
輸入接口:input類
float h = Input.GetAxis("Horizontal");
float v = Input.GetAxis("Vertical");
判斷輸入值,然后控制player的移動(dòng)
getaxis士葫、getkey乞而、getbutton、getjoystick等函數(shù)慢显。
注意:unity GUI事件在一幀中可能觸發(fā)多次爪模。OnGUI函數(shù)可能在一幀中執(zhí)行多次欠啤。
18、角色控制器:CharacterController組件
角色控制常規(guī)方式:rigidbody屋灌、角色控制器(最常用)
角色控制器內(nèi)置一個(gè)capsule collider洁段,所以可以進(jìn)行碰撞檢測(cè)。
角色控制器+第一人陳視角可以實(shí)現(xiàn)漫游效果声滥。
19眉撵、粒子系統(tǒng):particle system
創(chuàng)建:直接創(chuàng)建一個(gè)粒子系統(tǒng)GameObject或者先創(chuàng)建一個(gè)Empty的對(duì)象,再添加粒子系統(tǒng)組件落塑。
粒子系統(tǒng)功能十分強(qiáng)大纽疟,可以創(chuàng)建出各種需要的特效。
20憾赁、樹:
Tree component
可以使用程序自動(dòng)生成污朽,但是如果手動(dòng)調(diào)節(jié)過后,一些參數(shù)將不再可調(diào)龙考。
樹的基本屬性蟆肆、樹干的基本屬性、樹葉的基本屬性晦款、樹與地形的配合使用炎功。
21、地形引擎:Terrian
地形工具欄十分重要缓溅。下面的操作都是基于工具欄來選擇和設(shè)置蛇损。
地形創(chuàng)建與繪制:注意海平面flatten的設(shè)置才能產(chǎn)生凹地效果。
地形紋理和材質(zhì)的選擇和使用坛怪。
地形中添加樹木淤齐、植被。
地形工具欄中最后一項(xiàng)是地形設(shè)置袜匿。包括基本的地形分辨率顯示更啄,樹木植被顯示,風(fēng)等效果的設(shè)置居灯。
可以使用插件EasyRoads3D來創(chuàng)建公路效果祭务。
22、GUI圖形用戶界面:
UGUI和NGUI學(xué)習(xí)穆壕。