999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

Unity3D引擎實(shí)現(xiàn)游戲人物的基本操控

2016-12-12 10:21:42邱竟峰王洪源陳慕羿
關(guān)鍵詞:動(dòng)畫設(shè)置游戲

邱竟峰 王洪源 陳慕羿

(沈陽(yáng)理工大學(xué) 信息科學(xué)與工程學(xué)院,遼寧 沈陽(yáng) 110159)

Unity3D引擎實(shí)現(xiàn)游戲人物的基本操控

邱竟峰 王洪源 陳慕羿

(沈陽(yáng)理工大學(xué) 信息科學(xué)與工程學(xué)院,遼寧 沈陽(yáng) 110159)

Unity3D作為一款更加專注作品的快速實(shí)現(xiàn)和平臺(tái)推廣以及3D渲染效果的游戲開發(fā)引擎,跟隨移動(dòng)平臺(tái)和Web平臺(tái)的迅速發(fā)展,搶占了大量市場(chǎng)份額。Unity3D不止限于單機(jī)平臺(tái),還可以借助Photon等游戲引擎,實(shí)現(xiàn)Unity3D單機(jī)游戲的網(wǎng)絡(luò)化。本文所涉及的內(nèi)容,就是使用Unity3D實(shí)現(xiàn)游戲中人物基本行為的控制。碰撞體 (Collider) 與剛體 (Rigidbody) 結(jié)合使用可以實(shí)現(xiàn) Unity 中的物理特性。剛體 (Rigidbody) 使對(duì)象可以受物理控制,而碰撞體(Collider) 使對(duì)象可以相互碰撞。Animator可以將編輯動(dòng)畫的控制,管理不同動(dòng)畫之間的關(guān)聯(lián)。

Unity3D;游戲人物控制;人物攻擊

1.人物移動(dòng)的實(shí)現(xiàn)

我們將事先準(zhǔn)備好的游戲人物模型拖拽到Project的Assets文件夾下,然后將人物的靜止?fàn)顟B(tài)模型拖入場(chǎng)景中。

然后在人物腳下Create Cube作為地面,取消Mesh Renderer選項(xiàng),并給人物加上Rigidbody(注意Constrains中的Rotation選項(xiàng),這會(huì)使物體碰撞后產(chǎn)生自由旋轉(zhuǎn))以及Capsule Collider。以實(shí)現(xiàn)人物的正常移動(dòng),調(diào)節(jié)膠囊碰撞器參數(shù),使其包裹人物。

下面,我們使用編輯腳本實(shí)現(xiàn)人物的移動(dòng)的控制。

在腳本中,使用float H=Input. GetAxis(“Horizontal”),實(shí)行對(duì)人物水平方向移動(dòng)的監(jiān)聽,當(dāng)在鍵盤上按下A或者D鍵時(shí),會(huì)返回正或者負(fù)數(shù)值,以此值判斷人物的左右的移動(dòng)方向。 float V=Input.GetAxis(“Vertical”)與前者類似,不過是通過W和S鍵判斷人物的前后移動(dòng)。我們將它們放在update函式中,這樣系統(tǒng)每針都會(huì)不停的監(jiān)聽人物的移動(dòng)變化。我們使用if (Mathf.Abs(H) > 0.01f || Mathf.Abs(V)> 0.01f)來(lái)判斷人物是否移動(dòng),如果移動(dòng),賦予人物速度,控制人物面向方向,GetComponent<Rigidbody>(). velocity = new Vector3(velocity * h, this. GetComponent<Rigidbody>().velocity.y,velocity* v),此處,我們利用之前為人物添加的剛體組件,實(shí)現(xiàn)人物的速度控制,因?yàn)槿宋锸窃谒椒较蛞苿?dòng),所以使用this.GetComponent<Rigidbody>(). velocity.y,作為Y軸速度,也就是Y軸速度不變。使用transform.LookAt(new Vector3(h,0,v) + transform.position)實(shí)現(xiàn)人物面向方向的改變。接下來(lái),我們?cè)贏ssets下Create一個(gè)Animator Controller,并把它添加到人物的Animator中,作為人物播放的動(dòng)畫控制器。

