基于Unity3D的寵物醫(yī)院模擬游戲的設(shè)計與實現(xiàn)
《基于Unity3D的寵物醫(yī)院模擬游戲的設(shè)計與實現(xiàn)》由會員分享,可在線閱讀,更多相關(guān)《基于Unity3D的寵物醫(yī)院模擬游戲的設(shè)計與實現(xiàn)(40頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、 基于Unity3D的寵物醫(yī)院模擬游戲的設(shè)計與實現(xiàn) Design and Implementation of Pet Hospital Simulation Game Based on Unity3D 摘要 隨著生活水平的不斷提高與科技的發(fā)展,人們開始不滿足于物質(zhì)上的需求,飼養(yǎng)貓狗人數(shù)大幅度增長??稍陲曫B(yǎng)過程中難免會遇到各種各樣的問題。 當(dāng)今社會,玩游戲又成了人們的主要娛樂與消遣方式。模擬類科普游戲可以讓人們在消磨時間的同時學(xué)習(xí)到知識,雖然不能完全代替?zhèn)鹘y(tǒng)的正規(guī)教育,但仍然可以起到教
2、育的作用。 Unity3D作為一款既能開發(fā)2D又能3D游戲、且可部署到多個主流平臺內(nèi)的軟件,是一款被較多開發(fā)者使用的游戲開發(fā)引擎。而市面上暫時還沒有發(fā)現(xiàn)有關(guān)科普寵物疾病類的游戲,本論文研究寵物醫(yī)院模擬游戲開發(fā),不是單純?yōu)榱藠蕵?,更重要的是為了能夠給更多的人通過玩游戲了解到寵物疾病相關(guān)知識。本文主要描述了利用Ngui插件對游戲的流程設(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è)計 3 3.4 本章小結(jié) 4 第4章 游戲設(shè)計與實現(xiàn) 5 4.1 場景設(shè)計 5 4.1.1 安裝ProBuilder插件與ProGrids插件 5 4.1.2 配置人物動畫 5 4.1.3 人物移動實現(xiàn) 6 4.1.4 設(shè)置相機跟隨人物移動 8 4.1.5 場景搭建 8 4.2 學(xué)習(xí)功能
8、實現(xiàn) 9 4.2.1 學(xué)習(xí)功能的ui設(shè)計 9 4.2.2 學(xué)習(xí)功能的事件觸發(fā)實現(xiàn) 10 4.2.3 學(xué)習(xí)內(nèi)容選擇與翻頁的功能實現(xiàn) 11 4.3 職位功能設(shè)計 13 4.4 答題測試功能實現(xiàn) 14 4.4.1 測試界面ui界面設(shè)計 14 4.4.2 測試功能觸發(fā)條件實現(xiàn) 14 4.4.3 測試功能設(shè)計 17 4.5 查看病例功能實現(xiàn) 17 4.5.1 病例ui設(shè)計 18 4.5.2 觸發(fā)病例條件設(shè)計 18 4.6 游戲內(nèi)分?jǐn)?shù)系統(tǒng)實現(xiàn) 18 第5章 游戲開始界面設(shè)計 25 5.1 游戲開始界面設(shè)計 25 5.2 開始界面按鈕代碼實現(xiàn) 25 5.3 游戲整合與導(dǎo)出 2
9、6 第6章 游戲測試 28 第7章 總結(jié) 33 參 考 文 獻(xiàn) 34 致謝 35 廣東東軟學(xué)院本科畢業(yè)設(shè)計(論文) 第1章 緒論 1.1 選題的目的和意義 寵物,就像我們的親人、伙伴一樣,有一只寵物陪伴在身邊,可以緩解人們的孤獨感、寂寞感。隨著人們物質(zhì)生活水品的不斷提高,越來越多的人開始飼養(yǎng)起了寵物。然而,寵物跟人類一樣,也有各種各樣的疾病發(fā)生,但治療方案卻跟人類完全不同,而許多寵物飼養(yǎng)人員并不能很清楚地了解寵物疾病給寵物帶來地危害,也不了解如何預(yù)防疾病,讓許多寵物就此喪失生命,同時也給飼主帶來精神上的痛苦。 當(dāng)今社會,玩游戲成了人們的主要娛樂與消
10、遣方式。而如今,游戲已經(jīng)不再屬于玩物喪志的范疇,模擬類科普游戲可以讓人們在消磨時間的同時學(xué)習(xí)到知識,雖然不能完全代替?zhèn)鹘y(tǒng)的正規(guī)教育,但仍然可以起到教育的作用,可謂放松與學(xué)習(xí)兩不誤。 本選題的研究目的是為了讓人們能夠在游戲中更容易更方便地了解到寵物疾病知識,以測試的形式來鞏固人們對寵物健康知識的記憶,從而更好的照顧自家的寵物,讓自家寵物遠(yuǎn)離病痛。 1.2 國內(nèi)外研究現(xiàn)狀 目前國內(nèi)在科普寵物疾病方面有嗶哩嗶哩出品的首檔醫(yī)療觀察類真人秀《寵物醫(yī)院》,此節(jié)目有科普一些常見的疾病預(yù)防等。在游戲方面是娛樂休閑游戲,不具備知識傳播功能,還有一些是針對人類疾病而設(shè)定的,而在國外的《模擬人生》系列的游戲
11、中,雖有寵物醫(yī)院的設(shè)定,但只能讓玩家去簡單的經(jīng)營,而不能讓玩家學(xué)習(xí)到有關(guān)寵物疾病的相關(guān)知識。因此研究一款寵物醫(yī)院模擬科普類游戲是很有必要的。 1.3 論文結(jié)構(gòu)概述 本文主要分為六個部分: 第一部分:緒論,主要闡述畢業(yè)設(shè)計選題的目的與研究意義、國內(nèi)外研究現(xiàn)狀以及本文的結(jié)構(gòu)介紹; 第二部分:介紹了開發(fā)游戲所用到的工具與插件介紹; 第三部分:詳細(xì)描述了游戲內(nèi)的需求與設(shè)計; 第四部分:詳細(xì)描述了游戲內(nèi)各個功能的制作與實現(xiàn); 第五部分:游戲的UI界面設(shè)計、描述游戲的整合與導(dǎo)出并進行測試; 第六部分:總結(jié)游戲內(nèi)的不足與今后的改進。 36 第2章 開發(fā)工具介紹 2.1 U
12、nity3D介紹 Unity3D是一款由Unity Technologies所研發(fā)的跨平臺2D/3D游戲引擎,開發(fā)的游戲可以部署到多個主流平臺,如常見的:Windows、MacOS、Android與iOS。除游戲開發(fā)外還可以實現(xiàn)視頻制作,其對模型資源的兼容性高,多個主流建模軟件生成的模型均可以在Unity3D中完美導(dǎo)入,并可以在原模型修改后自動更新。 Unity3D給用戶提供了可視化操作界面,利用內(nèi)置插件,可以讓新手短時間內(nèi)熟悉并開發(fā)出游戲原型。 Unity3D主要支持三種語言:C#、UnityScript(多被稱為“Javascript”)和BOO。Unity2017.2測試版后的版本
13、在新建中已經(jīng)不再包含Javascript選項,但仍然支持使用,需在Unity編輯器外創(chuàng)建再導(dǎo)入。 2.2 ProBuilder插件介紹 ProBuilder插件是一款Unity2018.1版本以上自帶的官方建模插件,Unity2017.x版本可以直接在Asset Store下載使用。此插件是3D建模和關(guān)卡設(shè)計工具的獨特組合,為構(gòu)建簡單的幾何體進行了操作優(yōu)化處理,但也可以進行詳細(xì)的編輯和UV展開。使用ProBuilder可以快速構(gòu)建結(jié)構(gòu)復(fù)雜的地形、車輪和武器的原型,或制作自定義碰撞幾何體。主要特點有:動態(tài)用戶界面、擠出插入功能、建立多邊形功能、多種規(guī)則形狀和著色等。 2.3 ProGrid
14、s插件介紹 ProGrids插件可以為我們提供視覺和功能上的網(wǎng)格,它們可以使所有操作都在三個軸上對齊。Probuilder結(jié)合ProGrids使用可以提高建模速度,使構(gòu)建的幾何體構(gòu)造更為精準(zhǔn)。 2.4 Ngui插件介紹 Ngui是一個功能強大的UI系統(tǒng)和Unity的事件通知框架,均使用C#編寫,并嚴(yán)格遵循KISS原則。它具有簡潔的代碼和極簡的方法。許多behaviour類都保持在兩百行代碼以下。該插件全面支持ios、Android、Blackberry、win8、wp8、flash。使用Ngui就像使用Unity,將現(xiàn)成的控件(例如按鈕,復(fù)選框,滾動條和其他控件)拖放到場景視圖中,或者使
15、用類似于Lego的方法制作自己的控件。將控件另存為預(yù)設(shè)體,即可在任何地方重復(fù)使用。 第3章 游戲需求分析 3.1 科普類游戲的需求分析 隨著科學(xué)教育類電子游戲的發(fā)展以及教育理念的日新月異,科學(xué)教育類電子游戲已經(jīng)被視為科學(xué)教育的一個非主流的形式[8]。在如今電子游戲行業(yè)迅速的發(fā)展的時代下,科普類游戲較于一般游戲來講,其主要以普及科學(xué)知識為主,娛樂為次,在家長眼里不會被認(rèn)為是玩物喪志的游戲,得到了廣大家長們的認(rèn)可,游戲不局限于青少年,不同年齡層次的用戶均能體驗游戲。 3.2 游戲功能需求分析 目前飼養(yǎng)寵物陪伴自己生活的人越來越多,功課有時候做的不夠到位,寵物發(fā)生狀況時不正當(dāng)?shù)奶幚?/p>
16、方式導(dǎo)致問題更為嚴(yán)重。游戲內(nèi)最主要的是給人們普及疾病相關(guān)知識與處理知識。 因此寵物醫(yī)院模擬游戲較為重要的功能有以下幾個: 第一,游戲內(nèi)玩家將模擬剛畢業(yè)到寵物醫(yī)院工作的見習(xí)助理,根據(jù)自己的能力不斷成長,提升自己的職位。 第二,學(xué)習(xí)功能。玩家主要通過學(xué)習(xí)功能來獲取寵物疾病的理論知識,也僅限于理論知識,模擬現(xiàn)實生活中醫(yī)生需要在空閑時間額外看書學(xué)習(xí)的行為。 第三,測試功能。這個功能是模擬醫(yī)院內(nèi)的考核制度。主要考察書本內(nèi)的理論知識。為了能夠重復(fù)玩家的記憶,答卷采用隨機出題的形式展示,通過隨機來出現(xiàn)重復(fù)的題目,鞏固玩家在游戲內(nèi)學(xué)到的知識。 第四,查看實際病例功能。病例功能主要是讓玩家學(xué)習(xí)到除了書
17、本理論知識外的知識內(nèi)容。主要記錄寵物真實病情案例,病情診斷條件與治療方案。 3.3 游戲玩法設(shè)計 從功能模塊方面可以決定游戲的玩法,玩家通過控制人物移動觸碰場景內(nèi)的物體,根據(jù)提示解鎖不同的功能,解鎖測試功能后,則根據(jù)測試的分?jǐn)?shù)判斷是否具備解鎖查看實際病例的功能。判斷游戲結(jié)束的標(biāo)準(zhǔn)有兩個,一個是低于初始分,判定為失?。灰粋€是高于設(shè)定的值(可修改),判定為游戲通關(guān)。具體的方法實現(xiàn)設(shè)計如下: 一,人物移動以及移動動畫實現(xiàn)功能:利用Unity自帶方法來監(jiān)聽玩家對鍵盤的操作,從而控制人物移動;利用Animator控制器,根據(jù)游戲內(nèi)判斷人物是否移動,從而改變動作的布爾值來改變?nèi)宋锊煌膭赢嫴シ拧?
18、二,學(xué)習(xí)功能:學(xué)習(xí)功能主要利用Ngui插件來完成界面,通過使用插件內(nèi)自帶的TweenAlpha腳本實現(xiàn)UI界面的動態(tài)效果,利用PlayForward方法控制UI顯示,利用PlayReverse方法控制UI的隱藏。 三,測試功能:首先利用SetActive控制測試功能解鎖的開關(guān)是否在場景內(nèi)顯示,利用activeInHierarchy判斷開關(guān)是否存在于場景內(nèi),若存在則開啟測試功能;測試題目則用Random.Range隨機方法,在自定義的范圍內(nèi)隨機生成一個整數(shù),不同的數(shù)字將對應(yīng)產(chǎn)生不同的題目。 四,職位功能:此功能是定義游戲進度的一個標(biāo)準(zhǔn),在后臺定義玩家初始分?jǐn)?shù)統(tǒng)一為0,之后通過測試功能改變自己
19、的分?jǐn)?shù)值,獲得不同的職位,之后解鎖新的功能。低于初始分?jǐn)?shù)則判斷為游戲失敗,結(jié)束游戲。 3.4 本章小結(jié) 從寵物模擬醫(yī)院的功能需求上進行分析,決定了游戲的四大功能模塊。在分析中確定了游戲的主要玩法以及實現(xiàn)功能模塊用到的方法。結(jié)合三部分內(nèi)容得到了本文所研究的游戲的總體方案設(shè)計。 第4章 游戲設(shè)計與實現(xiàn) 4.1 場景設(shè)計 游戲主要由兩個場景組成,一是游戲開始界面,二是游戲主場景,玩家主要在主場景內(nèi)體驗游戲。場景主要利用Ngui插件、ProBuilder插件和ProGrids插件來完成制作。 4.1.1 安裝ProBuilder插件與ProGrids插件 打開Unity,點擊Window
20、-->Package Manager,找到Probuilder與ProGrids,點擊Install下載即可,如圖3-1所示。 圖3-1 Probuilder與ProGrids插件安裝 4.1.2 配置人物動畫 將人物模型chan拖入場景中,創(chuàng)建一個新的animator命名為player controller并雙擊打開動畫窗口,將動畫wait與walk拖入Base Layer窗口并連接至圖3-2所示。 圖3-2 動畫配置 為了避免人物動作需要播放完后才能切換新的動作,需要點擊圖3-2白色箭頭,然后在Inspector窗口找到Has Exit Time,將勾選取消即可。如圖3-
21、3所示。 圖3-3 為后續(xù)控制人物移動與站立兩種狀態(tài)下的動畫切換,需在Parameters里添加兩個bool類型的變量,分別命名為wait和walk。 4.1.3 人物移動實現(xiàn) 給人物模型分別添加Animator、Rigidbody與Capsule Collider組件。為防止人物長時間不動后會倒在地上,需鎖定人物模型在x軸與z軸的旋轉(zhuǎn),在Rigidbody里找到Freeze Rotation,將x軸與z軸勾選上即可鎖定。 接著在模型下面添加一個新的腳本命名為player。因為人物移動需要每一幀都檢測,因此將函數(shù)寫入void Update里。將人物移動速度設(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. ????????//獲取人物動畫控件??
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. ????????????//角色移動?? 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)人物移動速度為2.5f時較為合適。 4.1.4 設(shè)置相機跟隨人物移動 相機跟隨人物移動是游戲內(nèi)必不可少的一部分,雖然直接將相機拖入到人物中也可以實現(xiàn)相機跟隨,但會因為人物不斷改變方向使相機不斷抖動造成視覺效果不佳,因此需要在相機里添加一個腳本來控制相機跟隨人物移動。 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ào)整offset的值,使相機可以看到完整人物。 4.1.5 場景搭建 利用ProBuilder與ProGirds插件,快速制作出學(xué)習(xí)用書柜、前臺、醫(yī)生辦公室、等候室、寵物住院區(qū),并將物體擺放好構(gòu)建一個簡易的寵物醫(yī)院。游戲內(nèi)還需要創(chuàng)建一個空對象命名為GameObject,用于存放大部分控制游戲功能實現(xiàn)的腳本 圖
29、3-4 簡易寵物醫(yī)院 4.2 學(xué)習(xí)功能實現(xiàn) 學(xué)習(xí)功能是整個游戲流程的開始,玩家需要通過學(xué)習(xí)后才可以解鎖其他功能。學(xué)習(xí)功能同時也能給玩家科普寵物疾病知識。游戲中將以模擬電子書本的形式展現(xiàn) 。 4.2.1 學(xué)習(xí)功能的ui設(shè)計 安裝好Ngui插件后,上方開始欄會多出一個NGUI選項,點擊NGUI-->Open-->Widget Wizard,創(chuàng)建一個新的UI界面,此時層級視圖窗口會多出一個UI Root,切換成2D界面,雙擊UI Root,開始編輯。 在Ngui中,由于插件內(nèi)只能識別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就能實現(xiàn)按鈕功能。給按鈕額外添加button scale腳本,可以讓按鈕在鼠標(biāo)移入移出時有大小變化。 圖3-5 游戲內(nèi)學(xué)習(xí)目錄 圖3-6 游戲內(nèi)部分學(xué)習(xí)內(nèi)容 4.2.2 學(xué)習(xí)功能的事件觸發(fā)實現(xiàn) 為了模擬生活中生活中需要走到書架前才能拿到書本學(xué)習(xí),游戲內(nèi)設(shè)定人物碰到書柜后才能打開學(xué)習(xí)
31、功能。當(dāng)?shù)谝淮谓怄i學(xué)習(xí)功能之后,就可以不再需要跑到書柜面前觸碰才能學(xué)習(xí),游戲界面左下角會生成一個學(xué)習(xí)按鈕,點開后可直接查看。 因為需要人物觸碰才能產(chǎn)生事件,所以需給書架添加box collider并設(shè)置合適大小。給書架加入腳本,使用OnCollisionEnter方法來實現(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提供的一種能實現(xiàn)UI隱藏顯示的腳本,給附加了此類腳本的物體,之后把腳本取消勾選,將From的值設(shè)置為0,te
33、xture類還需要把NGUI Texture下的Color Tint設(shè)置成透明,設(shè)置完后就可以用PlayForward與PlayReverse來控制組件顯示與隱藏。 代碼中使用Time.timeScale方法來防止人物觸碰物體后還能繼續(xù)移動,不斷觸發(fā)打開UI頁面的問題。 4.2.3 學(xué)習(xí)內(nèi)容選擇與翻頁的功能實現(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. ????//點擊打開書本?? 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. ????//打開第一條知識?? 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. ????//打開第二條知識?? 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. ????????//防止返回后打開新的知識后有上次查看知識的文字殘影?? 74. ????????for?(int?i?=?0;?i?
41、??//顯示返回按鈕?? 82. ????void?ReturnOpen()?? 83. ????{?? 84. ????????GameObject?childReturn?=?Q.transform.Find("返回").gameObject;?? 85. ????????childReturn.SetActive(true);?? 86. ????}?? 87. }? 為了方便操作,每一塊知識都集合在同一個物體里面,使用GamObject.childReturn方法可以搜尋到物體下面的子物體。 4.3 職位功能設(shè)計 職位是判斷玩家游戲內(nèi)進度的一部分,不同的職位可以解鎖不
42、同的功能。游戲內(nèi)一共設(shè)置了三個職位,分別是:“見習(xí)助理”、“見習(xí)醫(yī)生”和“院長”。內(nèi)置分?jǐn)?shù)可以改變職位,主要通過答題測試來改變分?jǐn)?shù),若玩家分?jǐn)?shù)低于0則結(jié)束游戲;若玩家達(dá)到見習(xí)醫(yī)生則可以解鎖新功能。 4.4 答題測試功能實現(xiàn) 4.4.1 測試界面ui界面設(shè)計 與學(xué)習(xí)界面ui設(shè)計一樣使用Ngui插件實現(xiàn)。 圖3-7 部分測試題目界面 4.4.2 測試功能觸發(fā)條件實現(xiàn) 游戲內(nèi),在醫(yī)生辦公室中有一位npc,玩家需要通過解鎖學(xué)習(xí)功能后并尋找到醫(yī)生才能解鎖測試功能。游戲開始時如沒有解鎖學(xué)習(xí)功能,則會被拒絕進入。解鎖學(xué)習(xí)功能后可以進入辦公室,接觸到npc后會詢問是否開啟測試功能。需要用到兩個
43、collider來分別控制這兩個事件的發(fā)生,這兩個collider分別放在辦公室門前與辦公桌的位置。 圖3-8 兩個collider位置擺放 接著在UI界面制作兩個界面,一個用來提示玩家沒有解鎖學(xué)習(xí)功能,一個用來詢問是否開啟測試功能。如圖3-9所示。 圖3-9 npc提示 檢測玩家是否解鎖學(xué)習(xí)功能,若未解鎖彈出npc對話提示;若解鎖該功能后則銷毀此collider,功能實現(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. ????????//游戲開始時不顯示提示?? 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則彈出詢問是否開啟測試對話框,若玩家開啟后則在3秒后在界面右下角彈出測試功能按鈕,延遲彈出測試按鈕利用Invock方法來實現(xiàn);若玩
46、家選擇不開啟,則消失對話框,無法解鎖游戲進度,再次觸碰npc后再次解鎖對話。 1. public?class?say?:?MonoBehaviour?? 2. {?? 3. ????public?TweenAlpha?tip1;?? 4. ????public?TweenAlpha?tip2;?? 5. ????public?GameObject?testtip;?? 6. ????public?GameObject?Tbutton;?? 7. ?? 8. ????//開始游戲無法測試、學(xué)習(xí)按鈕需在游戲中激活?? 9. ????void?Start()?? 10. ????
47、{?? 11. ????????Tbutton.SetActive(false);?? 12. ????}?? 13. ?? 14. ????//玩家未解鎖學(xué)習(xí)功能時,點擊關(guān)閉對話框?? 15. ????public?void?OnClickCloseTip()?? 16. ????{?? 17. ????????tip1.PlayReverse();?? 18. ????????Time.timeScale?=?1;?? 19. ????}?? 20. ?? 21. ????//點擊后延遲3秒后開啟測試按鈕并銷毀collider?? 22. ????public?vo
48、id?OnClickOpenTest()?? 23. ????{?? 24. ????????tip2.PlayReverse();?? 25. ????????Time.timeScale?=?1;?? 26. ????????Destroy(testtip);?? 27. ????????Invoke("Yanshi",?3f);?? 28. ????}?? 29. ????//點擊關(guān)閉對話框,不解鎖測試功能?? 30. ????public?void?OnClickCloseTip2()?? 31. ????{?? 32. ????????tip2.PlayRever
49、se();?? 33. ????????Time.timeScale?=?1;?? 34. ????}?? 35. ?? 36. ????//游戲界面顯示測試按鈕?? 37. ????void?Yanshi()?? 38. ????{?? 39. ????????Tbutton.SetActive(true);?? 40. ????}?? 41. }?? 4.4.3 測試功能設(shè)計 玩家在做測試題目的時候,題目是隨機抽取的,答對得分,答錯則扣分,隨機可以抽取到相同的題目,可以鞏固玩家所學(xué)習(xí)的知識。這里可以采用Random.Range隨機方法來隨機生成一個數(shù),通過不同的數(shù)對應(yīng)
50、不同的題目來實現(xiàn)隨機出現(xiàn)題目功能。 為了防止玩家可以一直點擊測試答題來提早結(jié)束游戲,游戲內(nèi)的隨機里設(shè)置了空題的數(shù),既玩家點擊測試后隨機抽取的數(shù)中,有部分是會抽到?jīng)]有題目的測試。出現(xiàn)的題目點擊后就會消失,不管是否答題,答對或答錯,都會在關(guān)閉試題后一段時間內(nèi)不出現(xiàn)測試按鈕,這里則采用Invoke方法可以實現(xiàn)。 4.5 查看病例功能實現(xiàn) 查看病例是玩家另外一種獲得知識的途徑,與書本內(nèi)容不同,病例主要是為了模擬現(xiàn)實生活中,醫(yī)生所學(xué)到的知識結(jié)合寵物癥狀來判斷具體癥狀。 這個功能需要玩家達(dá)到“見習(xí)醫(yī)生”的條件后才可以解鎖,若中途玩家的分?jǐn)?shù)掉回“見習(xí)醫(yī)生”以下,則會暫時關(guān)閉此功能。游戲內(nèi)第一次達(dá)到“
51、見習(xí)醫(yī)生”后會給出提示,之后再次達(dá)到此條件則無提示。 4.5.1 病例ui設(shè)計 游戲內(nèi)病例UI設(shè)計與測試UI設(shè)計相同,只需利用Ngui搭建完即可。 圖3-10 未達(dá)到解鎖功能條件提示 4.5.2 觸發(fā)病例條件設(shè)計 游戲內(nèi)如果玩家沒有達(dá)到相應(yīng)條件,觸碰到NPC后,則會彈出“你還不是見習(xí)醫(yī)生,請學(xué)習(xí)做題提高分?jǐn)?shù)”提示,條件滿足后直接顯示病例UI,因此需要創(chuàng)建兩個空對象,添加collider后來控制兩個不同條件的顯示。 游戲內(nèi)需要判斷玩家是否達(dá)到條件以及是否第一次解鎖病例功能,因此我們還需要兩個額外的空對象,一個負(fù)責(zé)檢測返家是否達(dá)到條件,若達(dá)成,則在場景內(nèi)顯示可彈出病例UI的coll
52、ider,若未達(dá)成則在場景內(nèi)顯示未達(dá)成條件的collider。這部分代碼需要寫在控制分?jǐn)?shù)的腳本內(nèi)實現(xiàn),具體實現(xiàn)代碼會在下一節(jié)展示。 4.6 游戲內(nèi)分?jǐn)?shù)系統(tǒng)實現(xiàn) 游戲內(nèi)分?jǐn)?shù)是控制游戲進度的核心,通過分?jǐn)?shù)來獲取不同職位,分?jǐn)?shù)達(dá)到一定值可以結(jié)束游戲,同時分?jǐn)?shù)也控制著玩家是否能夠解鎖其他功能。只有答題可以改變分?jǐn)?shù)值,利用隨機函數(shù)出題,玩家答題答錯則扣除一分,答對則獲得一分。以下是實現(xiàn)隨機出題與玩家答題后改變分?jǐn)?shù)的代碼: 1. public?class?ceshi?:?MonoBehaviour?? 2. {?? 3. ????//定義隨機數(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. ????//隨機生成數(shù)字,產(chǎn)生隨機題目?? 22. ????void?suiji()?? 23. {?? 24. ???????num?=?Random.Range(1,?5);?? 25. ????????newNum?=?num;?? 26. ????????//用于后臺觀察隨機數(shù)?? 27. ????????print("數(shù):"?+?newNum);?? 28. ?
55、?}?? 29. ?? 30. ????//點擊打開測試?? 31. ????public?void?OnClickOpenTest()?? 32. ????{?? 33. ????????Time.timeScale?=?0;?? 34. ????????suiji();?? 35. ????????closetest();?? 36. ????????openReturn();?? 37. ?????????? 38. ????????//根據(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. ????//點擊關(guān)閉測試,并更新分?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)閉測試并隱藏所有測試有關(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ī)生”稱號后解鎖查看病例條件、判斷玩家是否第一次解鎖新功能與游戲失敗、勝利條件的實現(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. ????//題目答對加一分后更新總分?jǐn)?shù)?? 37. ????public?void?OnClickRi
- 溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 6.煤礦安全生產(chǎn)科普知識競賽題含答案
- 2.煤礦爆破工技能鑒定試題含答案
- 3.爆破工培訓(xùn)考試試題含答案
- 2.煤礦安全監(jiān)察人員模擬考試題庫試卷含答案
- 3.金屬非金屬礦山安全管理人員(地下礦山)安全生產(chǎn)模擬考試題庫試卷含答案
- 4.煤礦特種作業(yè)人員井下電鉗工模擬考試題庫試卷含答案
- 1 煤礦安全生產(chǎn)及管理知識測試題庫及答案
- 2 各種煤礦安全考試試題含答案
- 1 煤礦安全檢查考試題
- 1 井下放炮員練習(xí)題含答案
- 2煤礦安全監(jiān)測工種技術(shù)比武題庫含解析
- 1 礦山應(yīng)急救援安全知識競賽試題
- 1 礦井泵工考試練習(xí)題含答案
- 2煤礦爆破工考試復(fù)習(xí)題含答案
- 1 各種煤礦安全考試試題含答案