基于Unity3D的寵物醫(yī)院模擬游戲的設(shè)計(jì)與實(shí)現(xiàn)
《基于Unity3D的寵物醫(yī)院模擬游戲的設(shè)計(jì)與實(shí)現(xiàn)》由會(huì)員分享,可在線閱讀,更多相關(guān)《基于Unity3D的寵物醫(yī)院模擬游戲的設(shè)計(jì)與實(shí)現(xiàn)(40頁珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、 基于Unity3D的寵物醫(yī)院模擬游戲的設(shè)計(jì)與實(shí)現(xiàn) Design and Implementation of Pet Hospital Simulation Game Based on Unity3D 摘要 隨著生活水平的不斷提高與科技的發(fā)展,人們開始不滿足于物質(zhì)上的需求,飼養(yǎng)貓狗人數(shù)大幅度增長(zhǎng)??稍陲曫B(yǎng)過程中難免會(huì)遇到各種各樣的問題。 當(dāng)今社會(huì),玩游戲又成了人們的主要娛樂與消遣方式。模擬類科普游戲可以讓人們?cè)谙r(shí)間的同時(shí)學(xué)習(xí)到知識(shí),雖然不能完全代替?zhèn)鹘y(tǒng)的正規(guī)教育,但仍然可以起到教
2、育的作用。 Unity3D作為一款既能開發(fā)2D又能3D游戲、且可部署到多個(gè)主流平臺(tái)內(nèi)的軟件,是一款被較多開發(fā)者使用的游戲開發(fā)引擎。而市面上暫時(shí)還沒有發(fā)現(xiàn)有關(guān)科普寵物疾病類的游戲,本論文研究寵物醫(yī)院模擬游戲開發(fā),不是單純?yōu)榱藠蕵?,更重要的是為了能夠給更多的人通過玩游戲了解到寵物疾病相關(guān)知識(shí)。本文主要描述了利用Ngui插件對(duì)游戲的流程設(shè)計(jì)與功能實(shí)現(xiàn),為后續(xù)開發(fā)同類游戲的開發(fā)者提供思路參考。 關(guān)鍵詞:Unity3D 寵物醫(yī)院 模擬游戲 Abstract With the continuous improvement of living standards and the d
3、evelopment of technology, people are not satisfied with the material needs, and the number of cats and dogs has increased significantly. It is inevitable that various problems will be encountered during the feeding process. In today's society, playing games has become the main way of entertainment
4、and recreation. Simulation science games allow people to learn knowledge while killing time. Although they cannot completely replace traditional formal education, they can still play an educational role. Unity3d, as a software that can develop 2D and 3D games and can be deployed in multiple mainstr
5、eam platforms, is a game development engine used by more developers. However, there is no game about pet disease in science on the market. The research on the simulation of pet hospitals in this paper is not just for entertainment, but more importantly to give more people the knowledge of pet diseas
6、es by playing games. This article mainly describes the process design and function implementation of the game, and provides ideas for developers who develop similar games in the future. Keyword:Unity3D Pet Hospital Simulation game 目錄 第1章 緒論 1 1.1 選題的目的和意義 1 1.2 國內(nèi)外研究現(xiàn)狀 1 1.3 論文結(jié)構(gòu)概述 1
7、 第2章 開發(fā)工具介紹 2 2.1 Unity3D介紹 2 2.2 ProBuilder插件介紹 2 2.3 ProGrids插件介紹 2 2.4 Ngui插件介紹 2 第3章 游戲需求分析 3 3.1 科普類游戲的需求分析 3 3.2 游戲功能需求分析 3 3.3 游戲玩法設(shè)計(jì) 3 3.4 本章小結(jié) 4 第4章 游戲設(shè)計(jì)與實(shí)現(xiàn) 5 4.1 場(chǎng)景設(shè)計(jì) 5 4.1.1 安裝ProBuilder插件與ProGrids插件 5 4.1.2 配置人物動(dòng)畫 5 4.1.3 人物移動(dòng)實(shí)現(xiàn) 6 4.1.4 設(shè)置相機(jī)跟隨人物移動(dòng) 8 4.1.5 場(chǎng)景搭建 8 4.2 學(xué)習(xí)功能
8、實(shí)現(xiàn) 9 4.2.1 學(xué)習(xí)功能的ui設(shè)計(jì) 9 4.2.2 學(xué)習(xí)功能的事件觸發(fā)實(shí)現(xiàn) 10 4.2.3 學(xué)習(xí)內(nèi)容選擇與翻頁的功能實(shí)現(xiàn) 11 4.3 職位功能設(shè)計(jì) 13 4.4 答題測(cè)試功能實(shí)現(xiàn) 14 4.4.1 測(cè)試界面ui界面設(shè)計(jì) 14 4.4.2 測(cè)試功能觸發(fā)條件實(shí)現(xiàn) 14 4.4.3 測(cè)試功能設(shè)計(jì) 17 4.5 查看病例功能實(shí)現(xiàn) 17 4.5.1 病例ui設(shè)計(jì) 18 4.5.2 觸發(fā)病例條件設(shè)計(jì) 18 4.6 游戲內(nèi)分?jǐn)?shù)系統(tǒng)實(shí)現(xiàn) 18 第5章 游戲開始界面設(shè)計(jì) 25 5.1 游戲開始界面設(shè)計(jì) 25 5.2 開始界面按鈕代碼實(shí)現(xiàn) 25 5.3 游戲整合與導(dǎo)出 2
9、6 第6章 游戲測(cè)試 28 第7章 總結(jié) 33 參 考 文 獻(xiàn) 34 致謝 35 廣東東軟學(xué)院本科畢業(yè)設(shè)計(jì)(論文) 第1章 緒論 1.1 選題的目的和意義 寵物,就像我們的親人、伙伴一樣,有一只寵物陪伴在身邊,可以緩解人們的孤獨(dú)感、寂寞感。隨著人們物質(zhì)生活水品的不斷提高,越來越多的人開始飼養(yǎng)起了寵物。然而,寵物跟人類一樣,也有各種各樣的疾病發(fā)生,但治療方案卻跟人類完全不同,而許多寵物飼養(yǎng)人員并不能很清楚地了解寵物疾病給寵物帶來地危害,也不了解如何預(yù)防疾病,讓許多寵物就此喪失生命,同時(shí)也給飼主帶來精神上的痛苦。 當(dāng)今社會(huì),玩游戲成了人們的主要娛樂與消
10、遣方式。而如今,游戲已經(jīng)不再屬于玩物喪志的范疇,模擬類科普游戲可以讓人們?cè)谙r(shí)間的同時(shí)學(xué)習(xí)到知識(shí),雖然不能完全代替?zhèn)鹘y(tǒng)的正規(guī)教育,但仍然可以起到教育的作用,可謂放松與學(xué)習(xí)兩不誤。 本選題的研究目的是為了讓人們能夠在游戲中更容易更方便地了解到寵物疾病知識(shí),以測(cè)試的形式來鞏固人們對(duì)寵物健康知識(shí)的記憶,從而更好的照顧自家的寵物,讓自家寵物遠(yuǎn)離病痛。 1.2 國內(nèi)外研究現(xiàn)狀 目前國內(nèi)在科普寵物疾病方面有嗶哩嗶哩出品的首檔醫(yī)療觀察類真人秀《寵物醫(yī)院》,此節(jié)目有科普一些常見的疾病預(yù)防等。在游戲方面是娛樂休閑游戲,不具備知識(shí)傳播功能,還有一些是針對(duì)人類疾病而設(shè)定的,而在國外的《模擬人生》系列的游戲
11、中,雖有寵物醫(yī)院的設(shè)定,但只能讓玩家去簡(jiǎn)單的經(jīng)營(yíng),而不能讓玩家學(xué)習(xí)到有關(guān)寵物疾病的相關(guān)知識(shí)。因此研究一款寵物醫(yī)院模擬科普類游戲是很有必要的。 1.3 論文結(jié)構(gòu)概述 本文主要分為六個(gè)部分: 第一部分:緒論,主要闡述畢業(yè)設(shè)計(jì)選題的目的與研究意義、國內(nèi)外研究現(xiàn)狀以及本文的結(jié)構(gòu)介紹; 第二部分:介紹了開發(fā)游戲所用到的工具與插件介紹; 第三部分:詳細(xì)描述了游戲內(nèi)的需求與設(shè)計(jì); 第四部分:詳細(xì)描述了游戲內(nèi)各個(gè)功能的制作與實(shí)現(xiàn); 第五部分:游戲的UI界面設(shè)計(jì)、描述游戲的整合與導(dǎo)出并進(jìn)行測(cè)試; 第六部分:總結(jié)游戲內(nèi)的不足與今后的改進(jìn)。 36 第2章 開發(fā)工具介紹 2.1 U
12、nity3D介紹 Unity3D是一款由Unity Technologies所研發(fā)的跨平臺(tái)2D/3D游戲引擎,開發(fā)的游戲可以部署到多個(gè)主流平臺(tái),如常見的:Windows、MacOS、Android與iOS。除游戲開發(fā)外還可以實(shí)現(xiàn)視頻制作,其對(duì)模型資源的兼容性高,多個(gè)主流建模軟件生成的模型均可以在Unity3D中完美導(dǎo)入,并可以在原模型修改后自動(dòng)更新。 Unity3D給用戶提供了可視化操作界面,利用內(nèi)置插件,可以讓新手短時(shí)間內(nèi)熟悉并開發(fā)出游戲原型。 Unity3D主要支持三種語言:C#、UnityScript(多被稱為“Javascript”)和BOO。Unity2017.2測(cè)試版后的版本
13、在新建中已經(jīng)不再包含Javascript選項(xiàng),但仍然支持使用,需在Unity編輯器外創(chuàng)建再導(dǎo)入。 2.2 ProBuilder插件介紹 ProBuilder插件是一款Unity2018.1版本以上自帶的官方建模插件,Unity2017.x版本可以直接在Asset Store下載使用。此插件是3D建模和關(guān)卡設(shè)計(jì)工具的獨(dú)特組合,為構(gòu)建簡(jiǎn)單的幾何體進(jìn)行了操作優(yōu)化處理,但也可以進(jìn)行詳細(xì)的編輯和UV展開。使用ProBuilder可以快速構(gòu)建結(jié)構(gòu)復(fù)雜的地形、車輪和武器的原型,或制作自定義碰撞幾何體。主要特點(diǎn)有:動(dòng)態(tài)用戶界面、擠出插入功能、建立多邊形功能、多種規(guī)則形狀和著色等。 2.3 ProGrid
14、s插件介紹 ProGrids插件可以為我們提供視覺和功能上的網(wǎng)格,它們可以使所有操作都在三個(gè)軸上對(duì)齊。Probuilder結(jié)合ProGrids使用可以提高建模速度,使構(gòu)建的幾何體構(gòu)造更為精準(zhǔn)。 2.4 Ngui插件介紹 Ngui是一個(gè)功能強(qiáng)大的UI系統(tǒng)和Unity的事件通知框架,均使用C#編寫,并嚴(yán)格遵循KISS原則。它具有簡(jiǎn)潔的代碼和極簡(jiǎn)的方法。許多behaviour類都保持在兩百行代碼以下。該插件全面支持ios、Android、Blackberry、win8、wp8、flash。使用Ngui就像使用Unity,將現(xiàn)成的控件(例如按鈕,復(fù)選框,滾動(dòng)條和其他控件)拖放到場(chǎng)景視圖中,或者使
15、用類似于Lego的方法制作自己的控件。將控件另存為預(yù)設(shè)體,即可在任何地方重復(fù)使用。 第3章 游戲需求分析 3.1 科普類游戲的需求分析 隨著科學(xué)教育類電子游戲的發(fā)展以及教育理念的日新月異,科學(xué)教育類電子游戲已經(jīng)被視為科學(xué)教育的一個(gè)非主流的形式[8]。在如今電子游戲行業(yè)迅速的發(fā)展的時(shí)代下,科普類游戲較于一般游戲來講,其主要以普及科學(xué)知識(shí)為主,娛樂為次,在家長(zhǎng)眼里不會(huì)被認(rèn)為是玩物喪志的游戲,得到了廣大家長(zhǎng)們的認(rèn)可,游戲不局限于青少年,不同年齡層次的用戶均能體驗(yàn)游戲。 3.2 游戲功能需求分析 目前飼養(yǎng)寵物陪伴自己生活的人越來越多,功課有時(shí)候做的不夠到位,寵物發(fā)生狀況時(shí)不正當(dāng)?shù)奶幚?/p>
16、方式導(dǎo)致問題更為嚴(yán)重。游戲內(nèi)最主要的是給人們普及疾病相關(guān)知識(shí)與處理知識(shí)。 因此寵物醫(yī)院模擬游戲較為重要的功能有以下幾個(gè): 第一,游戲內(nèi)玩家將模擬剛畢業(yè)到寵物醫(yī)院工作的見習(xí)助理,根據(jù)自己的能力不斷成長(zhǎng),提升自己的職位。 第二,學(xué)習(xí)功能。玩家主要通過學(xué)習(xí)功能來獲取寵物疾病的理論知識(shí),也僅限于理論知識(shí),模擬現(xiàn)實(shí)生活中醫(yī)生需要在空閑時(shí)間額外看書學(xué)習(xí)的行為。 第三,測(cè)試功能。這個(gè)功能是模擬醫(yī)院內(nèi)的考核制度。主要考察書本內(nèi)的理論知識(shí)。為了能夠重復(fù)玩家的記憶,答卷采用隨機(jī)出題的形式展示,通過隨機(jī)來出現(xiàn)重復(fù)的題目,鞏固玩家在游戲內(nèi)學(xué)到的知識(shí)。 第四,查看實(shí)際病例功能。病例功能主要是讓玩家學(xué)習(xí)到除了書
17、本理論知識(shí)外的知識(shí)內(nèi)容。主要記錄寵物真實(shí)病情案例,病情診斷條件與治療方案。 3.3 游戲玩法設(shè)計(jì) 從功能模塊方面可以決定游戲的玩法,玩家通過控制人物移動(dòng)觸碰場(chǎng)景內(nèi)的物體,根據(jù)提示解鎖不同的功能,解鎖測(cè)試功能后,則根據(jù)測(cè)試的分?jǐn)?shù)判斷是否具備解鎖查看實(shí)際病例的功能。判斷游戲結(jié)束的標(biāo)準(zhǔn)有兩個(gè),一個(gè)是低于初始分,判定為失敗;一個(gè)是高于設(shè)定的值(可修改),判定為游戲通關(guān)。具體的方法實(shí)現(xiàn)設(shè)計(jì)如下: 一,人物移動(dòng)以及移動(dòng)動(dòng)畫實(shí)現(xiàn)功能:利用Unity自帶方法來監(jiān)聽玩家對(duì)鍵盤的操作,從而控制人物移動(dòng);利用Animator控制器,根據(jù)游戲內(nèi)判斷人物是否移動(dòng),從而改變動(dòng)作的布爾值來改變?nèi)宋锊煌膭?dòng)畫播放。
18、二,學(xué)習(xí)功能:學(xué)習(xí)功能主要利用Ngui插件來完成界面,通過使用插件內(nèi)自帶的TweenAlpha腳本實(shí)現(xiàn)UI界面的動(dòng)態(tài)效果,利用PlayForward方法控制UI顯示,利用PlayReverse方法控制UI的隱藏。 三,測(cè)試功能:首先利用SetActive控制測(cè)試功能解鎖的開關(guān)是否在場(chǎng)景內(nèi)顯示,利用activeInHierarchy判斷開關(guān)是否存在于場(chǎng)景內(nèi),若存在則開啟測(cè)試功能;測(cè)試題目則用Random.Range隨機(jī)方法,在自定義的范圍內(nèi)隨機(jī)生成一個(gè)整數(shù),不同的數(shù)字將對(duì)應(yīng)產(chǎn)生不同的題目。 四,職位功能:此功能是定義游戲進(jìn)度的一個(gè)標(biāo)準(zhǔn),在后臺(tái)定義玩家初始分?jǐn)?shù)統(tǒng)一為0,之后通過測(cè)試功能改變自己
19、的分?jǐn)?shù)值,獲得不同的職位,之后解鎖新的功能。低于初始分?jǐn)?shù)則判斷為游戲失敗,結(jié)束游戲。 3.4 本章小結(jié) 從寵物模擬醫(yī)院的功能需求上進(jìn)行分析,決定了游戲的四大功能模塊。在分析中確定了游戲的主要玩法以及實(shí)現(xiàn)功能模塊用到的方法。結(jié)合三部分內(nèi)容得到了本文所研究的游戲的總體方案設(shè)計(jì)。 第4章 游戲設(shè)計(jì)與實(shí)現(xiàn) 4.1 場(chǎng)景設(shè)計(jì) 游戲主要由兩個(gè)場(chǎng)景組成,一是游戲開始界面,二是游戲主場(chǎng)景,玩家主要在主場(chǎng)景內(nèi)體驗(yàn)游戲。場(chǎng)景主要利用Ngui插件、ProBuilder插件和ProGrids插件來完成制作。 4.1.1 安裝ProBuilder插件與ProGrids插件 打開Unity,點(diǎn)擊Window
20、-->Package Manager,找到Probuilder與ProGrids,點(diǎn)擊Install下載即可,如圖3-1所示。 圖3-1 Probuilder與ProGrids插件安裝 4.1.2 配置人物動(dòng)畫 將人物模型chan拖入場(chǎng)景中,創(chuàng)建一個(gè)新的animator命名為player controller并雙擊打開動(dòng)畫窗口,將動(dòng)畫wait與walk拖入Base Layer窗口并連接至圖3-2所示。 圖3-2 動(dòng)畫配置 為了避免人物動(dòng)作需要播放完后才能切換新的動(dòng)作,需要點(diǎn)擊圖3-2白色箭頭,然后在Inspector窗口找到Has Exit Time,將勾選取消即可。如圖3-
21、3所示。 圖3-3 為后續(xù)控制人物移動(dòng)與站立兩種狀態(tài)下的動(dòng)畫切換,需在Parameters里添加兩個(gè)bool類型的變量,分別命名為wait和walk。 4.1.3 人物移動(dòng)實(shí)現(xiàn) 給人物模型分別添加Animator、Rigidbody與Capsule Collider組件。為防止人物長(zhǎng)時(shí)間不動(dòng)后會(huì)倒在地上,需鎖定人物模型在x軸與z軸的旋轉(zhuǎn),在Rigidbody里找到Freeze Rotation,將x軸與z軸勾選上即可鎖定。 接著在模型下面添加一個(gè)新的腳本命名為player。因?yàn)槿宋镆苿?dòng)需要每一幀都檢測(cè),因此將函數(shù)寫入void Update里。將人物移動(dòng)速度設(shè)置為public,方便
22、直接在unity界面中調(diào)整合適速度。 1. using?System.Collections;?? 2. using?System.Collections.Generic;?? 3. using?UnityEngine;?? 4. ?? 5. public?class?player?:?MonoBehaviour?? 6. {?? 7. ????public?float?speed?=?1f;?? 8. ?? 9. ????public?Animator?anime;?? 10. ?? 11. ????public?bool?wait;?? 12. ????public
23、?bool?walk;??
13. ??
14. ????void?Start()??
15. ????{??
16. ????????//獲取人物動(dòng)畫控件??
17. ????????anime?=?GetComponent
24、zontal?=?Input.GetAxis("Horizontal");?? 26. ????????float?vertical?=?Input.GetAxis("Vertical");?? 27. ????????Vector3?direction?=?new?Vector3(horizontal,?0,?vertical);?? 28. ?? 29. ????????if(direction?!=?Vector3.zero)?? 30. ????????{?? 31. ????????????change();?? 32. ????????????walk?=?true;
25、?? 33. ????????????//角色旋轉(zhuǎn)至指定方向?? 34. ????????????transform.rotation?=?Quaternion.LookRotation(direction);?? 35. ????????????//角色移動(dòng)?? 36. ????????????transform.Translate(Vector3.forward?*?speed?*?Time.deltaTime);?? 37. ????????}?? 38. ??????????else?? 39. ??????????{?? 40. ????????????change(
26、);?? 41. ?????????????wait=true?;?? 42. ??????????}?? 43. ????????anime.SetBool("walk",?walk);?? 44. ????????anime.SetBool("wait",?wait);?? 45. ??????}?? 46. ?? 47. ????//避免出現(xiàn)特殊情況,全部設(shè)置為false?? 48. ?void?change()?? 49. ????{?? 50. ????????wait?=?false;?? 51. ????????walk?=?false;?? 52. ??
27、??}?? 53. }? 經(jīng)過調(diào)試,當(dāng)人物移動(dòng)速度為2.5f時(shí)較為合適。 4.1.4 設(shè)置相機(jī)跟隨人物移動(dòng) 相機(jī)跟隨人物移動(dòng)是游戲內(nèi)必不可少的一部分,雖然直接將相機(jī)拖入到人物中也可以實(shí)現(xiàn)相機(jī)跟隨,但會(huì)因?yàn)槿宋锊粩喔淖兎较蚴瓜鄼C(jī)不斷抖動(dòng)造成視覺效果不佳,因此需要在相機(jī)里添加一個(gè)腳本來控制相機(jī)跟隨人物移動(dòng)。 1. public?class?camerafollow?:?MonoBehaviour?? 2. {?? 3. ????public?Transform?target;?? 4. ?? 5. ????public?Vector3?offset;?? 6. ?? 7. ?
28、?void?LateUpdate()?? 8. ????{?? 9. ????????transform.position?=?target.position+offset;?? 10. ????}?? 11. } 將需要被跟隨的人物拖入至target中,點(diǎn)擊游戲播放,調(diào)整offset的值,使相機(jī)可以看到完整人物。 4.1.5 場(chǎng)景搭建 利用ProBuilder與ProGirds插件,快速制作出學(xué)習(xí)用書柜、前臺(tái)、醫(yī)生辦公室、等候室、寵物住院區(qū),并將物體擺放好構(gòu)建一個(gè)簡(jiǎn)易的寵物醫(yī)院。游戲內(nèi)還需要?jiǎng)?chuàng)建一個(gè)空對(duì)象命名為GameObject,用于存放大部分控制游戲功能實(shí)現(xiàn)的腳本 圖
29、3-4 簡(jiǎn)易寵物醫(yī)院 4.2 學(xué)習(xí)功能實(shí)現(xiàn) 學(xué)習(xí)功能是整個(gè)游戲流程的開始,玩家需要通過學(xué)習(xí)后才可以解鎖其他功能。學(xué)習(xí)功能同時(shí)也能給玩家科普寵物疾病知識(shí)。游戲中將以模擬電子書本的形式展現(xiàn) 。 4.2.1 學(xué)習(xí)功能的ui設(shè)計(jì) 安裝好Ngui插件后,上方開始欄會(huì)多出一個(gè)NGUI選項(xiàng),點(diǎn)擊NGUI-->Open-->Widget Wizard,創(chuàng)建一個(gè)新的UI界面,此時(shí)層級(jí)視圖窗口會(huì)多出一個(gè)UI Root,切換成2D界面,雙擊UI Root,開始編輯。 在Ngui中,由于插件內(nèi)只能識(shí)別Atlas內(nèi)的圖片,如需使用自己繪制的圖片,需要將所有非插件內(nèi)的圖片選中,右鍵-->NGUI-->Open
30、Atlas Maker,然后把所選圖片添加至新創(chuàng)建的Atlas,保存后即可使用。 Simple texture用于放置圖片,Lable用于編輯文字。Ngui提供了方便快捷的按鈕腳本,需要變?yōu)榘粹o的圖片或文字,只需在界面內(nèi)右鍵-->Attach內(nèi)添加box collider和button script就能實(shí)現(xiàn)按鈕功能。給按鈕額外添加button scale腳本,可以讓按鈕在鼠標(biāo)移入移出時(shí)有大小變化。 圖3-5 游戲內(nèi)學(xué)習(xí)目錄 圖3-6 游戲內(nèi)部分學(xué)習(xí)內(nèi)容 4.2.2 學(xué)習(xí)功能的事件觸發(fā)實(shí)現(xiàn) 為了模擬生活中生活中需要走到書架前才能拿到書本學(xué)習(xí),游戲內(nèi)設(shè)定人物碰到書柜后才能打開學(xué)習(xí)
31、功能。當(dāng)?shù)谝淮谓怄i學(xué)習(xí)功能之后,就可以不再需要跑到書柜面前觸碰才能學(xué)習(xí),游戲界面左下角會(huì)生成一個(gè)學(xué)習(xí)按鈕,點(diǎn)開后可直接查看。 因?yàn)樾枰宋镉|碰才能產(chǎn)生事件,所以需給書架添加box collider并設(shè)置合適大小。給書架加入腳本,使用OnCollisionEnter方法來實(shí)現(xiàn)。 1. public?class?study3Dbutton?:?MonoBehaviour?? 2. {?? 3. ????//獲取書本UI?? 4. ????public?TweenAlpha?dashuben;?? 5. ????//獲取游戲界面快捷學(xué)習(xí)按鈕?? 6. ????public?GameOb
32、ject?studybutton;?? 7. ?? 8. ????void?OnCollisionEnter(Collision?collision)?? 9. ????{?? 10. ????????Time.timeScale?=?0;?? 11. ????????dashuben.PlayForward();?? 12. ????????studybutton.SetActive(true);?? 13. ????}?? 14. } TweenAlpha是Ngui提供的一種能實(shí)現(xiàn)UI隱藏顯示的腳本,給附加了此類腳本的物體,之后把腳本取消勾選,將From的值設(shè)置為0,te
33、xture類還需要把NGUI Texture下的Color Tint設(shè)置成透明,設(shè)置完后就可以用PlayForward與PlayReverse來控制組件顯示與隱藏。 代碼中使用Time.timeScale方法來防止人物觸碰物體后還能繼續(xù)移動(dòng),不斷觸發(fā)打開UI頁面的問題。 4.2.3 學(xué)習(xí)內(nèi)容選擇與翻頁的功能實(shí)現(xiàn) 給所需控制顯示隱藏的UI添加TweenAlpha腳本。學(xué)習(xí)按鈕一開始處于未激活狀態(tài),因此需要在void start里設(shè)置。 1. public?class?bookUIClick?:?MonoBehaviour?? 2. {?? 3. ????//獲取整塊內(nèi)容組件?? 4
34、. ????public?GameObject?Q;?? 5. ?? 6. ????//獲取需控制的學(xué)習(xí)內(nèi)容?? 7. ????public?TweenAlpha?neirong;?? 8. ????public?TweenAlpha?mulu;?? 9. ????public?TweenAlpha?q1;?? 10. ????public?TweenAlpha?q2;?? 11. ????public?TweenAlpha?dashuben;?? 12. ?? 13. ????public?GameObject?studybutton;?? 14. ?? 15. ???
35、?void?Start()?? 16. ????{?? 17. ????????//初始學(xué)習(xí)UI處于隱藏狀態(tài)?? 18. ????????studybutton.SetActive(false);?? 19. ????}?? 20. ?? 21. ????//點(diǎn)擊打開書本?? 22. ????public?void?OnClickOpenBook()?? 23. ????{?? 24. ????????Time.timeScale?=?0;?? 25. ????????dashuben.PlayForward();?? 26. ????}?? 27. ?? 28. ?
36、???//關(guān)閉書本?? 29. ????????public?void?OnClickClose()?? 30. ????{?? 31. ????????dashuben.PlayReverse();?? 32. ????????Close();?? 33. ????????mulu.PlayForward();?? 34. ????????Time.timeScale?=?1;?? 35. ????}?? 36. ????//返回目錄?? 37. ????public?void?OnClickReturn()?? 38. ????{?? 39. ????????mulu
37、.PlayForward();?? 40. ????????Close();?? 41. ????}?? 42. ????//打開第一條知識(shí)?? 43. ????public?void?OnClickQ1()?? 44. ????{?? 45. ????????Open();?? 46. ????????ReturnOpen();?? 47. ????????GameObject?childQ1?=?Q.transform.Find("貓艾滋").gameObject;?? 48. ????????childQ1.SetActive(true);?? 49. ???????
38、?mulu.PlayReverse();?? 50. ????????q1.PlayForward();?? 51. ????}?? 52. ????//打開第二條知識(shí)?? 53. ????public?void?OnClickQ2()?? 54. ????{?? 55. ????????Open();?? 56. ????????ReturnOpen();?? 57. ????????GameObject?childQ2?=?Q.transform.Find("冠狀病毒").gameObject;?? 58. ????????childQ2.SetActive(true);
39、?? 59. ????????mulu.PlayReverse();?? 60. ????????q2.PlayForward();?? 61. ????}?? 62. ?????? 63. ????//打開內(nèi)容界面?? 64. ????void?Open()?? 65. ????{?? 66. ????????neirong.PlayForward();?? 67. ????}?? 68. ????//關(guān)閉內(nèi)容界面?? 69. ????void?Close()?? 70. ????{?? 71. ????????neirong.PlayReverse();?? 7
40、2. ????????? 73. ????????//防止返回后打開新的知識(shí)后有上次查看知識(shí)的文字殘影?? 74. ????????for?(int?i?=?0;?i?
41、??//顯示返回按鈕?? 82. ????void?ReturnOpen()?? 83. ????{?? 84. ????????GameObject?childReturn?=?Q.transform.Find("返回").gameObject;?? 85. ????????childReturn.SetActive(true);?? 86. ????}?? 87. }? 為了方便操作,每一塊知識(shí)都集合在同一個(gè)物體里面,使用GamObject.childReturn方法可以搜尋到物體下面的子物體。 4.3 職位功能設(shè)計(jì) 職位是判斷玩家游戲內(nèi)進(jìn)度的一部分,不同的職位可以解鎖不
42、同的功能。游戲內(nèi)一共設(shè)置了三個(gè)職位,分別是:“見習(xí)助理”、“見習(xí)醫(yī)生”和“院長(zhǎng)”。內(nèi)置分?jǐn)?shù)可以改變職位,主要通過答題測(cè)試來改變分?jǐn)?shù),若玩家分?jǐn)?shù)低于0則結(jié)束游戲;若玩家達(dá)到見習(xí)醫(yī)生則可以解鎖新功能。 4.4 答題測(cè)試功能實(shí)現(xiàn) 4.4.1 測(cè)試界面ui界面設(shè)計(jì) 與學(xué)習(xí)界面ui設(shè)計(jì)一樣使用Ngui插件實(shí)現(xiàn)。 圖3-7 部分測(cè)試題目界面 4.4.2 測(cè)試功能觸發(fā)條件實(shí)現(xiàn) 游戲內(nèi),在醫(yī)生辦公室中有一位npc,玩家需要通過解鎖學(xué)習(xí)功能后并尋找到醫(yī)生才能解鎖測(cè)試功能。游戲開始時(shí)如沒有解鎖學(xué)習(xí)功能,則會(huì)被拒絕進(jìn)入。解鎖學(xué)習(xí)功能后可以進(jìn)入辦公室,接觸到npc后會(huì)詢問是否開啟測(cè)試功能。需要用到兩個(gè)
43、collider來分別控制這兩個(gè)事件的發(fā)生,這兩個(gè)collider分別放在辦公室門前與辦公桌的位置。 圖3-8 兩個(gè)collider位置擺放 接著在UI界面制作兩個(gè)界面,一個(gè)用來提示玩家沒有解鎖學(xué)習(xí)功能,一個(gè)用來詢問是否開啟測(cè)試功能。如圖3-9所示。 圖3-9 npc提示 檢測(cè)玩家是否解鎖學(xué)習(xí)功能,若未解鎖彈出npc對(duì)話提示;若解鎖該功能后則銷毀此collider,功能實(shí)現(xiàn)具體代碼如下: 1. public?class?bangongshi?:?MonoBehaviour?? 2. {?? 3. ????public?TweenAlpha?tip1;?? 4. ????
44、public?GameObject?onoff;?? 5. ????public?GameObject?study;?? 6. ?? 7. ?? 8. void?Start()?? 9. ????{?? 10. ????????//游戲開始時(shí)不顯示提示?? 11. ????????tip1.PlayReverse();?? 12. ????}?? 13. ????void?OnCollisionEnter(Collision?collision)?? 14. ????{?? 15. ????????//判斷玩家是否解鎖了快捷學(xué)習(xí)按鈕?? 16. ????????if?(
45、study.activeInHierarchy)??? 17. ????????{?? 18. ????????????Destroy(onoff);?? 19. ????????}??else{?? 20. ????????????Time.timeScale?=?0;?? 21. ????????????tip1.PlayForward();?? 22. ????????}?? 23. ????}?? 24. }? 學(xué)習(xí)功能解鎖后玩家接觸npc則彈出詢問是否開啟測(cè)試對(duì)話框,若玩家開啟后則在3秒后在界面右下角彈出測(cè)試功能按鈕,延遲彈出測(cè)試按鈕利用Invock方法來實(shí)現(xiàn);若玩
46、家選擇不開啟,則消失對(duì)話框,無法解鎖游戲進(jìn)度,再次觸碰npc后再次解鎖對(duì)話。 1. public?class?say?:?MonoBehaviour?? 2. {?? 3. ????public?TweenAlpha?tip1;?? 4. ????public?TweenAlpha?tip2;?? 5. ????public?GameObject?testtip;?? 6. ????public?GameObject?Tbutton;?? 7. ?? 8. ????//開始游戲無法測(cè)試、學(xué)習(xí)按鈕需在游戲中激活?? 9. ????void?Start()?? 10. ????
47、{?? 11. ????????Tbutton.SetActive(false);?? 12. ????}?? 13. ?? 14. ????//玩家未解鎖學(xué)習(xí)功能時(shí),點(diǎn)擊關(guān)閉對(duì)話框?? 15. ????public?void?OnClickCloseTip()?? 16. ????{?? 17. ????????tip1.PlayReverse();?? 18. ????????Time.timeScale?=?1;?? 19. ????}?? 20. ?? 21. ????//點(diǎn)擊后延遲3秒后開啟測(cè)試按鈕并銷毀collider?? 22. ????public?vo
48、id?OnClickOpenTest()?? 23. ????{?? 24. ????????tip2.PlayReverse();?? 25. ????????Time.timeScale?=?1;?? 26. ????????Destroy(testtip);?? 27. ????????Invoke("Yanshi",?3f);?? 28. ????}?? 29. ????//點(diǎn)擊關(guān)閉對(duì)話框,不解鎖測(cè)試功能?? 30. ????public?void?OnClickCloseTip2()?? 31. ????{?? 32. ????????tip2.PlayRever
49、se();?? 33. ????????Time.timeScale?=?1;?? 34. ????}?? 35. ?? 36. ????//游戲界面顯示測(cè)試按鈕?? 37. ????void?Yanshi()?? 38. ????{?? 39. ????????Tbutton.SetActive(true);?? 40. ????}?? 41. }?? 4.4.3 測(cè)試功能設(shè)計(jì) 玩家在做測(cè)試題目的時(shí)候,題目是隨機(jī)抽取的,答對(duì)得分,答錯(cuò)則扣分,隨機(jī)可以抽取到相同的題目,可以鞏固玩家所學(xué)習(xí)的知識(shí)。這里可以采用Random.Range隨機(jī)方法來隨機(jī)生成一個(gè)數(shù),通過不同的數(shù)對(duì)應(yīng)
50、不同的題目來實(shí)現(xiàn)隨機(jī)出現(xiàn)題目功能。 為了防止玩家可以一直點(diǎn)擊測(cè)試答題來提早結(jié)束游戲,游戲內(nèi)的隨機(jī)里設(shè)置了空題的數(shù),既玩家點(diǎn)擊測(cè)試后隨機(jī)抽取的數(shù)中,有部分是會(huì)抽到?jīng)]有題目的測(cè)試。出現(xiàn)的題目點(diǎn)擊后就會(huì)消失,不管是否答題,答對(duì)或答錯(cuò),都會(huì)在關(guān)閉試題后一段時(shí)間內(nèi)不出現(xiàn)測(cè)試按鈕,這里則采用Invoke方法可以實(shí)現(xiàn)。 4.5 查看病例功能實(shí)現(xiàn) 查看病例是玩家另外一種獲得知識(shí)的途徑,與書本內(nèi)容不同,病例主要是為了模擬現(xiàn)實(shí)生活中,醫(yī)生所學(xué)到的知識(shí)結(jié)合寵物癥狀來判斷具體癥狀。 這個(gè)功能需要玩家達(dá)到“見習(xí)醫(yī)生”的條件后才可以解鎖,若中途玩家的分?jǐn)?shù)掉回“見習(xí)醫(yī)生”以下,則會(huì)暫時(shí)關(guān)閉此功能。游戲內(nèi)第一次達(dá)到“
51、見習(xí)醫(yī)生”后會(huì)給出提示,之后再次達(dá)到此條件則無提示。 4.5.1 病例ui設(shè)計(jì) 游戲內(nèi)病例UI設(shè)計(jì)與測(cè)試UI設(shè)計(jì)相同,只需利用Ngui搭建完即可。 圖3-10 未達(dá)到解鎖功能條件提示 4.5.2 觸發(fā)病例條件設(shè)計(jì) 游戲內(nèi)如果玩家沒有達(dá)到相應(yīng)條件,觸碰到NPC后,則會(huì)彈出“你還不是見習(xí)醫(yī)生,請(qǐng)學(xué)習(xí)做題提高分?jǐn)?shù)”提示,條件滿足后直接顯示病例UI,因此需要?jiǎng)?chuàng)建兩個(gè)空對(duì)象,添加collider后來控制兩個(gè)不同條件的顯示。 游戲內(nèi)需要判斷玩家是否達(dá)到條件以及是否第一次解鎖病例功能,因此我們還需要兩個(gè)額外的空對(duì)象,一個(gè)負(fù)責(zé)檢測(cè)返家是否達(dá)到條件,若達(dá)成,則在場(chǎng)景內(nèi)顯示可彈出病例UI的coll
52、ider,若未達(dá)成則在場(chǎng)景內(nèi)顯示未達(dá)成條件的collider。這部分代碼需要寫在控制分?jǐn)?shù)的腳本內(nèi)實(shí)現(xiàn),具體實(shí)現(xiàn)代碼會(huì)在下一節(jié)展示。 4.6 游戲內(nèi)分?jǐn)?shù)系統(tǒng)實(shí)現(xiàn) 游戲內(nèi)分?jǐn)?shù)是控制游戲進(jìn)度的核心,通過分?jǐn)?shù)來獲取不同職位,分?jǐn)?shù)達(dá)到一定值可以結(jié)束游戲,同時(shí)分?jǐn)?shù)也控制著玩家是否能夠解鎖其他功能。只有答題可以改變分?jǐn)?shù)值,利用隨機(jī)函數(shù)出題,玩家答題答錯(cuò)則扣除一分,答對(duì)則獲得一分。以下是實(shí)現(xiàn)隨機(jī)出題與玩家答題后改變分?jǐn)?shù)的代碼: 1. public?class?ceshi?:?MonoBehaviour?? 2. {?? 3. ????//定義隨機(jī)數(shù)與總分?? 4. ????int?num;??
53、5. ????int?newNum;?? 6. ????int?zongfen;?? 7. ?? 8. ????public?GameObject?T;?? 9. ????public?GameObject?Tbutton;?? 10. ?? 11. ????public?TweenAlpha?test;?? 12. ????public?TweenAlpha?test1;?? 13. ????public?TweenAlpha?test2;?? 14. ????public?TweenAlpha?test3;?? 15. ?? 16. ????public?TweenA
54、lpha?NULL;?? 17. ?? 18. ????public?GameObject?wrong;?? 19. ????public?GameObject?right;?? 20. ?? 21. ????//隨機(jī)生成數(shù)字,產(chǎn)生隨機(jī)題目?? 22. ????void?suiji()?? 23. {?? 24. ???????num?=?Random.Range(1,?5);?? 25. ????????newNum?=?num;?? 26. ????????//用于后臺(tái)觀察隨機(jī)數(shù)?? 27. ????????print("數(shù):"?+?newNum);?? 28. ?
55、?}?? 29. ?? 30. ????//點(diǎn)擊打開測(cè)試?? 31. ????public?void?OnClickOpenTest()?? 32. ????{?? 33. ????????Time.timeScale?=?0;?? 34. ????????suiji();?? 35. ????????closetest();?? 36. ????????openReturn();?? 37. ?????????? 38. ????????//根據(jù)隨機(jī)的數(shù)字決定給玩家展示出題目?? 39. ????????if?(newNum?==?3)?? 40. ????????{
56、?? 41. ????????????opentest();?? 42. ????????????GameObject?childTest3?=?T.transform.Find("試題3").gameObject;?? 43. ????????????childTest3.SetActive(true);?? 44. ????????????test3.PlayForward();?? 45. ????????}else?if?(newNum?==?2)?? 46. ????????{?? 47. ????????????opentest();?? 48. ?????????
57、???GameObject?childTest2?=?T.transform.Find("試題2").gameObject;?? 49. ????????????childTest2.SetActive(true);?? 50. ????????????test2.PlayForward();?? 51. ????????}else?if?(newNum?==?1)?? 52. ????????{?? 53. ????????????opentest();?? 54. ????????????GameObject?childTest1?=?T.transform.Find("試題1
58、").gameObject;?? 55. ????????????childTest1.SetActive(true);?? 56. ????????????test1.PlayForward();?? 57. ????????}?? 58. ????????else?? 59. ????????{?? 60. ????????????opentest();?? 61. ????????????GameObject?childNull?=?T.transform.Find("暫無試題").gameObject;?? 62. ????????????childNull.SetAc
59、tive(true);?? 63. ????????????NULL.PlayForward();?? 64. ????????}?? 65. ????????Time.timeScale?=?0;?? 66. ????}?? 67. ?? 68. ????//點(diǎn)擊關(guān)閉測(cè)試,并更新分?jǐn)?shù)(更新分?jǐn)?shù)函數(shù)在腳本touxian里)?? 69. ????public?void?OnClickCloseTest()?? 70. ????{?? 71. ????????close();?? 72. ????????Time.timeScale?=?1;?? 73. ????????cl
60、osetest();?? 74. ????????GameObject.Find("GameObject").SendMessage("UpdateTouxian");?? 75. ????????Tbutton.SetActive(false);?? 76. ????????Invoke("Yanshi",?20f);?? 77. ????}?? 78. ?? 79. ????//返回按鈕顯現(xiàn)?? 80. ????void?openReturn()?? 81. ????{?? 82. ????????GameObject?childReturn?=?T.transform.
61、Find("返回").gameObject;?? 83. ????????childReturn.SetActive(true);?? 84. ????}?? 85. ?? 86. ????void?opentest()?? 87. ????{?? 88. ????????test.PlayForward();?? 89. ????}?? 90. ?????? 91. ????//關(guān)閉測(cè)試并隱藏所有測(cè)試有關(guān)的父子組件?? 92. ????void?closetest()?? 93. ????{?? 94. ????????test.PlayReverse();?? 9
62、5. ????????for?(int?i?=?0;?i?
63、. ????{?? 105. ????????wrong.SetActive(false);?? 106. ????????right.SetActive(false);?? 107. ????}?? 108. ????void?Yanshi()?? 109. ????{?? 110. ????????Tbutton.SetActive(true);?? 111. ????}?? 112. } 職位改變判斷條件、獲得“見習(xí)醫(yī)生”稱號(hào)后解鎖查看病例條件、判斷玩家是否第一次解鎖新功能與游戲失敗、勝利條件的實(shí)現(xiàn)代碼如下: 1. public?class?touxian?:?Mon
64、oBehaviour?? 2. {?? 3. ????public?GameObject?wrong;?? 4. ????public?GameObject?right;?? 5. ????public?GameObject?fenshupanduan;?? 6. ????public?GameObject?kanbing1;//解鎖看病例功能?? 7. ????public?GameObject?kanbing2;//關(guān)閉看病例功能?? 8. ?? 9. ????public?TweenAlpha?a;?? 10. ????public?TweenAlpha?b;?? 1
65、1. ????public?TweenAlpha?c;?? 12. ????public?TweenAlpha?lose;?? 13. ????public?TweenAlpha?win;?? 14. ????public?TweenAlpha?tip3;?? 15. ?? 16. ???public??GameObject?tishi3;?? 17. ?? 18. //為方便修改獲得不同職位的分?jǐn)?shù),將變量定義成public?? 19. ???public??int?Zongfen?=?0;?? 20. ????public?int?Afen?=?2;?? 21. ????
66、public?int?Bfen?=?3;?? 22. ????public?int?Cfen?=?5;?? 23. ?? 24. ????void?Start()?? 25. ????{?? 26. ????????Debug.Log("分?jǐn)?shù):"?+?Zongfen);?? 27. ????????wrong.SetActive(false);?? 28. ????????right.SetActive(false);?? 29. ????????tishi3.SetActive(true);?? 30. ????????fenshupanduan.SetActive(true);?? 31. ????????kanbing1.SetActive(false);?? 32. ????????kanbing2.SetActive(false);?? 33. ????????UpdateTouxian();?? 34. ????}?? 35. ?? 36. ????//題目答對(duì)加一分后更新總分?jǐn)?shù)?? 37. ????public?void?OnClickRi
- 溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 6.煤礦安全生產(chǎn)科普知識(shí)競(jìng)賽題含答案
- 2.煤礦爆破工技能鑒定試題含答案
- 3.爆破工培訓(xùn)考試試題含答案
- 2.煤礦安全監(jiān)察人員模擬考試題庫試卷含答案
- 3.金屬非金屬礦山安全管理人員(地下礦山)安全生產(chǎn)模擬考試題庫試卷含答案
- 4.煤礦特種作業(yè)人員井下電鉗工模擬考試題庫試卷含答案
- 1 煤礦安全生產(chǎn)及管理知識(shí)測(cè)試題庫及答案
- 2 各種煤礦安全考試試題含答案
- 1 煤礦安全檢查考試題
- 1 井下放炮員練習(xí)題含答案
- 2煤礦安全監(jiān)測(cè)工種技術(shù)比武題庫含解析
- 1 礦山應(yīng)急救援安全知識(shí)競(jìng)賽試題
- 1 礦井泵工考試練習(xí)題含答案
- 2煤礦爆破工考試復(fù)習(xí)題含答案
- 1 各種煤礦安全考試試題含答案