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

一個Unity3D開發教學項目的設計與實現

2023-06-15 23:44:59陳小紅
計算機時代 2023年6期

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

關鍵詞: Unity3D; 虛擬現實; 項目式教學; 游戲項目

中圖分類號: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 引言

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

1 “Unity3D開發入門”課程教學分析

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

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

2.1 項目策劃

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

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

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

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

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

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

2.2 主要功能模塊設計

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

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

3 “叢林尋寶”教學項目的實現

3.1 場景設計與搭建

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

3.2 倒計時的實現

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

void Time_Control() {

leftTime -= Time.deltaTime;

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

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

//剩余時間顯示

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

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

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

⑴ 主角的移動。游戲規則中要求單擊地面時能夠引導主角的行進,并要對主角行動的區域做合理的限定。Unity自帶的尋路即導航系統利用導航網格描述游戲世界的可行走表面,主角需要添加導航組件后才可以在導航網格中自動繞開障礙進行尋路。鼠標單擊地面進行主角行動的引導使用的是射線檢測,Unity的物理引擎為我們提供了相關射線類以及函數接口,我們需要自行調用這些API來實現一條射線[5]。射線與地面碰撞點作為導航網格代理組件的目標地,當前物體會自動尋路到這個位置。在行走過程中,想要實現人物自然的走動和轉向,還需要創建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參數賦值

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

if (Input.GetMouseButtonDown(1)) {

Ray cameraRay=Camera.main.ScreenPointToRay

(Input.mousePosition);

GameObject Arrow=Instantiate(arrow, cameraRay

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

//弓箭產生

Arrow.GetComponent().velocity=

cameraRay.direction * speed; }

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

⑴ 主角撿拾寶石與被攻擊。主角撿拾寶石以及被敵人砍到的判斷都需要用到碰撞檢測。Unity中的兩個物體要想發生碰撞,必須依賴于自身的碰撞器組件,其中附帶碰撞檢測腳本的物體必須有剛體組件。Unity中的碰撞檢測主要有碰撞信息檢測和觸發信息檢測兩種接口函數[6],為了消除碰撞對主角的影響,在這里使用觸發信息檢測中的OnTriggerEnter函數,來檢測物體的名稱或標簽。當碰撞到寶石(標簽為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碰撞信息檢測函數。主要代碼如下:

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腳本來控制攝像機跟隨游戲元素。調整攝像機位置在主角上方合適的位置,讓攝像機與主角一直保持相同的距離,這樣就做到了攝像機一直跟隨主角移動,主要代碼如下:

void Start ()

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

void Update ()

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

3.7 UI制作與系統控制

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

⑵ 開始游戲。初始是暫停狀態,將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 結束語

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

參考文獻(References):

[1] 中華人民共和國中央人民政府網.中華人民共和國國民

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

[2] 陳小紅,張銀巧.高職虛擬現實應用技術專業課程體系構建

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

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

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

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

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

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

社,2019

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

電子工業出版社,2018

主站蜘蛛池模板: 亚洲天堂视频网站| 91精品国产91久无码网站| 国产成人超碰无码| 亚洲VA中文字幕| 2021天堂在线亚洲精品专区| 国产肉感大码AV无码| 亚洲国产成人精品青青草原| 71pao成人国产永久免费视频| 亚洲电影天堂在线国语对白| 中日无码在线观看| 十八禁美女裸体网站| 天堂av综合网| 国产成人亚洲无吗淙合青草| 国产欧美日韩18| 在线免费观看a视频| 国产日本欧美亚洲精品视| 国产一级小视频| 波多野结衣视频一区二区| 噜噜噜久久| 一级毛片无毒不卡直接观看| 日韩精品久久无码中文字幕色欲| AV在线麻免费观看网站| 中文字幕欧美日韩| 国产麻豆永久视频| 国产成人a毛片在线| 亚洲国产日韩视频观看| 超碰精品无码一区二区| 中文字幕免费播放| 日韩免费中文字幕| 亚洲有码在线播放| 国产美女叼嘿视频免费看| 在线观看av永久| 国产XXXX做受性欧美88| 热久久综合这里只有精品电影| 好紧好深好大乳无码中文字幕| 久久精品视频一| 亚欧乱色视频网站大全| 欧美亚洲日韩不卡在线在线观看| 国产精品嫩草影院av| 美女被操黄色视频网站| 国产精品嫩草影院av | 91无码视频在线观看| 爽爽影院十八禁在线观看| 国产黄在线免费观看| 99精品国产自在现线观看| 福利在线不卡| 国产SUV精品一区二区6| 亚洲第一色视频| 啦啦啦网站在线观看a毛片| 亚洲综合激情另类专区| 伊人成色综合网| 精品久久香蕉国产线看观看gif| 日本在线免费网站| 国产浮力第一页永久地址| 亚洲最新网址| 99er这里只有精品| 久久精品波多野结衣| 在线人成精品免费视频| 在线精品亚洲一区二区古装| 伊人久久精品亚洲午夜| 日韩中文字幕免费在线观看| 精品自窥自偷在线看| 国产手机在线观看| 国产一级视频久久| 一个色综合久久| 久久午夜夜伦鲁鲁片无码免费| 国产精品久久久久久影院| 免费av一区二区三区在线| 美女被躁出白浆视频播放| 亚洲天堂网在线播放| 97se亚洲综合在线韩国专区福利| 国产在线观看91精品亚瑟| 97狠狠操| 99热这里只有精品免费国产| 青青热久麻豆精品视频在线观看| 天堂岛国av无码免费无禁网站| 国产成人h在线观看网站站| 国产第八页| 一区二区在线视频免费观看| 国产大片喷水在线在线视频| 亚洲第一中文字幕| 精品久久久久久成人AV|