亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于Unity 3D的道具系統(tǒng)研究與開發(fā)

        2014-08-22 09:13:02于瀟翔彭月橙黃心淵
        關鍵詞:游戲

        于瀟翔, 彭月橙, 黃心淵

        1.北京林業(yè)大學 信息學院,北京 100083; 2.北京林業(yè)大學 藝術設計學院,北京 100083;3.中國傳媒大學 動畫與數(shù)字藝術學院,北京 100024)

        道具系統(tǒng)是游戲開發(fā)和數(shù)字化應用的重要環(huán)節(jié),其設計與運算雖因人而異,卻有規(guī)律可循,然而鮮有研究資料對其進行整理與分析。本文以實際開發(fā)經(jīng)驗為基礎,以Unity 3D為平臺,對道具系統(tǒng)的設計與實現(xiàn)進行理論研究與實踐驗證。

        Unity 3D是由丹麥Unity Technologies公司開發(fā)的一款專業(yè)游戲引擎,具有高度優(yōu)化的圖形渲染管道和內(nèi)建的NVIDIA PhysX物理引擎,能較真實地模擬三維空間下物體的運動和碰撞,并通過GUI、粒子系統(tǒng)、聲效等輔助手段給用戶以反饋[1-4],為游戲道具系統(tǒng)的設計與開發(fā)提供更多思路。相較Unreal、CryEngine、Virtools等引擎,其易用、多腳本、跨平臺等特性[2]也為道具構架DIY創(chuàng)造了更多可能。

        本研究源于教育部人文社科振興專項計劃項目“新媒體技術在非物質文化遺產(chǎn)保護中的應用研究”,項目以“竹”為線索,將傣族的文化與藝術通過新媒體的形式進行呈現(xiàn)。其中,游戲“傣寨接寶”的交互設計基于Unity 3D平臺進行開發(fā),并實現(xiàn)了Android平臺的移植操作,通過手機重力感應控制角色接收正向道具并規(guī)避負向道具。本文主要從道具系統(tǒng)的理論設計角度,對項目操作過程中的實踐經(jīng)驗進行總結和分析。由于篇幅限制,實踐中其余部分如場景、角色、GUI、粒子系統(tǒng)、聲音等開發(fā)環(huán)節(jié)未在此展開討論。

        1 系統(tǒng)設計與實現(xiàn)

        1.1 道具屬性

        道具的屬性在數(shù)量、速度、出現(xiàn)率、作用效果等方面存在差異,以此決定其對角色和場景的影響力及影響范圍。道具屬性的多樣性和隨機性越高,游戲的博弈價值就越大,平衡性[5]也越好。道具的數(shù)據(jù)設計需考慮娛樂主題、游戲性質[6]、受眾群體[6]、操作平臺等多種因素。實踐中,共設定5組20種道具,分別對分數(shù)(S)、生命值(HP)、場景復雜度等方面產(chǎn)生單一或綜合效應。其中,前3組(1~6,7~9,10~12)為正向道具(PP),第4組(13~18)為負向道具(NP),第5組(19~20)為隨機道具(RP)(圖1)。

        表1為部分道具編輯器[5],包含道具的ID、名稱、效果和原始數(shù)據(jù)等,而實際運行中的數(shù)據(jù)=原始數(shù)據(jù)×隨機值,因此道具的最終行為會在原始數(shù)據(jù)的基礎上產(chǎn)生小范圍波動,但總體期望仍呈現(xiàn)原有趨勢。在處理涉及幾率的數(shù)據(jù)時,盡量使其成對并呈互補關系,如0.8/0.2或0.6/0.4,利于后期程序的簡化。

        圖1 道具種類(左)、正向道具影響范圍(中)、負向道具影響范圍(右)Fig.1 Prop category, the effective ranges of positive props, the effective ranges of negative props

        游戲進程直接影響隨機值的范圍,實踐中采用百分遞進制,即分數(shù)每增加100,隨機值范圍變動一次;當分數(shù)>1 000后,隨機值保持在第10等級。隨機值變動對道具的影響主要體現(xiàn)在速度的遞增以及正負向道具數(shù)量的此消彼長,使游戲難度有數(shù)值上的量化。隨機值變化應在總體趨勢上保持穩(wěn)定,但偶爾反彈可打亂節(jié)奏,如隨機道具的出現(xiàn)率在特定分數(shù)段下的驟增(400~600)。圖2為游戲進程與隨機值的關系,為簡化圖表,圖中的隨機值均為隨機范圍的最高值,即0.8代表0~0.8之間的所有浮點數(shù)。

        1.2 道具生成

        道具是在一定范圍內(nèi)基于一定規(guī)律生成并運動的,因此,需要相對固定的生成點(起始點)限制道具的出現(xiàn)位置;同時,道具需在游戲運行后實時生成,且在不同階段的生成會呈現(xiàn)差異(圖2),而其中道具總量的控制和道具的生成選擇均由生成點進行調(diào)整。在Unity 3D中,道具可通過Instantiate()函數(shù)繼承空間原有組件的三維坐標,因此需在場景中創(chuàng)建一些空組件并將生成腳本(Instantiate Props. js)賦給它們。

        表1 道具固有屬性Table 1 Original data of props

        圖2 游戲進程與隨機值Fig.2 Game process and random values

        實踐中共設20個生成點,8個在頂端(1~8),另外12個平均分布于兩側(左9~14,右15~20,y0.5和<0.5的點數(shù)相等,而0.5較少,即活躍點、中間點、不活躍點的比重應控制為2∶1∶2,在設計上需使數(shù)據(jù)成對并呈現(xiàn)互補關系,在分布上需注意疏密與非對稱。圖3為生成點信息,生成率均為隨機范圍的最高值。

        圖3 生成點信息Fig.3 Generation points

        道具生成基于循環(huán)算法,Unity 3D的Update()函數(shù)每幀運行一次,可實現(xiàn)道具的實時生成與更新[1,2]。同時,每種道具的生成盡管隨機卻需符合一定條件(原始數(shù)據(jù)、游戲進程等),因此通過條件語句和函數(shù)返回值控制各個道具的出現(xiàn)情況(圖4)。

        另外,對于生成的道具,若全部克隆會占用大量系統(tǒng)資源,而Unity 3D提供的預制件(Prefab)類型,在批量復制時數(shù)據(jù)只被調(diào)用一次[1],類似Adobe Flash里的元件,能很大程度減少存儲空間,加快運行速度。

        1.3 道具運動規(guī)律

        相對于GUI繪制的物體運動,創(chuàng)建3D場景能夠帶來更大的可操作性。因此在實踐中,攝影機視角固定且垂直于x-y平面,道具在z方向的無位移,保證其在二維坐標系中運動。將攝像機垂直于背景并設為orthographic,鎖定角色和道具的運動平面,即可模擬所需的2D效果(圖5)。

        道具運動通常分為4類:自由落體、斜拋、平拋和反彈。實踐中,從頂部生成的道具做自由落體運動,從側面生成點被投擲出的道具有隨機方向的動量,因此做斜拋運動;同時,所有道具均會受到水平方向隨機風力的作用產(chǎn)生平拋或類平拋運動,而當?shù)谰吲c側面產(chǎn)生碰撞后造成反彈(圖6)。

        實踐中,需要為道具添加剛體組件,使其在物理引擎的作用下模擬運動,通過AddForce()和AddTorque()分別添加拋力與轉動力[7],即可使剛體得到符合現(xiàn)實的運動。圖6為實踐中道具的運動規(guī)律,側面生成點將道具以隨機力擲出。軌跡1所示為向上斜拋,道具到達A點(最高點)時,初速度v的垂直分量v1為0,道具從A點開始做平拋運動。若s1距離足夠,道具將落至地面;若v過大或受水平風力干擾而使道具在未落地前與側面(B點)產(chǎn)生碰撞,道具反彈并以v′做反向斜拋運動。在給定的初始動量下,拋射角為45°時,拋射距離可達最遠[8],因此極有可能與側面碰撞產(chǎn)生反彈。軌跡2所示為向下斜拋,由于mg+v1通常大于v2且垂直距離相較軌跡1更短,因此雖有一定偏轉,道具總體仍沿初始動量方向直線運動。軌跡3所示為大角度(>70°)向上斜拋,若初始動量較大,則道具極可能與頂部產(chǎn)生碰撞。由于碰撞速度的方向和大小均隨機,為簡化計算并避免頂部生成點受到干擾,反彈后道具的碰撞速度歸零,做自由落體運動。道具的其余運動形式亦可參照此圖。頂部生成的道具只受mg作用,做自由落體運動。若下落期間受到水平風力干擾,則被賦予水平隨機初速度(如v2)后做平拋運動,類似圖中A點之后的軌跡。

        圖4 道具生成流程Fig.4 Generation flow of props

        圖7 自轉機制Fig.7 Self-rotation mechanism

        圖5 平面化場景Fig.5 Turn the scene into 2 dimensions

        圖6 道具運動規(guī)律Fig.6 Prop motions

        Unity 3D的物理引擎[1-4]可模擬較真實的下落狀態(tài),根據(jù)道具的不同質量產(chǎn)生不同的下落速度。此外,可通過調(diào)整gravity的數(shù)值控制整體速度[2],從而實現(xiàn)道具加速、減速以及暫停下落,思路如下。

        if(Damage.picked){//判斷是否拾取

        gravity = 0;}//下落速度歸零

        else{

        this.transform.position=newVector3(this.transform.position.x, this.transform.position.y-(gravity*Time.deltaTime), this.transform.position.z); //實時更新物體坐標

        if(PlayerStatus.score<100){//通過分數(shù)調(diào)整速度等級

        gravity = 0.5;}

        else if(PlayerStatus.score>=100 && PlayerStatus.score<200){

        gravity = 0.5 * 1.1;}……

        除自由落體外,Unity 3D也能較好處理斜拋運動?;诎l(fā)射原理,使物體繼承一定的初速度和方向,思路如下。

        currentTool=Instantiate(tool1,transform.position,transform.rotation);

        //生成道具1,繼承坐標和旋轉角度

        currentTool.rigidbody.velocity=transform.TransformDirection(Vector3(0,0,

        throwForce));//利用運動屬性規(guī)定道具的方向和力

        實踐中,側面生成點的發(fā)射角度需隨時變化,使道具產(chǎn)生不同方向的斜拋運動,因此需設置某種自轉機制使生成點沿x軸以一定速度向一側旋轉,同時以一定頻率向相反方向旋轉。此外,還需鉗制旋轉范圍(-170°~170°),即生成點不得向上向下垂直發(fā)射道具或超出屏幕(圖7)。

        水平隨機風力的實現(xiàn)可依賴Unity 3D風域系統(tǒng)中的定向風[2],其中湍流、振幅及頻率等參數(shù)基本固定,只需為基礎風力乘以腳本生成的隨機值。此外,另需2~3個隨機值控制風域的開啟和關閉以及水平風力的作用時間等。

        1.4 碰撞檢測

        道具通過碰撞調(diào)用特定的方法,從而對角色、場景或其他道具的狀態(tài)實時修改。為實現(xiàn)接觸時應有的反應,需要為道具是否產(chǎn)生碰撞進行檢定,即碰撞檢測[8,9],通常角色與道具和場景的交互都是通過碰撞檢測完成的。就游戲而言,執(zhí)行速度是重要指標,因為十分精確的碰撞檢測很耗時[8],所以檢測通?;跇藴蕩缀涡误w的碰撞外形[10](Sphere Collider, Box Collider和Capsule Collider)實現(xiàn)。為減少計算量,實踐中的道具無論其結構和材質皆視為剛體,碰撞反應的處理根據(jù)標準的牛頓碰撞定律。

        實踐中,角色和場景是碰撞檢測腳本的載體,前者可與所有道具產(chǎn)生碰撞并觸發(fā)相應效果,后者只產(chǎn)生反彈或觸發(fā)少量負向道具的效果。此外,陶罐是較特殊的碰撞體,會銷毀碰撞的雙方并播放粒子動畫。以下分別為角色碰撞檢測算法(以某正向物體為例)和陶罐碰撞檢測算法:

        function OnControllerColliderHit(hit:ControllerColliderHit){

        if(hit.gameObject.tag=="Drums"){//碰撞體標簽為“Drums”(象腳鼓)

        Destroy(gameObject);//銷毀碰撞物體

        playerStatus.AddScore(score);//調(diào)用相應的方法

        pickedUp = true;

        if(pickedUp){ //判斷是否已經(jīng)拾取,防止重復

        return;}

        else if(hit.gameObject.tag=="Hats"){//碰撞體標簽為“Hats”(斗笠)……

        var potteryBlast:Transform;//為碎片粒子創(chuàng)建一個接口

        function OnCollisionStay(collision:Collision){

        //判斷陶罐是否與其他物體產(chǎn)生碰撞

        Instantiate(potteryBlast,this.transform.position,this.transform.rotation);

        //實例化碎片粒子對象

        Destroy(gameObject);}

        道具的碰撞主要分為3類:道具與道具、道具與場景、道具與角色。實踐中,除陶罐外,道具間通常是基于Mesh Collider的簡單碰撞,無任何觸發(fā)效果;而陶罐由于其特殊屬性及球體外形,可添加Sphere Collider并觸發(fā)粒子系統(tǒng)實現(xiàn)破碎效果[1]。道具與場景的碰撞分為兩類,一是與側面碰撞對運動軌跡產(chǎn)生影響(陶罐直接破碎),二是碰撞后觸發(fā)特定腳本對場景造成影響,如紙傘(Blockage.js)、竹筍(BamboosGrow.js)等。道具與角色的碰撞情況較多,正負向和隨機道具觸發(fā)結果均不同。

        碰撞器除做碰撞檢測外,也能通過腳本實現(xiàn)碰撞過濾,即設置當前對象的忽略碰撞體為某類對象;同理需用“tag”進行篩選后將其碰撞體的enabled屬性改為false,如芭蕉葉的效果即為角色忽略所有負向道具的碰撞體。合理運用Unity 3D中的碰撞檢測系統(tǒng)可實現(xiàn)道具與角色、場景的多種交互。

        2 結果與討論

        基于本文的設計理念和算法思路,游戲“傣寨接寶”得以開發(fā)完成,并形成PC、Web和移動終端(Android系統(tǒng))3種不同版本。通過用戶測試(60人)調(diào)整道具屬性、場景屬性與各階段隨機值等,使其較好地平衡了用戶體驗與博弈價值。在道具系統(tǒng)方面,本文主要從4方面進行了理論研究與實踐論證,得到以下結論:第一,道具屬性的設定應充分考慮各方面因素,通常簡單分為正向、負向和隨機道具3類,利用道具編輯器進行詳細設置與管理;此外,道具的實際運行數(shù)據(jù)由于隨機值的影響而隨游戲進程產(chǎn)生波動。第二,生成點需控制道具生成的范圍、種類和初速度等,生成總量由點的活躍度控制,道具以Prefab形式基于循環(huán)模式實時生成。第三,道具運動通常有自由落體、斜拋、平拋和反彈4種形式,基于剛體組件和物理引擎實現(xiàn),運動軌跡有比較明確的規(guī)律可循,但干擾因素(如水平風力)可增加運動的隨機性。第四,碰撞檢測通常是基于標準幾何碰撞體的剛體碰撞,分為道具與道具、道具與場景、道具與角色3類,碰撞后執(zhí)行動畫或銷毀命令。

        本文提出的道具系統(tǒng)具有較強的實用性和擴展性,不但適用于同類型嚴肅游戲和休閑游戲,亦可推廣于動作(ACT)、冒險(AVG)、模擬(SLG)、角色扮演(RPG)等[6]游戲。當然,本系統(tǒng)中仍存在不足之處,例如Mesh Collider的多樣性導致的不規(guī)則碰撞常產(chǎn)生意料之外的運動,而標準幾何形體的碰撞外形又難以滿足各種形狀,造成碰撞體與道具模型邊緣的間隔過大而產(chǎn)生失真碰撞。這些問題在進一步研究中,可通過優(yōu)化碰撞算法和控制運動軌跡等方式進行改進。

        在開發(fā)平臺方面,Unity 3D支持大部分自定義素材,對模型、材質、動畫序列幀等均可以腳本的形式進行管理與調(diào)用,但道具系統(tǒng)開發(fā)仍對資源的預處理和整合提出較高要求。此外,Unity 3D的腳本系統(tǒng)、物理引擎、三維圖形渲染引擎、無縫移植的跨平臺操作、與Kinect等體感設備的連結等[1-4]都為道具系統(tǒng)的設計提供了更豐富的技術資源和更大膽的設計思路。因此,將Unity 3D應用于道具系統(tǒng)的分析與研究十分具有價值和潛力,道具帶來的交互體驗也將在新生技術的支持下以更精彩的面貌迎接廣大用戶。

        [參考文獻]

        [1] Goldstone W. Unity Game Development Essentials[M]. Birmingham: Packt Publishing Ltd, 2009: 99-184.

        [2] Menard M, Shi X M, Li Q. Game Development with Unity[M]. Beijing: China Machine Press, 2012: 100-240.

        [3] Creighton R H. Unity 3D Game Development by Example[M]. Birmingham: Packt Publishing Ltd, 2010: 77-180.

        [4] Blackman S. Beginning 3D Game Development with Unity: All-In-One, Multi-Platform Game Development[M]. New York: Apress, 2010: 93-120, 309-452.

        [5] 黃石,李志遠,陳洪.游戲架構策劃與設計基礎[M].北京:清華大學出版社,2010:94-136.

        Huang S, Li Z Y, Chen H. The Basis of Game Structure and Design[M]. Beijing: Tsinghua University Press, 2010: 94-136. (In Chinese)

        [6] Adam E. Fundamentals of Game Design[M]. Berkeley: New Riders, 2010: 390-628.

        [7] 吳志達.一個基于Unity 3D游戲引擎的體感游戲研究與實現(xiàn)[D].廣州:中山大學檔案館,2012.

        Wu Z D. Research and Implementation of a Somatic Game Based on the Unity 3D Game Engine[D]. Guangzhou: The Archive of Sun Yat-Sen University, 2012. (In Chinese)

        [8] Bourg D M, Bywalec B. Physics for Game Developers[M]. Sebastopol: O’Reilly Media Inc, 2013: 93-123.

        [9] Millington I. Game Physics Engine Development[M]. San Francisco: Morgan Kaufmann, 2007: 143-374.

        [10] 王琦.簡單游戲引擎的設計與開發(fā)[D].長春:吉林大學檔案館,2012.

        Wang Q. Design and Development of Simple Game Engine[D]. Changchun: The Archive of Jinlin University, 2012. (In Chinese)

        猜你喜歡
        游戲
        做游戲
        夜間游戲
        游戲
        送信游戲
        數(shù)獨游戲
        瘋狂的游戲
        飛碟探索(2016年11期)2016-11-14 19:34:47
        爆笑游戲
        第八章直接逃出游戲
        小學科學(2015年7期)2015-07-29 22:29:00
        第八章 直接逃出游戲
        小學科學(2015年6期)2015-07-01 14:30:14
        游戲五計算
        亚洲乱亚洲乱妇50p| 亚欧国产女人天堂Av在线播放| 一本之道高清无码视频| 免费看国产成年无码av| 日韩国产自拍成人在线| 亚洲天堂av高清在线| 日本护士xxxxhd少妇| 国产精品久久久久免费观看 | 99久久伊人精品综合观看| 性一乱一搞一交一伦一性| 国产精品久久中文字幕第一页| 久久久精品2019免费观看| av一区二区三区高清在线看| 国产中文色婷婷久久久精品| 亚洲av无码乱码在线观看富二代 | 免费a级毛片在线播放| 人妻丰满熟妇av无码片| 亚洲精品永久在线观看| 91老司机精品视频| 香蕉亚洲欧洲在线一区| 在线亚洲免费精品视频| 国产青青草在线观看视频| 人人摸人人操| 久久精品无码一区二区2020| 久久中文字幕久久久久91| 风流熟女一区二区三区| 久久成人成狠狠爱综合网| 99精品免费久久久久久久久日本| 日本VA欧美VA精品发布| 国产高清国内精品福利99久久| 国产亚洲一区二区毛片| 人人妻人人澡人人爽超污| 强行无套内谢大学生初次| 久久久久亚洲AV成人网毛片 | 国产一级内射一片视频免费| 国产乱妇无乱码大黄aa片| 午夜AV地址发布| 在线观看人成网站深夜免费| 日产乱码一二三区别免费l| 色伦专区97中文字幕| 免费a级毛片无码a∨免费|