• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      一個Unity3D開發(fā)教學項目的設計與實現(xiàn)

      2023-06-15 23:44:59陳小紅
      計算機時代 2023年6期
      關鍵詞:項目式教學虛擬現(xiàn)實

      摘? 要: Unity3D引擎是虛擬現(xiàn)實的主要開發(fā)工具之一。結(jié)合高職院?!癠nity3D開發(fā)入門”的課程特點和實際教學中的問題,遵循項目式教學原則,設計和開發(fā)了一個“叢林尋寶”的Unity3D游戲項目,讓學生通過該項目的學習理解Unity3D引擎開發(fā)原理,循序漸進地掌握完整的Unity3D項目開發(fā)的流程,為相關課程教學活動的開展提供借鑒。

      關鍵詞: Unity3D; 虛擬現(xiàn)實; 項目式教學; 游戲項目

      中圖分類號:TP391.9;G712? ? ? ? ? 文獻標識碼:A? ? ?文章編號:1006-8228(2023)06-153-04

      Design and implementation of a Unity3D development teaching project

      Chen Xiaohong

      (Department of Printing and Packaging, Shanghai Publishing and Printing College, Shanghai 200093, China)

      Abstract: Unity3D engine is one of the main development tools of virtual reality. Combined with the course characteristics and the problems in practical teaching of "Introduction to Unity3D Development" in higher vocational colleges, a Unity3D teaching project of "Jungle Treasure Hunting" is designed and developed following the principle of project-based teaching. Students can learn and understand the principle of Unity3D engine development and master the complete Unity3D project development process step by step through the study of this project. It provides a reference for the teaching activities of related courses.

      Key words: Unity3D; virtual reality; project-based teaching; game project

      0 引言

      虛擬現(xiàn)實技術(Virtual Reality即VR),是20世紀發(fā)展起來的一項全新的實用技術,VR產(chǎn)業(yè)的迅猛發(fā)展,相關專業(yè)人才的缺口日益擴大[1]。至2022年全國開設“虛擬現(xiàn)實技術應用”專業(yè)的高等職業(yè)院校已有近200所。對于這個創(chuàng)新性強、多學科交叉的新專業(yè),學校在師資建設、課程體系構(gòu)建、課程資源建設等各方面均面臨巨大的挑戰(zhàn)[2]。

      1 “Unity3D開發(fā)入門”課程教學分析

      “Unity3D開發(fā)入門”是VR技術人才培養(yǎng)的一門專業(yè)核心課程,課程的總體目標是培養(yǎng)學生利用Unity3D引擎開發(fā)游戲等虛擬現(xiàn)實應用項目的能力。Unity3D引擎的功能強大,組件和參數(shù)設置不僅數(shù)量繁多也比較復雜,課程教學面臨較大困難,相關課程教學資源和教材的開發(fā)也較滯后,缺乏可以借鑒的教學經(jīng)驗。以學生為主體的項目式教學,強調(diào)讓學生通過理論指導實踐、在實踐中深化對理論知識的理解。項目式教學的重點是教學項目的設計,教學項目的選取與學生的崗位能力要求是否匹配,直接影響了教學效果[3]。本課程讓學生通過完成一個“叢林尋寶”Unity3D項目的分析、設計和開發(fā)的過程,理解Unity3D引擎開發(fā)原理,掌握完整的項目開發(fā)流程,達到課程的教學目標。

      2 “叢林尋寶”教學項目的設計

      2.1 項目策劃

      “叢林尋寶”項目在實際教學中打破了學科知識體系次序,教學內(nèi)容被分解為若干個任務點,涵蓋了Unity3D引擎的基本操作、地形系統(tǒng)、光照系統(tǒng)、粒子系統(tǒng)、動畫系統(tǒng)、導航系統(tǒng)、物理系統(tǒng)、腳本開發(fā)、UI界面系統(tǒng)等大部分內(nèi)容模塊。從主角簡單漫游過渡到游戲的交互,從單一的功能實現(xiàn)過渡到項目的綜合優(yōu)化,讓學生在實現(xiàn)游戲基本功能的基礎上,學會對項目進行個性化的拓展[4],實現(xiàn)學生知識水平與實踐能力的同步提升。

      “叢林尋寶”項目設計的總體思路是:玩家控制游戲主角跑動,在規(guī)定的時間內(nèi)主角撿拾寶石取得設定的積分值,游戲勝利;但途中會遭遇敵人的襲擊,一旦主角血量耗盡,游戲失敗。具體游戲規(guī)則如下。

      ⑴ 運行游戲進入開始界面,可以查看游戲的說明文字,點擊“開始游戲”按鈕,進入游戲場景,場景上方會顯示當前的積分、主角的血量進度條、倒計時。

      ⑵ 玩家單擊地面,主角會朝點擊的位置前進,主攝像機也會跟隨移動,使玩家始終保持適當?shù)囊曇胺秶?。主角在行進中尋找掩埋在場景各處的寶石,觸碰到寶石會取得相應的積分,積分達到設定值,會出現(xiàn)“游戲勝利”的提示。

      ⑶ 主角在行進中如遭遇敵人,玩家右擊敵人,可以從攝像機位置朝敵人發(fā)射弓箭,敵人中箭會死亡,并播放音效。

      ⑷ 主角在行進中如果接近敵人,會遭到敵人的襲擊,主角血量會相應的減少,如果血量減到零,或者倒計時為零,會出現(xiàn)“游戲失敗”的提示。

      2.2 主要功能模塊設計

      系統(tǒng)功能模式用來控制整個項目的運行。根據(jù)游戲規(guī)則,本項目中的系統(tǒng)功能有:開始游戲、計時控制、積分顯示、血量顯示、游戲成功、游戲失敗、重新開始、背景音樂、退出游戲。如圖1所示。

      該項目主要的游戲物體有主角、敵人、寶石以及主攝像機。游戲圍繞著這幾個主要物體來設計,其中主角和敵人的功能模塊如圖2所示。游戲主角的功能模塊有移動控制、撿拾寶石、射擊敵人、血量控制、積分控制。游戲中敵人的功能模塊有移動邏輯、攻擊邏輯、死亡控制、音效控制。寶石的功能模塊僅有被撿拾后銷毀,主攝像機的功能模塊主要有跟隨主角。

      3 “叢林尋寶”教學項目的實現(xiàn)

      3.1 場景設計與搭建

      本項目中的游戲場景從創(chuàng)建地形開始,包括利用地形工具創(chuàng)建高山、湖泊、盆地、花、草、樹、天空盒子、風、霧,利用粒子系統(tǒng)和動畫系統(tǒng)制作燃燒的火焰等。學生可以根據(jù)自己的設想,來創(chuàng)建游戲場景和布置光源,但要保證包含所有項目所需的元素。游戲中的寶石需要導入在3Dmax軟件中創(chuàng)建的模型,游戲中的寶石、敵人、弓箭使用的數(shù)量較多,都需要創(chuàng)建相應的預制體??梢酝ㄟ^把場景中的物體拖進project面板中來實現(xiàn)預制體的創(chuàng)建。

      3.2 倒計時的實現(xiàn)

      游戲開始時系統(tǒng)開啟倒計時,游戲剩余的時間會顯示在游戲界面右上角,并實時更新。當剩余時間為零時,游戲停止。主要代碼如下:

      void Time_Control() {

      leftTime -= Time.deltaTime;

      // leftTime為遞減的游戲剩余時間

      Timetext.GetComponent().text=leftTime.ToString();

      //剩余時間顯示

      if (leftTime<=0) { Time.timeScale=0;

      loseUI.SetActive(true); } } //游戲失敗

      3.3 射線檢測:主角的移動與射擊控制

      ⑴ 主角的移動。游戲規(guī)則中要求單擊地面時能夠引導主角的行進,并要對主角行動的區(qū)域做合理的限定。Unity自帶的尋路即導航系統(tǒng)利用導航網(wǎng)格描述游戲世界的可行走表面,主角需要添加導航組件后才可以在導航網(wǎng)格中自動繞開障礙進行尋路。鼠標單擊地面進行主角行動的引導使用的是射線檢測,Unity的物理引擎為我們提供了相關射線類以及函數(shù)接口,我們需要自行調(diào)用這些API來實現(xiàn)一條射線[5]。射線與地面碰撞點作為導航網(wǎng)格代理組件的目標地,當前物體會自動尋路到這個位置。在行走過程中,想要實現(xiàn)人物自然的走動和轉(zhuǎn)向,還需要創(chuàng)建Animator Controller動畫控制器,通過speed速度的不同值設置主角idle、walk、run三個動畫剪輯的切換,如圖3所示。主要代碼如下:

      if (Input.GetMouseButtonDown(0)) {

      Ray ray=Camera.main.ScreenPointToRay

      (Input.mousePosition);

      RaycastHit hit;

      if(Physics.Raycast(ray, out hit))

      { agent.SetDestination(hit.point); } //設置agent的目標地

      anim.SetFloat("speed", agent.velocity.magnitude);

      //給speed參數(shù)賦值

      ⑵ 射擊控制。本項目中射擊敵人的弓箭是由攝像機位置發(fā)出來的,射擊腳本賦予主攝像機或者空物體,這里也運用了射線檢測。鼠標右擊的點就是弓箭射擊的目標,需要注意的是要使箭頭保持指向鼠標點擊的方向,射擊的同時伴有音效。主要代碼如下:

      if (Input.GetMouseButtonDown(1)) {

      Ray cameraRay=Camera.main.ScreenPointToRay

      (Input.mousePosition);

      GameObject Arrow=Instantiate(arrow, cameraRay

      .origin, arrow.transform.rotation) as GameObject;

      //弓箭產(chǎn)生

      Arrow.GetComponent().velocity=

      cameraRay.direction * speed; }

      3.4 碰撞檢測:撿拾寶石與互相攻擊

      ⑴ 主角撿拾寶石與被攻擊。主角撿拾寶石以及被敵人砍到的判斷都需要用到碰撞檢測。Unity中的兩個物體要想發(fā)生碰撞,必須依賴于自身的碰撞器組件,其中附帶碰撞檢測腳本的物體必須有剛體組件。Unity中的碰撞檢測主要有碰撞信息檢測和觸發(fā)信息檢測兩種接口函數(shù)[6],為了消除碰撞對主角的影響,在這里使用觸發(fā)信息檢測中的OnTriggerEnter函數(shù),來檢測物體的名稱或標簽。當碰撞到寶石(標簽為diamond),積分變量score相應自增,當碰撞到敵人的武器(名稱為weapon),血量相應減少。用bloodvalue變量來代表界面中血條(Slider控件)的value值。主角撿拾寶石與被攻擊時的主要代碼如下:

      void OnTriggerEnter(Collider other)

      { if (other.gameObject.tag == "diamond")

      { score+=2; } //積分自增

      if (other.gameObject.name == "weapon")

      { GameManager.bloodvalue -=5; } }? //血量自減

      ⑵ 敵人被弓箭射擊。敵人被弓箭射擊與主角被敵人的武器攻擊類似,不同的是敵人被弓箭射中之后有倒地死亡的動畫播放,所以這里使用的是OnCollisionEnter碰撞信息檢測函數(shù)。主要代碼如下:

      void OnCollisionEnter(Collision collisionInfo)

      { if (collisionInfo.gameObject.tag == "arrow")

      { isdead = true; } } //切換到死亡動畫剪輯

      3.5 敵人攻擊的邏輯

      本項目初始設計中的敵人是隨機分布在場景各處,敵人有徘徊、跑動、攻擊、死亡四個動畫剪輯可以進行切換,只有當主角比較接近的時候,敵人才會朝主角的方向跑動,當距離小于二米時就會近身砍殺,被弓箭射中會死亡。敵人進行攻擊的主要代碼如下:

      if (distance<2f) { this.transform.LookAt(player.transform);

      animator.SetBool("isrun", false); //停止跑動

      animator.SetBool("ishit", true); }} //啟動攻擊動畫

      3.6 攝像機跟隨

      用Unity腳本來控制攝像機跟隨游戲元素。調(diào)整攝像機位置在主角上方合適的位置,讓攝像機與主角一直保持相同的距離,這樣就做到了攝像機一直跟隨主角移動,主要代碼如下:

      void Start ()

      { offset = transform.position - player.position; }

      void Update ()

      { transform.position = offset + player.position; }

      3.7 UI制作與系統(tǒng)控制

      ⑴ UI界面的制作。Unity提供了一套很完整的圖形化界面引擎。本項目中將開始界面、積分和血量顯示界面、游戲成功界面、游戲失敗界面分別設計為四個不同的Panel面板組件,用代碼來控制他們的顯示和隱藏。

      ⑵ 開始游戲。初始是暫停狀態(tài),將Time.timeScale設為0或1可以很方便的將游戲進度暫停或開啟。等待玩家點擊“開始游戲”按鈕,游戲正式開啟,主要代碼如下:

      void Start() { Time.timeScale=0; }

      public void readygo() { Time.timeScale=1;

      readyUI.SetActive(false); } //隱藏準備界面

      ⑶ 積分顯示與游戲勝利。主要代碼如下:

      void iswin()

      { Scoretext.GetComponent().text=score;

      if (score>=100)

      { Time.timeScale=0; winUI.SetActive(true); } }

      ⑷ 血量顯示與游戲失敗。主要代碼如下:

      void islose()

      { bloods.GetComponent().value=bloodvalue;

      if (bloodvalue<=0)

      { Time.timeScale=0; loseUI.SetActive(true); } }

      4 結(jié)束語

      本項目作為Unity3D引擎開發(fā)的教學項目,將多個知識點有機地融合在一起,難度也根據(jù)學生的知識儲備和認知規(guī)律來確定。讓學生在項目實踐中掌握Unity3D的主要知識點和項目開發(fā)流程,可以對教學項目做適度擴展,在教學實踐中取得了較好的效果,在一定程度上彌補了課程教學資源的不足,也為相關課程的教學提供了借鑒。后續(xù)可以在實際教學中對此項目不斷進行創(chuàng)新和迭代升級,添加更多的功能模塊,如主角的爬高控制、變換場景、設置游戲等級、批量生產(chǎn)敵人等。既讓玩家具有更好的游戲體驗,也能讓學生進行更深入的學習。

      參考文獻(References):

      [1] 中華人民共和國中央人民政府網(wǎng).中華人民共和國國民

      經(jīng)濟和社會發(fā)展第十四個五年規(guī)劃和2035年遠景目標綱要[EB/OL].[2021-03-13].http://www.gov.cn/xinwen/2021-03/13/content_5592681.htm.

      [2] 陳小紅,張銀巧.高職虛擬現(xiàn)實應用技術專業(yè)課程體系構(gòu)建

      研究[J].職業(yè)技術,2021,20(10):99-103

      [3] 周玉珍.基于項目式教學培養(yǎng)中職學生高階思維能力的

      研究與實踐[D].碩士,貴州師范大學,2020

      [4] 汪秀珍,段俊霞.SolidWorks三維設計課程的項目式教學

      實踐[J].武漢工程職業(yè)技術學院學報,2021,33(4):94-96

      [5] 曹曉明.Unity3D游戲設計與開發(fā)[M].北京:清華大學出版

      社,2019

      [6] 劉國柱.Unity3D/2D游戲開發(fā)從0到1(第二版)[M].北京:

      電子工業(yè)出版社,2018

      猜你喜歡
      項目式教學虛擬現(xiàn)實
      論虛擬現(xiàn)實藝術的“沉浸”
      REALITY BITES
      漢語世界(2017年3期)2017-06-05 15:01:42
      風口上的虛擬現(xiàn)實
      商周刊(2017年24期)2017-02-02 01:42:55
      民辦本科高校新聞專業(yè)項目教學的實踐與思考
      今傳媒(2016年12期)2017-01-09 22:12:28
      論項目教學在高職計算機網(wǎng)絡技術專業(yè)課程教學中的應用
      初中生物項目式學習活動的探索
      虛擬現(xiàn)實技術向科幻小說借靈感
      海外星云(2016年7期)2016-12-01 04:18:00
      高職《液壓技術》課程教學改革探索
      科技視界(2016年22期)2016-10-18 17:25:54
      機制專業(yè)MATLAB軟件課程項目式教學研究
      考試周刊(2016年26期)2016-05-26 21:08:33
      《現(xiàn)場總線應用技術》課程改革與探索
      科技視界(2016年5期)2016-02-22 19:45:46
      潼南县| 平凉市| 托克逊县| 阿克| 衡南县| 调兵山市| 玛曲县| 平湖市| 九龙坡区| 菏泽市| 兴国县| 恩平市| 常熟市| 桂阳县| 抚松县| 密山市| 榆中县| 中西区| 黑龙江省| 遂平县| 忻州市| 嘉祥县| 大连市| 廉江市| 太湖县| 汽车| 柳江县| 右玉县| 麻城市| 通州市| 贺兰县| 法库县| 阿鲁科尔沁旗| 全南县| 开封县| 普格县| 项城市| 陆川县| 晋宁县| 沾益县| 绥滨县|