在Window中打開Animator,將導(dǎo)入的人物站立和移動(dòng)的動(dòng)畫拖拽到里面,使用bool值控制兩者的轉(zhuǎn)換,實(shí)現(xiàn)站立(Take0010)向跑步動(dòng)畫(Take001)的轉(zhuǎn)換時(shí),我們將bool設(shè)置為true,當(dāng)由跑步轉(zhuǎn)換為站立時(shí),設(shè)置為false。我們將anim.SetBool(“Move”, true)放在前面提到的判斷語(yǔ)句后(這里,anim是Animator對(duì)象)就是當(dāng)鍵盤控制人物移動(dòng)時(shí),將人物狀態(tài)有站立設(shè)置為奔跑。當(dāng)人物靜止時(shí),我們要實(shí)現(xiàn)人物的速度歸零,并由奔跑轉(zhuǎn)為靜止?fàn)顟B(tài)。因此,在if后面添加else語(yǔ)句,并添加GetComponent<Rigidbody>(). velocity = new Vector3(0, this.Get Component<Rigidbody>(), 0) 與anim. SetBool(“Move”, false)前者實(shí)現(xiàn)速度歸零后者設(shè)置人物狀態(tài)為站立。如圖1所示。

接著,我們調(diào)整攝像機(jī)位置,使攝像機(jī)跟隨人物移動(dòng)。選擇合適視角,選中Main Camera,選擇Game Object下的 Align With View,使攝像機(jī)與當(dāng)前視野保持一致。然后將人物的Tag設(shè)置為Player并為攝像機(jī)添加控制腳本,使用 Game Object. Find Game Object With Tag(“Player”)找到跟隨的人物,用transform.position設(shè)置攝像機(jī)的跟隨位置。

2.下面介紹人物攻擊動(dòng)畫的實(shí)現(xiàn)

因?yàn)橐恍┕魟?dòng)畫是有一連串的攻擊實(shí)現(xiàn)的,所以這里我們先實(shí)現(xiàn)攻擊

添加完成后會(huì)在原動(dòng)畫后面出現(xiàn)拆分后的動(dòng)畫。

完成拆分后,選擇Animator ,添加新Layer,覆蓋之前實(shí)現(xiàn)人物站立、跑動(dòng)的Layer,并添加一個(gè)Empty State(處于EmtyState時(shí),之前設(shè)定的人物站立于跑動(dòng)的效果就會(huì)起作用),然后將拆分的兩個(gè)動(dòng)畫拖入到Animator中,使用Trigger作為3個(gè)狀態(tài)之間的轉(zhuǎn)換方式。這里沒有使用之前的Bool是因?yàn)椋坏┦褂肂ool值作為轉(zhuǎn)換條件,當(dāng)觸發(fā)第一次攻擊時(shí),Boll設(shè)置為True,那么第二個(gè)攻擊效果就會(huì)自動(dòng)出現(xiàn),失去了拆分的意義。由攻擊效果轉(zhuǎn)換為Empty時(shí),不需要額外設(shè)置,當(dāng)攻擊結(jié)束時(shí)會(huì)自動(dòng)轉(zhuǎn)換為Empty。如圖3所示。動(dòng)畫的拆分。首先選中攻擊模型,右側(cè)Inspector中點(diǎn)擊Edit。這里我們使用的攻擊效果由兩個(gè)攻擊動(dòng)作完成,所以我們將動(dòng)畫拆成兩部分,點(diǎn)擊加號(hào)根據(jù)第一個(gè)動(dòng)畫完成的時(shí)間,在Start和End位置添加參數(shù),動(dòng)畫確定后,點(diǎn)擊Apply。如圖2所示。

這里還有一點(diǎn)要注意,在設(shè)置動(dòng)作之間的轉(zhuǎn)換時(shí)間的時(shí)候要注意選擇合適的時(shí)間間隔,使當(dāng)連續(xù)觸發(fā)時(shí),能夠?qū)崿F(xiàn)連擊的效果。我們還是用腳本控制人物的攻擊。在新的腳本中,首先在start()中調(diào)用this. Get Component<Animator>()獲得加在人物身上的Animator。然后,這里我們添加簡(jiǎn)單的條件判斷,實(shí)現(xiàn)動(dòng)作的觸發(fā)。在update中添加if (Input. GetKey(“space”)),這樣,每幀都會(huì)進(jìn)行按鍵檢測(cè)。如果檢測(cè)到按下按鍵,則調(diào)用之前在Animator中設(shè)置的SetTrigger(“Attack”)方法,這里Attack就是之前設(shè)置的Trriger參數(shù)的名字。

