unity3d游戏课程设计报告.docx
- 文档编号:11885872
- 上传时间:2023-04-08
- 格式:DOCX
- 页数:11
- 大小:385.63KB
unity3d游戏课程设计报告.docx
《unity3d游戏课程设计报告.docx》由会员分享,可在线阅读,更多相关《unity3d游戏课程设计报告.docx(11页珍藏版)》请在冰豆网上搜索。
unity3d游戏课程设计报告
游戏程序设计课程报告
课程:
题目:
Unity3D课程设计
探索迷宫
班
学
姓
日
级:
号:
名:
期:
2014.12
一、摘要
1
UNITY游戏是一种新型的
IT引擎。
我们研究主要内容是
UNITY游戏设计方法。
指以游戏客户端软件为信息交互窗口的旨在
实现娱乐、休闲、交流和取得虚拟成就的具有可持续性的个体性单人游戏。
本报告主要讲述了这个小游戏的设计思路及初步使用Unity3D
软件的感受和总结。
设计过程中,首先建立自己想要的模型,然后
在此基础上进行需求迭代,详细设计时不断地修正和完善,经过测
试阶段反复调试和验证,最终形成达到设计要求的小游戏。
基于UNITY基础,构建了一个益智游戏风格的游戏,并有主角
与关卡、游戏逻辑、游戏环境界面等设计,使得玩家可以在场景中进行寻找神龛的冒险游戏。
本游戏的控制很简单,及用键盘的WASD及SPACE五个控制
人物的上下左右跳跃五个方向,用户根据自己的战略方式选择寻找油桶点亮煤油灯然后寻找神龛。
二、概述
《UNITY游戏程序设计》这一课程以大作业形式进行考核,能
更好地锻炼学生综合运用本课程所授知识的能力。
大作业主要内容为设计完成面向某一主题内容的游戏演示程序。
自选游戏主题,并根据所选定的主题内容设计一个典型的游戏
2
场景及玩家逻辑,其中包含主角与关卡,游戏逻辑,游戏环境界面
与交互过程等的设计;开发完成与设计相符的游戏Demo。
要求使用Unity3D游戏开发软件实现上述游戏Demo。
三、具体要求
1、
2、
3、
每人单独完成,特殊可由多人合作完成。
游戏主题自拟。
根据所设游戏主题、场景及玩家逻辑,实现完成相应的游戏Demo,并撰写设计开发报告。
四、设计主题
基于视频教程“平衡球”的基础,构建了一个益智游戏风格的
游戏,并有主角与关卡(一关)、游戏逻辑(触碰油桶、神龛)、游
戏环境界面(通道)等设计,使得玩家可以在场景轨道中进行吃油桶、神龛的冒险游戏。
五、设计思路
本游戏以几个环环相扣的通道作为人物运动的轨迹,在通道上
分别设计一些油桶,通过电脑上的WASDSPACE分别控制人物的运动
方向;如果人物运动位置没有偏离所设计通道平面而且碰触到油桶,
即算初步成功,当人物吃掉所设计的油桶,油灯就会点亮。
当人物找到并吃掉所设计的神龛,就会通过关卡。
本报告主要讲述了这个小游戏的设计思路及初步使用Unity3D
软件的感受和总结。
设计过程中,首先建立自己想要的模型,然后
在此基础上进行需求迭代,详细设计时不断地修正和完善,经过测
3
试阶段反复调试和验证,最终形成达到设计要求的小游戏。
六、具体构建步骤
1、场景素材的添加,通过3DMAX建模完成素材的创建
2、在UNITY3D中完成素材的组装
3、为场景贴图。
贴图时,根据道具的风格,选择地面与墙的BSP贴图,每次贴图选择一个平面的一个面。
4
4、创建预组件
5、将创建并且组装的模型添加到预组件中,并且通过复制完成整个游戏场景的拼接
6、导入UNITY的人物控制组件
6、在场景中添加细节
5
七、程序脚本
1、游戏开始触发器程序(main):
usingUnityEngine;
usingSystem.Collections;
publicclassmain:
MonoBehaviour{
publicRectwindowRect=newRect(20,20,120,50);
//Usethisforinitialization
voidStart(){
}
//Updateiscalledonceperframe
voidUpdate(){
}
voidOnGUI(){
windowRect=GUILayout.Window(0,windowRect,DoMyWindow,"FindShrine");}
voidDoMyWindow(intwindowID){
6
if(GUILayout.Button("GameStart")){Application.LoadLevel("testgame_02");print("Gotaclick");
}
}
}
2、人物所触发的事件:
usingUnityEngine;
usingSystem.Collections;
publicclassinventory:
MonoBehaviour{
public
intfuelAmount=0;
publicAudioClipfuelcollectedsound;
publicTexture2D[]hudFuelAmount;
publicGUITexturefuelAmountHUDGUI;
publicLightlanternlight;
publicfloatorigfueltimer=30.0f;
publicfloatfueltimer=0.0f;
publicfloatorigfuelGUItimer=30.0f;
publicfloatfuelGUItimer=0.0f;
publicintmaxfuelAmount;
//publicRectwindowRect=newRect(20,20,120,50);
//Usethisforinitialization
voidStart(){
fuelAmount=0;
lanternlight=GameObject.Find("Lantern").GetComponent
}
//Updateiscalledonceperframe
voidUpdate(){
if(fueltimer>0)
{
fueltimer-=Time.deltaTime;
}
if(fueltimer<0.0f)
{
lanternlight.light.intensity=0.0f;
}
if(fuelGUItimer>0.0f&&fuelAmount>0){
7
fuelGUItimer-=Time.deltaTime;
}
if(fuelGUItimer<0.0f){
removeGUIfuel();
}
}
voidFuelPickUp(){
if(fuelAmount fueltimer+=origfueltimer; AudioSource.PlayClipAtPoint(fuelcollectedsound,transform.position); fuelAmount++; fuelAmountHUDGUI.texture=hudFuelAmount[fuelAmount];lanternlight.light.intensity=1.0f; if(fuelGUItimer==0.0f){ fuelGUItimer=origfuelGUItimer; } } } voidremoveGUIfuel(){ if(fuelAmount>0){ fuelAmount--; fuelAmountHUDGUI.texture=hudFuelAmount[fuelAmount]; fuelGUItimer=origfuelGUItimer; } } } 3、油灯被触发时的事件: usingUnityEngine; usingSystem.Collections; publicclassLanternFuel: MonoBehaviour { //Usethisforinitialization voidStart() { } //Updateiscalledonceperframe 8 voidUpdate() { } voidOnTriggerEnter(Colliderplayer) { player.gameObject.SendMessage("FuelPickUp"); Destroy(this.gameObject); } } 4、游戏开始时随机出现人物与神龛的位置: usingUnityEngine; usingSystem.Collections; publicclassgamestate: MonoBehaviour { privateGameObjectplayer; privateplayerspawncontrollerplayerspawnCTRL; privateGameObjectrandPlayerSpawn; privateGameObjectShrine; privateShrinespawnshrinespawnCTRL; privateGameObjectrandShrinespawn; voidAwake() { player=GameObject.FindWithTag("Player"); playerspawnCTRL=GameObject.FindGameObjectWithTag ("PlayerSpawnCTRL").GetComponent Shrine=GameObject.FindWithTag("Shrine"); shrinespawnCTRL=GameObject.FindGameObjectWithTag ("shrinespawnCTRL").GetComponent } //Usethisforinitialization voidStart() { intrandNum=0; intrandNum1=0; randPlayerSpawn=playerspawnCTRL.GetRandomPlayerSpawn(randNum); SpawnPlayer(); randShrinespawn=shrinespawnCTRL.GetRandomshrineSpawn(randNum1);Spawnshrine(); 9 } //Updateiscalledonceperframe voidUpdate() { } voidSpawnPlayer() { player.transform.position=randPlayerSpawn.transform.position;Debug.Log("你出生在"+randPlayerSpawn.name); } voidSpawnshrine() { Shrine.transform.position=randShrinespawn.transform.position;Debug.Log("神龛出生在"+randShrinespawn.name); } } 5、接触到油桶后油桶会消失 usingUnityEngine; usingSystem.Collections; publicclassLanternFuel: MonoBehaviour { //Usethisforinitialization voidStart() { } //Updateiscalledonceperframe voidUpdate() { } voidOnTriggerEnter(Colliderplayer) { player.gameObject.SendMessage("FuelPickUp"); Destroy(this.gameObject); } } 10 八、游戏规则 游戏规则模块也是本文的一个重点部分,需要实现人物接触油 桶游戏的基本规则,因此,首先要解决的问题是触发问题,根据通 道的大小制定油桶的地点,然后要解决的问题是人物与油桶的接触 过程,保证人物接触油桶后油桶消失;如果能寻找到神龛,则游戏胜利。 九、用户控制 本游戏的控制很简单,及用键盘的WASD四个箭头控制人物的运 动,用户根据自己的战略方式选择人物能吃到油桶的最佳捷径,从而一步步寻找神龛。 十、运行结果 11 12 十一、 心得体会 在学习并实践的过程中,可能在脚本游戏的代码编写上还是出 现最多问题的,有的时候就是照搬书本上的代码,也会出错,不仅 仅是粗心,也是我对于代码并不熟悉导致的,在一遍遍的修改中, 我对代码的编写也更加熟练,相比较之前的生疏,现在算是比较得 心应手了。 此外,比较困扰我的就是摄像机位置的各方面调整,有 的时候很难调整到想要的角度,最后只能将就,这点让我很是纠结。 对于这种情况,我试着各种方法达到理想效果,如果说我改变不了 摄像机,那我只能改变我设置的场景、对象的位置了,虽然这样的 方法比较笨,而且可能会比较繁琐,但是最终也帮助我实现了想要 达到的效果。 我觉得一些基础快捷键要首先掌握,才能节省时间和 精力。 场景搭建初期要先构思好场景的基本风格,选择静态模型和 装备的时候就不会手忙脚乱了。 场景和灯光基本完成时,要多构建 几次,一边检验一边修改,这样在后期才不会出现很多错误,以便 同组合作的同学的后修工作能很快上手。 在尝试着做游戏的同时我 还是学到了很多,不能说了解但也是熟悉了这个软件。 在与同学的 合作中,我学着一点一点的去完善。 两人同组合作,大家积极交流, 有问题一起想办法解决,不经提高了工作效率,同时增进了同学之间的感情。 13
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- unity3d 游戏 课程设计 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)