




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
.第3章
C#腳本編程
3.1C#腳本語(yǔ)言基礎(chǔ)
.目錄.6.
Input輸入
.2.第一個(gè)腳本游戲
.3.
MonoBehaviour類
.4.
GameObject類
.5.Transform類
.1
.腳本編輯器
1.
腳本編輯器
可登錄VisualStudio的官網(wǎng),選擇VisualStudio2019Community版進(jìn)行下載、安裝。VisualStudio安裝完成后,在Unity編輯器的菜單欄中選擇“Edit”>“Preferences”,選擇“ExternalTools”,在“ExternalScriptEditor”下拉列表框中將腳本編輯器設(shè)為VisualStudio2019(Community),如圖所示。這樣,在Unity中雙擊腳本文件,即可直接打開(kāi)VisualStudio2019軟件,編寫腳本。2.
第一個(gè)腳本游戲
在Unity中,開(kāi)發(fā)者編寫的每一個(gè)腳本都被視為一個(gè)自定義組件(Component),可通過(guò)AddComponent的方式將腳本添加到游戲?qū)ο笾小?/p>
用Unity完成第一個(gè)腳本程序:
(1)啟動(dòng)Unity,新建項(xiàng)目,在Hierarchy面板中創(chuàng)建一個(gè)新的游戲?qū)ο驝ube;(2)在Project面板中右鍵單擊,在彈出的快捷菜單中選擇“Create”>“Folder”,創(chuàng)建一個(gè)Scripts文件夾來(lái)管理項(xiàng)目中創(chuàng)建的腳本;(3)Project面板中右鍵單擊,彈出的快捷菜單中選擇“Create”>“C#Script”,在Assets/Scripts文件夾下創(chuàng)建一個(gè)新的腳本,默認(rèn)名稱為NewBehaviourScript.cs,將其重命名為Pratise1.cs;(4)雙擊Pratice1.cs腳本文件,打開(kāi)VisualStudio編譯器,如圖所示;(5)在Start()函數(shù)中添加一行語(yǔ)句,然后保存腳本;
Debug.Log("TheFisrtProgram");(6)回到Unity編輯器,將Pratise1.cs腳本拖曳到Hierarchy面板的Cube對(duì)象上,也可直接將其拖曳到Cube對(duì)象的Inspector面板中;(7)單擊運(yùn)行按鈕,可以看到Console面板中出現(xiàn)輸出信息3.
MonoBehaviour類
MonoBehaviour類是Unity中所有腳本的基類,所有腳本類均需要從它直接或間接繼承,定義了基本的腳本行為,還定義了對(duì)各種特定事件(如模型碰撞、鼠標(biāo)移動(dòng))的響應(yīng)方法。
幾個(gè)常用的必然事件函數(shù):
Awake():腳本喚醒函數(shù),腳本實(shí)例在創(chuàng)建時(shí)立刻調(diào)用,早于Start()調(diào)用;
Start():只在腳本實(shí)例被啟用時(shí)調(diào)用,位于Awake()函數(shù)之后,在第一次Update()函數(shù)執(zhí)行前調(diào)用,通常用于游戲?qū)ο蟮某跏蓟?/p>
Update():每幀刷新時(shí)調(diào)用一次,用于更新游戲場(chǎng)景和狀態(tài),大部分游戲代碼寫在此函數(shù)中;若游戲以每秒60幀的速度運(yùn)行,則Update()將被調(diào)用60次;
FixedUpdate():固定更新函數(shù),每個(gè)固定物理時(shí)間間隔調(diào)用一次,用于對(duì)象物理狀態(tài)的更新;
LateUpdate():延遲更新函數(shù),每幀調(diào)用一次,在Update()之后,用于調(diào)整腳本執(zhí)行順序,與相機(jī)有關(guān)的更新一般放在此函數(shù)中。4.GameObject類
GameObject類是Unity場(chǎng)景里面所有實(shí)體的基類。Unity中的所有實(shí)體都是游戲?qū)ο?,如Unity自帶的球體、正方體等各種物體以及場(chǎng)景中使用的模型等。常用屬性有:
transform:附屬于此游戲?qū)ο笊系腡ransform組件。;
tag:游戲?qū)ο蟮臉?biāo)簽;常用的靜態(tài)函數(shù)有:
GameObject.CreatePrimitive():創(chuàng)建一個(gè)帶有基本網(wǎng)格渲染器和相應(yīng)碰撞器的游戲?qū)ο螅?/p>
GameObject.Find():查找并返回指定名稱的游戲?qū)ο?,若此游戲?qū)ο鬀](méi)有被找到,則返回空。;
GameObject.FindWithTag():查找一個(gè)用tag做標(biāo)識(shí)的活動(dòng)的游戲?qū)ο?,如果沒(méi)有找到則為空。 GameObject.Instantiate():克隆游戲?qū)ο蟛⒎祷乜寺?duì)象。常用函數(shù): gameObject.GetComponent():獲取指定的組件,如果沒(méi)有則為空 gamObject.AddComponent():添加一個(gè)組件到游戲?qū)ο?gameObject.SetActive():激活或停用此游戲?qū)ο?.Transform類
在Unity場(chǎng)景中的每一個(gè)游戲?qū)ο蠖加蠺ransform組件,用于儲(chǔ)存并操控物體的位置Position、旋轉(zhuǎn)Rotation和縮放Scale。獲取游戲?qū)ο蟮奈恢茫?/p>
transform.position:獲得物體在世界坐標(biāo)系中的三維坐標(biāo)值,保存在對(duì)象Vector3(x,y,z)中。
Vector3.right:表示X軸正方向,相當(dāng)于Vector3(1,0,0);
Vector3.up:表示Y軸正方向,相當(dāng)于Vector(0,1,0);
Vector.forward:表示Z軸正方向,相當(dāng)于Vector3(0,0,1)。移動(dòng)游戲?qū)ο螅?/p>
transform.Translate(Vector3offset):將游戲?qū)ο蟀粗付ǚ较蚝途嚯x移動(dòng)。
相當(dāng)于transform.position=transform.position+offset。
transform.Translate(Vector3,Space):Space代表坐標(biāo)系,其中可使用Space.Self表示自身體系、Space.World表示世界體系。若Space省略不寫,則是指Space.Self??s放游戲?qū)ο螅?/p>
Transform.localScale:自身縮放旋轉(zhuǎn)游戲?qū)ο?/p>
transform.Rotate():游戲?qū)ο蟀粗付ǖ臍W拉角旋轉(zhuǎn)、自轉(zhuǎn);
transform.RotateAround(point,axis,angle):游戲?qū)ο髧@某個(gè)點(diǎn)旋轉(zhuǎn)。6. Input輸入類
Input是輸入系統(tǒng)的接口,使用Input類能夠讀取輸入管理器設(shè)置的按鍵,以及訪問(wèn)移動(dòng)設(shè)備的多點(diǎn)觸控或加速感應(yīng)數(shù)據(jù)。獲取鼠標(biāo)操作信息的常用函數(shù):
Input.GetMouseButton():獲取鼠標(biāo)按鍵狀態(tài),返回true或false;當(dāng)指定的鼠標(biāo)按鍵被按下時(shí)返回true,其中0對(duì)應(yīng)鼠標(biāo)左鍵,1對(duì)應(yīng)鼠標(biāo)右鍵,2對(duì)應(yīng)鼠標(biāo)中鍵。。
Input.GetMouseButtonDown():獲取鼠標(biāo)按鍵按下?tīng)顟B(tài),當(dāng)用戶按下指定鼠標(biāo)按鍵時(shí)的那一幀返回true。
Input.GetMouseButtonUp():獲取鼠標(biāo)按鍵彈起狀態(tài),當(dāng)用戶釋放指定鼠標(biāo)按鍵時(shí)的那一幀返回true。獲取鍵盤按鍵信息的常用函數(shù):
Input.GetKey():獲取鍵盤按鍵狀態(tài),當(dāng)指定的鍵盤按鍵被用戶按住時(shí)返回true。
Input.GetKeyDown():獲取鍵盤按鍵按下信息,當(dāng)用戶按下指定名稱的按鍵時(shí)的那一幀返回true。
Input.GetKeyUp():獲取鍵盤按鍵彈起信息,當(dāng)用戶釋放指定名稱的按鍵時(shí)的那一幀返回true。獲取移動(dòng)設(shè)備信息的函數(shù):
Input.touches():獲取在最近一幀中觸摸在屏幕上的每一根手指的狀態(tài)數(shù)據(jù)。
Input.GetTouch():獲取觸摸信息的對(duì)象。.謝謝觀看
廣東輕工職業(yè)技術(shù)學(xué)院
數(shù)字媒體技術(shù)專業(yè).Unity3D引擎的腳本編程
3.2圖形用戶界面UGUI
.目錄.7
.用腳本來(lái)控制UI元素的交互
.2.圖像Image
.3.文本Text
.4.按鈕Button
.5.開(kāi)關(guān)Toggle
.1
.畫布Canvas
.6.滑塊Slider
1.
畫布Canvas
圖形用戶界面(GraphicalUserInterface,GUI)是游戲中重要的組成部分之一。
Canvas是所有GUI的根節(jié)點(diǎn),是承載所有UI元素的區(qū)域,所有UI元素都是Canvas的子對(duì)象。在菜單中選擇“GameObject”→“UI”→“Canvas”,即可在場(chǎng)景中創(chuàng)建一個(gè)Canvas。若場(chǎng)景中沒(méi)有EventSystem物體,這時(shí)系統(tǒng)會(huì)自動(dòng)創(chuàng)建一個(gè)EventSystem。
創(chuàng)建畫布如圖所示,Scene面板中的白色矩形就是畫布。2.
圖像Image
以添加背景圖像為例,講解Image的使用方法。
操作步驟如下:
(1)在Hierarchy面板中單擊鼠標(biāo)右鍵,選擇“UI”→“Image”,創(chuàng)建一個(gè)Image類的對(duì)象,其會(huì)被自動(dòng)添加到Canvas下,與Canvas形成父子關(guān)系;將其改名為Background。;(2)添加背景圖像:將準(zhǔn)備好的背景圖像拖曳到Inspector面板下Background中的Image組件的SourceImage字段中;將圖像的PosX、PosY、PosZ值均設(shè)為0,圖像出現(xiàn)在畫布的中心位置;(3)調(diào)整背景圖像,使圖像平鋪滿整個(gè)畫布;可在Inspector面板的Background中單擊“SetNativeSize”按鈕,調(diào)整圖像和Canvas屬性,將圖像的大小設(shè)置為1920×548。修改Canvas的CanvasScaler組件,將縮放模式設(shè)置成ScaleWithScreenSize,參考尺寸設(shè)置為1920×548。3.文本Text
文本是UI中很常見(jiàn)的組件,在Hierarchy面板中單擊鼠標(biāo)右鍵,選擇“UI”→“Text”,創(chuàng)建一個(gè)Text類的對(duì)象,其會(huì)被自動(dòng)添加到Canvas下。Text組件如圖所示,在Inspector面板中的Text中,可輸入需要顯示的文字,設(shè)置字體、大小、對(duì)齊方式、顏色等。4.按鈕Button
在圖形用戶界面中,按鈕是交互性很強(qiáng)的控件,按鈕響應(yīng)單擊事件,如常用的確定按鈕和取消按鈕。在Hierarchy面板中單擊鼠標(biāo)右鍵,選擇“UI”>“Button”,創(chuàng)建一個(gè)Button類的對(duì)象,其自動(dòng)添加到Canvas之下。Button控件默認(rèn)包括一個(gè)文本控件Text,用來(lái)顯示按鈕上的文字,Text元素是可選的,若按鈕是以圖像的形式呈現(xiàn),則可刪除此Text元素。例如,在背景中添加一個(gè)“確定”按鈕,通過(guò)圖像切換呈現(xiàn)按鈕的不同狀態(tài)。
具體操作步驟如下:(1)在Hierarchy面板中單擊鼠標(biāo)右鍵,選擇“UI”→“Button”,創(chuàng)建一個(gè)Button類的對(duì)象,將按鈕改名為ComformBt,并調(diào)整按鈕的大小和位置。(2)將已準(zhǔn)備好的圖像導(dǎo)入到Assets文件夾下,精靈圖像的處理如圖所示。將TextureType設(shè)置成Sprite(2DandUI)、SpriteMode設(shè)置成Multiple后,單擊“SpriteEditor”按鈕,再單擊“Slice”按鈕,將圖像分割成多張獨(dú)立的圖像,并將分割后的圖像應(yīng)用在按鈕上。4.按鈕Button
例如,在背景中添加一個(gè)“確定”按鈕,通過(guò)圖像切換呈現(xiàn)按鈕的不同狀態(tài)。
具體操作步驟如下:(3)如圖所示,將4種狀態(tài)的按鈕圖像分別拖曳到Button組件對(duì)應(yīng)位置。
按鈕不同狀態(tài)下的貼圖效果如圖所示,可以看到按鈕未單擊、鼠標(biāo)指針經(jīng)過(guò)按鈕、單擊按鈕會(huì)呈現(xiàn)出不同的圖像樣式。5.Toggle開(kāi)關(guān)
Toggle(開(kāi)關(guān))是一個(gè)復(fù)選框,用于實(shí)現(xiàn)選項(xiàng)的勾選/不勾選操作,適合制作開(kāi)關(guān)類按鈕。默認(rèn)的Toggle由4個(gè)游戲?qū)ο蠼M成,如圖所示,包含Toggle(開(kāi)關(guān))本體、Background(背景圖像)、Checkmark(勾選圖,默認(rèn)為“
”)和Label(文本)。
例如,在場(chǎng)景中添加音樂(lè)開(kāi)關(guān),控制背景音樂(lè)的播放與停止,具體操作步驟如下:
1.在場(chǎng)景中添加背景音樂(lè)
Hierarchy面板中選中“MainCamera”,Inspector面板中單擊“AddComponent”按鈕,添加AudioSource和AudioListener組件;
Project面板中,將Assets中的音樂(lè)拖曳到Inspector面板中的“AudioClip”處,勾選“PlayOnAwake”復(fù)選框,如圖所示。5.Toggle開(kāi)關(guān)
例如,在場(chǎng)景中添加音樂(lè)開(kāi)關(guān),控制背景音樂(lè)的播放與停止,具體操作步驟如下:
2.添加音效控制開(kāi)關(guān)
Hierarchy面板中單擊鼠標(biāo)右鍵,選擇“UI”→“Toggle”,創(chuàng)建一個(gè)Toggle類的對(duì)象,并將開(kāi)關(guān)改名為Toggle_sound;
調(diào)整開(kāi)關(guān)大小和位置。本例中使用圖像來(lái)制作開(kāi)關(guān),不需要文本組件,因此刪除開(kāi)關(guān)下的Label對(duì)象。
Hierarchy面板中選中“Toggle_sound”,取消選中Toggle組件中的“IsOn”復(fù)選框。
將準(zhǔn)備好的兩張圖像導(dǎo)入Assets文件夾下,并將圖像轉(zhuǎn)換成Sprite(2DandUI)貼圖類型,分別將其拖曳到對(duì)應(yīng)的“SourceImage”中,設(shè)置開(kāi)關(guān)圖像如圖所示。5.Toggle開(kāi)關(guān)
例如,在場(chǎng)景中添加音樂(lè)開(kāi)關(guān),控制背景音樂(lè)的播放與停止,具體操作步驟如下:
3.將MainCamera的AudioSource組件的mute(靜音)和Toggle關(guān)聯(lián)
Hierarchy面板中選中“Toggle_sound”,在Inspector面板中Toggle組件的OnValueChanged(Boolean)下面單擊“+”按鈕添加新事件。
將MainCamera對(duì)象拖曳到RuntimeOnly下方,然后在NoFunction下拉列表中選擇“AudioSource”→“(Dynamicbool)mute”。創(chuàng)建并關(guān)聯(lián)事件如圖所示。運(yùn)行游戲,單擊開(kāi)關(guān)按鈕并嘗試打開(kāi)和關(guān)閉音樂(lè)。添加了音樂(lè)控制開(kāi)關(guān)按鈕的場(chǎng)景圖狀態(tài)如圖所示。6.滑塊Slider
默認(rèn)的Slider由4個(gè)游戲?qū)ο蠼M成,Slider組件如圖3-39所示,包括Slider(滑塊)本體、Background(背景圖像)、Fill(填充)和Handle(滑動(dòng)柄)。
例如,在音樂(lè)開(kāi)關(guān)旁邊增加一個(gè)滑塊來(lái)調(diào)節(jié)音量大小,具體操作步驟如下:
1.設(shè)置Slider將Slider改名為Slider_volume,并調(diào)整其位置及大小,將滑塊移動(dòng)到音樂(lè)開(kāi)關(guān)按鈕右側(cè)。為滑塊的每個(gè)部分設(shè)置相應(yīng)的圖像:分別選擇Background、Fill、Handle,將準(zhǔn)備的3張圖像拖曳到對(duì)應(yīng)的“SourceImage”屬性框中。
2.將MainCamera的AudioSource組件的volume(音量)和Slider關(guān)聯(lián)
Hierarchy面板中選中“Slider_volume”,在Inspector面板中Slider組件的OnValueChanged(Single)下面單擊“+”按鈕添加新事件。
將MainCamera對(duì)象拖曳到RuntimeOnly下方,然后在NoFunction下拉列表中選擇“AudioSource”→“(Dynamicbool)volume”。創(chuàng)建并關(guān)聯(lián)事件如圖所示。7. 用腳本來(lái)控制UI元素的交互
Button、Toggle、Slider元素都是交互類的UI元素??赏ㄟ^(guò)組件自帶的腳本控制交互操作,也可編寫腳本來(lái)靈活控制UI元素的交互。
制作一組技能冷卻圖標(biāo),來(lái)講解用腳本監(jiān)聽(tīng)和觸發(fā)UI交互事件。通過(guò)腳本實(shí)現(xiàn)監(jiān)聽(tīng)鼠標(biāo)指針經(jīng)過(guò)、鼠標(biāo)指針離開(kāi)和鼠標(biāo)單擊事件,具體操作步驟如下:
1.技能冷卻圖標(biāo)界面
Hierarchy面板中單擊鼠標(biāo)右鍵,在彈出的快捷菜單中選擇“CreateEmpty”,創(chuàng)建一個(gè)空物體,將其改名為Bar。選中“Bar”,單擊鼠標(biāo)右鍵,在彈出的快捷菜單中選擇“UI”→“Image”,創(chuàng)建圖像,將其改名為Background并添加到Bar之下;將準(zhǔn)備好的圖像拖曳到Background的“SourceImage”中,作為背景圖像;調(diào)整Background的大小和位置。選中“Bar”,單擊鼠標(biāo)右鍵,在彈出的快捷菜單中選擇“CreateEmpty”,創(chuàng)建空物體,將其改名為item;
在item之下,新建3個(gè)圖像對(duì)象,分別對(duì)應(yīng)icon冷卻圖標(biāo)、buffer蒙版和frame圖標(biāo)邊框。將準(zhǔn)備好的3張圖像拖曳到對(duì)應(yīng)的“SourceImage”中,并按順序疊放,技能冷卻圖標(biāo)界面如圖所示。設(shè)置buffer的Image屬性,將圖像類型設(shè)置成Filled,選擇360度填充,從頂部開(kāi)始。將frame對(duì)象設(shè)置為不可見(jiàn):在其Inspector面板中,將取消其名字前的復(fù)選框。7. 用腳本來(lái)控制UI元素的交互
通過(guò)腳本實(shí)現(xiàn)監(jiān)聽(tīng)鼠標(biāo)指針經(jīng)過(guò)、鼠標(biāo)指針離開(kāi)和鼠標(biāo)單擊事件,具體操作步驟如下:2.編寫腳本:實(shí)現(xiàn)鼠標(biāo)指針經(jīng)過(guò)技能冷卻圖標(biāo)時(shí)顯示綠色邊框,鼠標(biāo)指針離開(kāi)時(shí)綠色邊框消失的效果。
Project面板中,選擇“Assets”→“Scripts”文件夾,單擊鼠標(biāo)右鍵,在彈出的快捷菜單中選擇“Create”→“C#Script”,新建腳本文件BarCtrl.cs。。本實(shí)例要監(jiān)聽(tīng)鼠標(biāo)指針經(jīng)過(guò)、鼠標(biāo)指針離開(kāi)和鼠標(biāo)單擊事件,腳本需繼承對(duì)應(yīng)的事件監(jiān)聽(tīng)接口IPointerEnterHandler、IPointerExitHandler、IPointerClickHandler
。腳本中需要重寫接口中的事件處理函數(shù)OnPointerEnter、OnPointerExit、OnPointerClick。3.實(shí)現(xiàn)技能冷卻效果技能冷卻就是用腳本控制buffer對(duì)象,當(dāng)單擊圖標(biāo)時(shí),將buffer對(duì)象中的FillAmount屬性值從1逐漸減到0。腳本中增加變量speed,用于控制圖像填充的速度;變量img用來(lái)存放將要修改屬性的圖像對(duì)象。動(dòng)態(tài)修改buffer對(duì)象中的FillAmount值,此段代碼放在Update()函數(shù)中。游戲每運(yùn)行一幀,F(xiàn)illAmount值遞減一次,直到FillAmount值為07. 用腳本來(lái)控制UI元素的交互
通過(guò)腳本實(shí)現(xiàn)監(jiān)聽(tīng)鼠標(biāo)指針經(jīng)過(guò)、鼠標(biāo)指針離開(kāi)和鼠標(biāo)單擊事件,具體操作步驟如下:
4.運(yùn)行腳本將BarCtrl.cs拖曳到Item對(duì)象上,調(diào)整冷卻速度,如圖所示。將Speed設(shè)置成公共變量,因此可以在Item對(duì)象的Inspector面板中設(shè)置Speed值,用以控制圖像填充的速度。
運(yùn)行游戲,技能冷卻圖標(biāo)的不同狀態(tài)及過(guò)渡效果如圖所示。.謝謝觀看
廣東輕工職業(yè)技術(shù)學(xué)院
數(shù)字媒體技術(shù)專業(yè).Unity3D引擎的腳本編程
3.3動(dòng)畫系統(tǒng)
.目錄.2.使用動(dòng)畫控制器在動(dòng)畫之間切換
.3.用腳本控制動(dòng)畫切換
.1
.創(chuàng)建動(dòng)畫
1.
創(chuàng)建動(dòng)畫
Unity有一個(gè)豐富而復(fù)雜的動(dòng)畫系統(tǒng)(也稱為Mecanim)。動(dòng)畫系統(tǒng)具有以下功能:為Unity的所有元素(包括對(duì)象、角色和屬性)提供簡(jiǎn)單的動(dòng)畫工作流程和動(dòng)畫設(shè)置,支持導(dǎo)入外部的動(dòng)畫剪輯以及Unity內(nèi)創(chuàng)建的動(dòng)畫。
以一個(gè)球體的運(yùn)動(dòng)為例,來(lái)講解動(dòng)畫的基本使用方法。
操作步驟如下:
1.
Hierarchy面板中創(chuàng)建一個(gè)新的游戲?qū)ο骃phere,單擊菜單“Window”→“Animation”→“Animation”(快捷鍵Ctrl+6),打開(kāi)Animation面板,給物體添加動(dòng)畫,如圖所示。
2.單擊“Create”按鈕,在打開(kāi)的對(duì)話框中輸入SphereMove來(lái)作為文件名,保存創(chuàng)建的動(dòng)畫片段。
Unity系統(tǒng)自動(dòng)添加物體上的Animator組件、AnimatorController狀態(tài)機(jī)、AnimationClip動(dòng)畫片段。
從右圖可以看到,Unity自動(dòng)創(chuàng)建了兩個(gè)文件,即SphereMove.anim和Sphere.controller,此外,它還為Sphere添加了一個(gè)Animator組件,其指向Sphere.controller控制器。1.
創(chuàng)建動(dòng)畫
以一個(gè)球體的運(yùn)動(dòng)為例,來(lái)講解動(dòng)畫的基本使用方法。
操作步驟如下:AnimationClip(動(dòng)畫片段)是Unity動(dòng)畫系統(tǒng)的基礎(chǔ),片段中包含對(duì)象隨時(shí)間變化的位置信息、旋轉(zhuǎn)信息或其他屬性的信息。每個(gè)片段可以被認(rèn)為是單一的線性記錄。Unity支持從外部資源包中導(dǎo)入動(dòng)畫,另外它提供了一個(gè)簡(jiǎn)易的內(nèi)置動(dòng)畫編輯器,可以從頭開(kāi)始創(chuàng)建動(dòng)畫片段。
SphereMove.anim就是AnimationClip。
3.雙擊“SphereMove”,即可打開(kāi)動(dòng)畫編輯器,如圖所示。
4.在動(dòng)畫編輯器中修改Sphere的屬性值,讓球向下移動(dòng)。
操作步驟如下。(1)單擊“AddProperty”按鈕,在下拉菜單中選擇“Transform”→“Position”,并單擊“+”按鈕。(2)單擊時(shí)間軸并選擇0:15,修改Sphere的位置,如圖所示。
Sphere物體在0:00時(shí)的Position.y為10,現(xiàn)將Position.y的值修改為0,同時(shí)系統(tǒng)自動(dòng)在0:15處插入一個(gè)關(guān)鍵幀。第1個(gè)關(guān)鍵幀的Position.y為10,第2個(gè)關(guān)鍵幀的Position.y為0,第3個(gè)關(guān)鍵幀的Position.y為10。
5.單擊動(dòng)畫編輯器上的“Play”按鈕,播放動(dòng)畫:小球在場(chǎng)景中上下來(lái)回跳動(dòng)。若要放慢小球的彈跳速度,可單擊時(shí)間軸右側(cè),將“SampleRate”設(shè)置成25。1.
創(chuàng)建動(dòng)畫
以一個(gè)球體的運(yùn)動(dòng)為例,來(lái)講解動(dòng)畫的基本使用方法。
操作步驟如下:6.創(chuàng)建小球放大、縮小的動(dòng)畫。(1)在Animation面板中,單擊“SphereMove”旁邊的下拉箭頭,選擇“CreateNewClip”新建AnimationClip,如圖所示,新建另一個(gè)動(dòng)畫片段,將其另存為SphereScale。(2)單擊“AddProperty”按鈕,在下拉菜單中選擇“Transform”→“Rotation”,并單擊“+”按鈕;
單擊時(shí)間軸并選擇0:30,將Scale中的Rotation.x、Rotation.y、Rotation.z值修改為2,將“SetSampleRate”設(shè)置成25。
(3)單擊動(dòng)畫編輯器上的“Play”按鈕,可以看到小球放大、縮小的動(dòng)畫效果。
2.
使用動(dòng)畫控制器在動(dòng)畫之間切換
動(dòng)畫控制器(AnimatorController)是Unity中一種單獨(dú)的配置文件,其擴(kuò)展名為“.controller”。
動(dòng)畫控制器包含以下幾種功能??梢詫?duì)多個(gè)動(dòng)畫進(jìn)行整合。使用狀態(tài)機(jī)可實(shí)現(xiàn)動(dòng)畫的播放和切換。可以實(shí)現(xiàn)動(dòng)畫融合和分層播放??梢酝ㄟ^(guò)腳本對(duì)動(dòng)畫播放進(jìn)行深度控制。
操作步驟如下:
1.
雙擊Assets文件夾中的Sphere.controller,打開(kāi)Animator面板,如圖所示;從圖中可以看到,狀態(tài)機(jī)中已有Entry、AnyState、Exit、SphereMove和SphereScale這5種狀態(tài)。其中有3種默認(rèn)狀態(tài):Entry、AnyState和Exit。這3種狀態(tài)是Unity自動(dòng)創(chuàng)建的,無(wú)法被刪除。
Entry:進(jìn)入當(dāng)前狀態(tài)機(jī)時(shí)的入口,與該狀態(tài)連接的狀態(tài)會(huì)成為進(jìn)入狀態(tài)機(jī)后的第一種狀態(tài)。
AnyState:任意的狀態(tài),其指向的狀態(tài)是在任意時(shí)刻都可以切換到的狀態(tài)。
Exit:退出當(dāng)前狀態(tài)機(jī)時(shí)的出口,如果有任意狀態(tài)指向該出口,表示可以從指定狀態(tài)退出當(dāng)前的狀態(tài)機(jī)。
SphereMove呈黃色狀態(tài),表示動(dòng)畫開(kāi)始后運(yùn)行的第一個(gè)狀態(tài)。
Entry和SphereMove狀態(tài)之間由帶箭頭的線段連接,表示這個(gè)狀態(tài)可以過(guò)渡到指向的狀態(tài)。
從一種狀態(tài)切換到另一種狀態(tài)的過(guò)程稱為轉(zhuǎn)換。2.
使用動(dòng)畫控制器在動(dòng)畫之間切換
操作步驟如下:
2.在SphereMove和SphereScale之間切換,創(chuàng)建狀態(tài)連接線;在“SphereMove”上單擊鼠標(biāo)右鍵,在彈出的快捷菜單中選擇“MakeTransition”,將箭頭指向“SphereScale”。
同樣的操作,創(chuàng)建“SphereScale”指向“SphereMove”的連接線。
運(yùn)行程序,就可以看到小球在移動(dòng)動(dòng)畫和縮放動(dòng)畫中切換。
3.單擊連接線,在Inspector面板中可以設(shè)定轉(zhuǎn)換條件,如圖所示。
勾選“HasExitTime”,則會(huì)實(shí)現(xiàn)兩個(gè)動(dòng)畫之間的自動(dòng)切換。
2.
使用動(dòng)畫控制器在動(dòng)畫之間切換
操作步驟如下:4.Conditions中添加轉(zhuǎn)換條件。單擊Animator中的Parameters,中可添加4種類型的參數(shù):Float(小數(shù))、Int(整數(shù))、Bool(布爾)和Trigger(觸發(fā)器)。轉(zhuǎn)換條件設(shè)置如圖所示,在“Parameters”中增加兩個(gè)參數(shù),即Move和Scale。Move類型是Int,初始值為0;Scale類型是Bool,初始值為false。
“SphereScale”→“SphereMove”連接線增加條件是Move等于1;
“SphereMove”→“SphereScale”連接線增加條件是Scale等于true。
5.運(yùn)行游戲手動(dòng)修改“Parameters”中Move和Scale的值,可恢復(fù)兩種動(dòng)畫之間的自動(dòng)轉(zhuǎn)換。3.用腳本控制動(dòng)畫切換在腳本中控制條件變量Move和Scale的值,可達(dá)到控制動(dòng)畫切換的目的。操作步驟如下:1.新建腳本文件
Project面板中,選擇“Assets”→“Scripts”文件夾,單擊鼠標(biāo)右鍵,選擇“Create”→“C#Script”,新建腳本文件AnimaContrl.cs,將其拖曳到Sphere游戲?qū)ο笊稀?.用腳本實(shí)現(xiàn)修改動(dòng)畫的條件變量打開(kāi)AnimaContrl.cs腳本,添加動(dòng)畫組件屬性。3.運(yùn)行游戲按下Space鍵即可實(shí)現(xiàn)兩種動(dòng)畫之間的切換。.謝謝觀看
廣東輕工職業(yè)技術(shù)學(xué)院
數(shù)字媒體技術(shù)專業(yè).Unity3D引擎
.3.4操作實(shí)例:RollaBall游戲項(xiàng)目
.目錄.6.顯示記分板
.2.
小球動(dòng)起來(lái)
.3.
攝像機(jī)跟隨小球移動(dòng)
.4.
會(huì)旋轉(zhuǎn)的方塊
.5.小球拾取方塊
.1
.
搭建游戲場(chǎng)景
.7.
顯示游戲勝利文本
.8.發(fā)布游戲
1.
搭建游戲場(chǎng)景
搭建小球運(yùn)動(dòng)的基本環(huán)境:小球、小球滾動(dòng)的平臺(tái)和4面墻圍起來(lái)的墻面。
操作步驟如下:
1.創(chuàng)建一個(gè)新的項(xiàng)目RollaBall單擊菜單“File”→“NewProject”,輸入項(xiàng)目名稱RollaBall,設(shè)置項(xiàng)目存放路徑。
2.創(chuàng)建游戲場(chǎng)景在Project面板的Assets文件夾中單擊鼠標(biāo)右鍵,在彈出的快捷菜單中選擇“Create”→“Folder”,創(chuàng)建一個(gè)Scenes文件
夾來(lái)管理項(xiàng)目中游戲的場(chǎng)景文件;單擊菜單“File”→“SaveScene”來(lái)保存當(dāng)前游戲場(chǎng)景文件,將場(chǎng)景文件保存在Scenes文件
夾中,取名為MiniGame。
3.設(shè)置燈光單擊菜單“Window”→“Rendering”→“LightingSettings”,打開(kāi)Lighting設(shè)置對(duì)話框,勾選“Autogenerate”復(fù)選框。
4.添加游戲?qū)ο蟆∏驖L動(dòng)的平臺(tái)
Hierarchy面板中單擊鼠標(biāo)右鍵,在彈出的快捷菜單中選擇“3DObject”→“Plane”,將其名字修改為Ground;點(diǎn)
擊Inspector面板中Transform旁邊的按鈕,將Transform組件的屬性重置(Reset)。
重置后,游戲?qū)ο蠓胖迷趫?chǎng)景的(0,0,0)坐標(biāo)處,此坐標(biāo)是世界坐標(biāo)系的原點(diǎn)。調(diào)整Ground對(duì)象的大小,將Transform組件中的Scale屬性的X值設(shè)置為2、Z值設(shè)置為2。
Project面板中,創(chuàng)建一個(gè)Materials文件夾來(lái)管理項(xiàng)目中的材質(zhì)球;在Materials文件夾中單擊鼠標(biāo)右鍵,選
擇“Create”→“Material”,創(chuàng)建一個(gè)新的材質(zhì)球,將其改名為Background,將材質(zhì)球設(shè)置成深藍(lán)色。拖曳Background材質(zhì)球到Scene面板的Ground對(duì)象上,將游戲平臺(tái)設(shè)置成深藍(lán)色。1.
搭建游戲場(chǎng)景
搭建小球運(yùn)動(dòng)的基本環(huán)境:小球、小球滾動(dòng)的平臺(tái)和4面墻圍起來(lái)的墻面。
操作步驟如下:
5.添加游戲主角——小球
Hierarchy面板中單擊鼠標(biāo)右鍵,在彈出的快捷菜單中選擇“3DObject”→“Sphere”,將其名字修改為Player;
將Inspector面板中Transform組件的屬性重置;
使小球沿Y軸方向向上移動(dòng)0.5個(gè)單位,使其位于Ground平臺(tái)之上。。
6.改變方向光的角度調(diào)整燈光的照射角度:在Hierarchy面板中選中“DirectionalLight”,將對(duì)應(yīng)Inspector面板中Transform組件的Rotation的Y值改成60。
7.添加四周的墻面
創(chuàng)建一個(gè)空物體Walls作為父對(duì)象,用于存放游戲場(chǎng)景中的4面墻;將Walls對(duì)應(yīng)Inspector面板中Transform組件的屬性重置,回到坐標(biāo)原點(diǎn)。創(chuàng)建一個(gè)Cube游戲?qū)ο?,重命名為Wall1,將其拖曳到Walls中作為其子對(duì)象,調(diào)整Wall1的大小,使其與游戲平臺(tái)Ground的寬度一樣;將Wall1移動(dòng)至平臺(tái)的邊緣。使用同樣的方法可創(chuàng)建余下的3面墻。2.
小球動(dòng)起來(lái)
小球在游戲平臺(tái)中滾動(dòng),能撞擊墻面但不會(huì)飛出去。
通過(guò)給小球添加剛體組件、腳本來(lái)控制小球的移動(dòng)。
操作步驟如下:
1.給小球添加剛體組件
Inspector面板中單擊“AddComponent”按鈕,選擇“Physics”→“Rigidbody”。
2.給小球添加腳本創(chuàng)建一個(gè)新的腳本,將其重命名為PlayerController;雙擊PlayerController腳本打開(kāi)腳本編輯器。此腳本要實(shí)現(xiàn)的功能是獲取鍵盤上的方向鍵的信息,給小球添加作用力,控制小球在游戲平臺(tái)中滾動(dòng)。
完整的PlayerController.cs腳本如圖所示。將PlayerController.cs拖曳到游戲?qū)ο驪layer中,在Inspector面板的PlayerController腳本組件中的“Speed”文本框中輸入小球運(yùn)動(dòng)的速度值為200。單擊“運(yùn)行”按鈕,按下鍵盤上的方向鍵,可控制小球在游戲平臺(tái)中滾動(dòng)。
3.
攝像機(jī)跟隨小球移動(dòng)
操作思路是攝像機(jī)的位置跟隨小球的位置變化,而攝像機(jī)的角度不發(fā)生改變。
首先用變量記錄下攝像機(jī)與小球之間的位置偏移量,游戲運(yùn)行過(guò)程中小球與攝像機(jī)之間始終保持相同的偏移量。
通過(guò)腳本實(shí)現(xiàn)攝像機(jī)跟隨小球移動(dòng),操作步驟如下:
1.調(diào)整攝像機(jī)的角度設(shè)置MainCamera的Transform組件中Position屬性,即X值為0、Y值為8、Z值為-12;
設(shè)置Rotation屬性,即X值為45、Y值為0、Z值為0。
2.給攝像機(jī)添加腳本新建腳本CameraController.cs。腳本中首先定義一個(gè)公共的GameObject變量,用來(lái)“告訴”游戲,攝像機(jī)將跟隨哪個(gè)游戲?qū)ο笠苿?dòng)。
定義一個(gè)Vector3類型的變量offset,存放攝像機(jī)與游戲?qū)ο蟮钠屏?。完整的攝像機(jī)跟隨腳本如圖所示。將CameraController.cs拖曳到游戲?qū)ο驧ainCamera上,將Player游戲?qū)ο笸弦返健癙layer”中,CameraController腳本組件如圖所示。運(yùn)行游戲,可以看到攝像機(jī)跟隨著小球移動(dòng),游戲視角也隨之改變。4.
會(huì)旋轉(zhuǎn)的方塊
為了給游戲增加一些趣味性,可讓方塊在原地自動(dòng)旋轉(zhuǎn)。
操作步驟如下:
1.創(chuàng)建一個(gè)方塊新建一個(gè)Cube,命名為PickUp,并單擊其Transform組件的“Reset”重置到原點(diǎn);
PickUp與Player重疊,為了更好地處理PickUp方塊,可將Player暫時(shí)隱藏、不在場(chǎng)景中顯示。
選中Player游戲?qū)ο?,在Inspector面板中取消勾選其名稱前的復(fù)選框,則可在場(chǎng)景中禁用Player游戲?qū)ο?。調(diào)整PickUp游戲?qū)ο蟮腡ransform組件屬性值:Position的Y值設(shè)為1,Rotation的X、Y、Z值都設(shè)為45。
2.添加腳本,讓方塊自動(dòng)旋轉(zhuǎn)新建腳本Rotator.cs,使用transform.Rotate()函數(shù)讓方塊按照固定的角度旋轉(zhuǎn)。在腳本的Update()函數(shù)中添加以下代碼:
將腳本Rotator.cs拖曳到PickUp游戲?qū)ο笾?,單擊“運(yùn)行”按鈕就可以讓方塊自動(dòng)旋轉(zhuǎn)。
3.將PickUp游戲?qū)ο笾谱鞒深A(yù)設(shè)體將Hierarchy面板中的PickUp游戲?qū)ο笾苯油弦返絇refabs文件夾中,生成PickUp.prefab預(yù)設(shè)體。
4.
會(huì)旋轉(zhuǎn)的方塊
為了給游戲增加一些趣味性,可讓方塊在原地自動(dòng)旋轉(zhuǎn)。
操作步驟如下:
4.在游戲場(chǎng)景中添加10個(gè)方塊創(chuàng)建一個(gè)空物體作為父對(duì)象,重命名為PickUps,用于存放游戲場(chǎng)景中的10個(gè)方塊。;將Prefabs文件夾中的PickUp.prefab預(yù)設(shè)體拖曳到Hierarchy面板中的PickUps空物體下,生成一個(gè)新的小方塊。。使用快捷鍵Ctrl+D復(fù)制此方塊,可生成其他9個(gè)方塊;調(diào)整10個(gè)方塊位置。
5.改變方塊的顏色:將方塊顏色設(shè)置成黃色創(chuàng)建一個(gè)新的材質(zhì)球,將其重命名為PickUp;選中PickUp,將PickUp材質(zhì)球設(shè)置成黃色。拖曳PickUp材質(zhì)球到Scene面板的一個(gè)方塊對(duì)象中,此方塊對(duì)象的顏色變成黃色;在此方塊的Inspector面板中單擊“ApplyAll”按鈕,更改PickUp對(duì)象的預(yù)設(shè)體屬性,將顏色更改應(yīng)用到PickUp預(yù)設(shè)體上,這樣所有方塊的顏色均會(huì)修改成黃色。
效果圖如圖所示。5.
小球拾取方塊
小球接觸到方塊時(shí),能夠拾取這些方塊。
要實(shí)現(xiàn)這樣的效果需要檢測(cè)小球Player游戲?qū)ο笈c可拾取的方塊PickUp對(duì)象之間的碰撞,碰撞能觸發(fā)某種操作,如被碰撞的PickUp對(duì)象消失。
操作步驟如下:
1.給10個(gè)方塊添加標(biāo)簽選中PickUp.prefab預(yù)設(shè)體,在對(duì)應(yīng)的Inspector面板中單擊“OpenPrefab”按鈕,對(duì)預(yù)設(shè)體進(jìn)行編輯。如圖所示,在“Tag”下拉列表中選擇“AddTag”,添加一個(gè)新的標(biāo)簽PickUp;將PickUp.prefab的“Tag”設(shè)置成“PickUp”。
2.將10個(gè)方塊設(shè)為觸發(fā)器選中PickUp.prefab預(yù)設(shè)體,在對(duì)應(yīng)的Inspector面板中的BoxCollider組件中勾選“IsTrigger”復(fù)選框,將會(huì)旋轉(zhuǎn)的方塊設(shè)置成觸發(fā)器。
5.
小球拾取方塊
小球接觸到方塊時(shí),能夠拾取這些方塊。
要實(shí)現(xiàn)這樣的效果需要檢測(cè)小球Player游戲?qū)ο笈c可拾取的方塊PickUp對(duì)象之間的碰撞,碰撞能觸發(fā)某種操作,如被碰撞的PickUp對(duì)象消失。
操作步驟如下:
3.將小球重新顯示在場(chǎng)景中選中Player游戲?qū)ο?,在Inspector面板中勾選其名稱前的復(fù)選框,則可在場(chǎng)景中顯示Player游戲?qū)ο蟆?/p>
4.修改小球的PlayerController.cs腳本在PlayerController.cs中添加OnTriggerEnter()函數(shù),當(dāng)小球觸碰方塊時(shí),可將方塊對(duì)象禁用,使其不顯示在場(chǎng)景中。完整的PlayerController.cs腳本如圖3-78所示。5.運(yùn)行單擊“運(yùn)行”按鈕,按下鍵盤上的方向鍵,控制小球拾取旋轉(zhuǎn)方塊。6.
顯示記分板
在場(chǎng)景中增加一個(gè)記分板,記錄玩家拾取方塊的分?jǐn)?shù)。。場(chǎng)景中添加一個(gè)UI元素Text,用來(lái)顯示玩家的分?jǐn)?shù)。同時(shí),在腳本PlayerController.cs中需要用一個(gè)變量來(lái)記錄玩家的分?jǐn)?shù),并需將變量的值傳到Text對(duì)象中。
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026屆廣渠門中學(xué)高三化學(xué)第一學(xué)期期末教學(xué)質(zhì)量檢測(cè)模擬試題含解析
- 山東省齊魯名校2026屆高一化學(xué)第一學(xué)期期中質(zhì)量跟蹤監(jiān)視試題含解析
- 益氣健脾中藥對(duì)腸道菌群的調(diào)控機(jī)制
- 創(chuàng)意職業(yè)探索者:副業(yè)潮流面試題目與求職策略深度解析
- 細(xì)胞的衰老和死亡
- 銷售內(nèi)勤數(shù)據(jù)匯報(bào)
- 貪吃蛇游戲講解
- 現(xiàn)在完成時(shí)的講解
- 2026屆山東省費(fèi)縣化學(xué)高一第一學(xué)期期末學(xué)業(yè)質(zhì)量監(jiān)測(cè)模擬試題含解析
- 習(xí)慣的養(yǎng)成匯報(bào)
- 醫(yī)院綜合門診部綜合管理體系建設(shè)
- 2025年中醫(yī)師承出師考試題庫(kù)
- 2025年宜昌市猇亭區(qū)招聘化工園區(qū)專職工作人員(6人)筆試備考試題及答案詳解(奪冠)
- uom無(wú)人機(jī)考試題庫(kù)及答案2025
- 預(yù)防接種基礎(chǔ)知識(shí)課件
- 護(hù)欄生產(chǎn)及安裝方案(3篇)
- 污水廠培訓(xùn)課件
- 科協(xié)單位涉密管理制度
- 體育教師專業(yè)考試試題及答案
- 陜西省專業(yè)技術(shù)人員繼續(xù)教育2025公需課《黨的二十屆三中全會(huì)精神解讀與高質(zhì)量發(fā)展》20學(xué)時(shí)題庫(kù)及答案
- 教練技術(shù)探索課程一階段導(dǎo)師講義
評(píng)論
0/150
提交評(píng)論