同時(shí)我們也可以為攻擊添加聲音效果,可以選擇直接把聲音添加在特效上,選中特效,點(diǎn)擊Add Component,選擇Audio Source,將想要加入的音效拖入到Audio Clip中。

我們也可以在腳本中添加音效,首先,Creat Empty,再為它添加Audio Source,新建音效控制腳本,在腳本中獲得Audio Source對(duì)象,然后調(diào)用Audio Source. Play One Shot(Sound Name)即可。這里我們可以把控制腳本設(shè)計(jì)成單例模式,本例中,聲音控制腳本命名為sManager,首先定義sManager對(duì)象instance,然后在Awake()中為其賦值:instance=this。這樣做的好處是使得instance成為sManager在系統(tǒng)中的唯一實(shí)例,節(jié)省了時(shí)間和資源。

[1]王洪源,等. Unity3D人工智能編程精粹[M].北京:清華大學(xué)出版社,2014.

[2]金璽曾. Unity3D手機(jī)游戲開發(fā)[M].北京:清華大學(xué)出版社,2013.

TP311

A

猜你喜歡
動(dòng)畫設(shè)置游戲
中隊(duì)崗位該如何設(shè)置
做個(gè)動(dòng)畫給你看
動(dòng)畫發(fā)展史
我的動(dòng)畫夢(mèng)
文苑(2019年22期)2019-12-07 05:28:56
數(shù)獨(dú)游戲
瘋狂的游戲
飛碟探索(2016年11期)2016-11-14 19:34:47
爆笑游戲
我是動(dòng)畫迷
本刊欄目設(shè)置說(shuō)明
中俄臨床醫(yī)學(xué)專業(yè)課程設(shè)置的比較與思考
主站蜘蛛池模板: 国产综合无码一区二区色蜜蜜| 日韩中文欧美| 乱色熟女综合一区二区| 婷婷色婷婷| 中文字幕日韩丝袜一区| 女同久久精品国产99国| 久久夜色精品国产嚕嚕亚洲av| 色网站在线免费观看| 狠狠色香婷婷久久亚洲精品| 成人午夜精品一级毛片| 国产一区二区人大臿蕉香蕉| 亚洲成人免费看| 国产精品99一区不卡| 国产精品成人免费视频99| 91人妻日韩人妻无码专区精品| 丝袜久久剧情精品国产| 怡春院欧美一区二区三区免费| 精品第一国产综合精品Aⅴ| 亚洲成a人片77777在线播放| 亚洲精品无码日韩国产不卡| 日本www在线视频| 国产麻豆另类AV| 欧美爱爱网| 精品欧美日韩国产日漫一区不卡| 久视频免费精品6| 欧美精品aⅴ在线视频| 欧美不卡视频在线| 福利在线免费视频| 成人午夜福利视频| 亚洲午夜综合网| 国产高清在线丝袜精品一区| 欧美亚洲第一页| 国产激爽大片高清在线观看| 中国成人在线视频| a欧美在线| 99视频在线免费看| 亚洲大学生视频在线播放| 亚洲精品少妇熟女| 国产91视频观看| 色婷婷电影网| 日韩中文欧美| 在线无码av一区二区三区| 国产一级二级在线观看| 青青操国产视频| 国产一线在线| 国产精品爆乳99久久| 亚洲品质国产精品无码| 中文字幕无线码一区| 青青青视频91在线 | 国产成人福利在线| 亚洲二区视频| 免费观看精品视频999| 激情综合激情| 亚洲一级无毛片无码在线免费视频| 六月婷婷精品视频在线观看| 亚洲乱码在线播放| 免费无码AV片在线观看中文| 四虎影视8848永久精品| 亚洲欧洲AV一区二区三区| 色婷婷国产精品视频| 国产视频资源在线观看| 啪啪免费视频一区二区| 日本人妻丰满熟妇区| 欧洲亚洲欧美国产日本高清| 在线不卡免费视频| 欧美中文字幕无线码视频| 精品一區二區久久久久久久網站| 成人国产三级在线播放| 国产精品香蕉在线| 亚洲综合激情另类专区| 成人字幕网视频在线观看| 免费在线成人网| 真人免费一级毛片一区二区| 中文字幕无码av专区久久 | 欧美一级黄色影院| 国产精品9| 六月婷婷激情综合| 国产日韩欧美精品区性色| 亚洲另类第一页| 国产在线专区| 国产性生交xxxxx免费| 日韩在线成年视频人网站观看|