unity课程设计报告(刘卉和沈玉婷) - 图文
更新时间:2023-10-18 13:41:01 阅读量: 综合文库 文档下载
江南大学数字媒体技术专业
2012--2013年度第1学期
课程: Unity3D课程设计
题目: 小球吃宝石
班 级: 数媒0902
学 号: 0305090205/0305090206
姓 名: 刘卉/沈玉婷
日 期: 2012.12
1
江南大学数字媒体技术专业
2012--2013年度第1学期
一、 摘要
网络游戏是一种新型的 IT产业。我们研究主要内容是网络软件设计方法,网络游戏:英文名称为Online Game,又称 “在线游戏”,简称“网游”。指以互联网为传输媒介,以游戏运营商服务器和用户计算机为处理终端,以游戏客户端软件为信息交互窗口的旨在实现娱乐、休闲、交流和取得虚拟成就的具有可持续性的个体性多人在线游戏。
本报告主要讲述了这个小游戏的设计思路及初步使用Unity3D软件的感受和总结。设计过程中,首先建立自己想要的模型,然后在此基础上进行需求迭代,详细设计时不断地修正和完善,经过测试阶段反复调试和验证,最终形成达到设计要求的小游戏。
基于视频教程“平衡球”的基础,构建了一个益智游戏风格的游戏,并有主角(小球)与关卡(一关)、游戏逻辑(触碰宝石)、游戏环境界面(环形轨道)等设计,使得玩家可以在场景轨道中进行小球吃宝石的冒险游戏。
本游戏的控制很简单,及用键盘的上下左右(或WSAD)四个箭头控制小球的上下左右四个方向,用户根据自己的战略方式选择小球能吃到宝石的最佳捷径,从而一步步吃掉所有宝石。
分工:刘卉——场景的构建和小球、宝石等道具的设计;沈玉婷——游戏内容的构思设计和程序代码的编写。
关键词:网络游戏、小球吃宝石、浏览器形式。
2
江南大学数字媒体技术专业
2012--2013年度第1学期
二、 概述
《网络游戏程序设计》这一课程以大作业形式进行考核,能更好地锻炼学生综合运用本课程所授知识的能力。大作业主要内容为设计完成面向某一主题内容的游戏演示程序。
自选游戏主题,并根据所选定的主题内容设计一个典型的游戏场景及玩家逻辑,其中包含主角与关卡,游戏逻辑,游戏环境界面与交互过程等的设计;开发完成与设计相符的游戏Demo。
要求使用Unity3D游戏开发软件实现上述游戏Demo。 三、 具体要求
1、 每人单独完成,特殊可由2人合作完成。 2、 游戏主题自拟。
3、 根据所设游戏主题、场景及玩家逻辑,实现完成相应的游戏
Demo,并撰写设计开发报告。
四、 网络游戏介绍
网络游戏是一种新型的 IT产业。我们研究主要内容是网络软件设计方法,网络游戏:英文名称为Online Game,又称 “在线游戏”,简称“网游”。指以互联网为传输媒介,以游戏运营商服务器和用户计算机为处理终端,以游戏客户端软件为信息交互窗口的旨在实现娱乐、休闲、交流和取得虚拟成就的具有可持续性的个体性多人在线游戏。网络游戏目前的使用形式可以分为以下二种: (1)浏览器形式
基于浏览器的游戏,也就是我们通常说到的网页游戏,又称为WEB
3
江南大学数字媒体技术专业
2012--2013年度第1学期
GAME,它不用下载客户端,任何地方任何时间任何一台能上网的电脑快乐的游戏,尤其适合上班族,其类型及题材也非常丰富。 (2)客户端形式
这一种类型是由公司所架设的服务器来提供游戏,而玩家们则是由公司所提供的客户端来连上公司服务器以进行游戏,而现在称之为网络游戏的大都属于此类型。此类游戏的特征是大多数玩家都会有一个专属于自己的角色(虚拟身份),而一切角色资料以及游戏资讯均记录在服务端。
就目前网络游戏主要的游戏模式而言,主要有以下几种:动作游戏、冒险游戏、益智游戏、卡片游戏、战略游戏等等。本课程设计所设计的游戏类型是小球吃宝石游戏,属于益智游戏的一种。 五、 设计主题
基于视频教程“平衡球”的基础,构建了一个益智游戏风格的游戏,并有主角(小球)与关卡(一关)、游戏逻辑(触碰宝石)、游戏环境界面(环形轨道)等设计,使得玩家可以在场景轨道中进行小球吃宝石的冒险游戏。 六、 设计思路
本游戏以几个环环相扣的轨道作为小球运动的轨迹,在轨道上分别设计一些红宝石,通过电脑上的上下左右箭头(或WSAD)分别控制小球的运动方向(上下左右),稍有偏差小球就会离开平面,游戏结束;相反,如果小球运动位置没有偏离所设计轨道平面而且碰触到红宝石,即算初步成功,当小球全部吃掉所设计的红宝石,游戏胜利。
4
江南大学数字媒体技术专业
2012--2013年度第1学期
本报告主要讲述了这个小游戏的设计思路及初步使用Unity3D软件的感受和总结。设计过程中,首先建立自己想要的模型,然后在此基础上进行需求迭代,详细设计时不断地修正和完善,经过测试阶段反复调试和验证,最终形成达到设计要求的小游戏。
分工:刘卉——场景的构建和小球、宝石等道具的设计;沈玉婷——游戏内容的构思设计和程序代码的编写。 七、 具体构建步骤
1、 天空盒子添加
2、 用BSP笔刷建造场景的基本结构。
3、 为场景贴图。贴图时,根据道具的风格,选择泥土或砖块的BSP贴图,每次贴图选择一个平面的一个面,复制粘贴直至完全贴完。
5
江南大学数字媒体技术专业
2012--2013年度第1学期
4、 放置静态模型和道具。本场景设定为环形轨道上小球的运动,选用小球和宝石做道具。
5、 场景灯光。添加相应的点光源,查看效果。
6
江南大学数字媒体技术专业
2012--2013年度第1学期
6、 摄像机。调整摄像机到合适的位置
八、 程序脚本
1、 游戏结束触发器程序(GameoverTrigger):
using UnityEngine;
using System.Collections;
public class GameoverTrigger : MonoBehaviour {
void OnTriggerEnter() {
MarbleGameManager.SP.SetGameOver(); } }
2、 小球的控制程序(MarbleControl):
using UnityEngine;
using System.Collections;
public class MarbleControl : MonoBehaviour {
public float movementSpeed = 6.0f; void Update () {
Vector3 movement = (Input.GetAxis(\(Input.GetAxis(\ rigidbody.AddForce(movement, ForceMode.Force); }
void OnTriggerEnter (Collider other ) { if (other.tag == \
7
江南大学数字媒体技术专业
2012--2013年度第1学期
{
MarbleGameManager.SP.FoundGem(); Destroy(other.gameObject); } else {
//Other collider.. See other.tag and other.name } } }
3、 小球游戏运作情形设计程序(MarbleGameManager):
using UnityEngine;
using System.Collections;
public enum MarbleGameState {playing, won,lost };
public class MarbleGameManager : MonoBehaviour {
public static MarbleGameManager SP;
private int totalGems; private int foundGems;
private MarbleGameState gameState;
void Awake() {
SP = this;
foundGems = 0;
gameState = MarbleGameState.playing;
totalGems = GameObject.FindGameObjectsWithTag(\ Time.timeScale = 1.0f; } void OnGUI () { GUILayout.Label(\
if (gameState == MarbleGameState.lost) {
GUILayout.Label(\
if(GUILayout.Button(\
Application.LoadLevel(Application.loadedLevel);
8
江南大学数字媒体技术专业
2012--2013年度第1学期
} }
else if (gameState == MarbleGameState.won) {
GUILayout.Label(\
if(GUILayout.Button(\
Application.LoadLevel(Application.loadedLevel); } } }
public void FoundGem() {
foundGems++;
if (foundGems >= totalGems) {
WonGame(); } }
public void WonGame() {
Time.timeScale = 0.0f; //Pause game gameState = MarbleGameState.won; }
public void SetGameOver() {
Time.timeScale = 0.0f; //Pause game gameState = MarbleGameState.lost; } }
4、 跟踪小球球的摄像机设置(MarbleCamera):
using UnityEngine;
using System.Collections;
public class MarbleCamera : MonoBehaviour {
public Transform target; public float relativeHeigth = 10.0f; public float zDistance = 5.0f; public float dampSpeed = 2;
9
江南大学数字媒体技术专业
2012--2013年度第1学期
void Update () {
Vector3 newPos = target.position + new Vector3(0, relativeHeigth, -zDistance); transform.position = Vector3.Lerp(transform.position, newPos, Time.deltaTime*dampSpeed); } }
八、关于服务器及网络模块的设计及实现
网络模块的设计主要为了实现网络版的服务端与客户端之间的连接以及它们之间数据的传送。图展示了网络模块的结构图,网络模块主要由客户机服务器两部分组成。
网络模块 客户机 服务器
在使用TCP协议时,一般服务端进程先使用socket调用得到一个描述符,然后使用bind调用将一个名字 与socket描述符连接起来,对于Internet域就是将Internet地址联编到socket。之后,服务端使用listen调用指出等待服务请 求队列的长度。然后就可以使用accept调用等待客户端发起连接,一般是阻塞等待连接,一旦有客户端发出连接,accept返回客户的地址信息,并返回 一个新的socket描述符,该描述符与原先的socket有相同的特性,这时服务端就可以使用这个
10
江南大学数字媒体技术专业
2012--2013年度第1学期
新的socket进行读写操作了。一般服务端可能在 accept返回后创建一个新的进程进行与客户的通信,父进程则再到accept调用处等待另一个连接。客户端进程一般先使用socket调用得到一个 socket描述符,然后使用connect向指定的服务器上的指定端口发起连接,一旦连接成功返回,就说明已经建立了与服务器的连接,这时就可以通过 socket描述符进行读写操作了。
一旦创建 Socket,在客户端,你将可以通过Connect方法连接到指定的服务器(你可以在Connect方法前Bind端口,就是以指定的端口发起连接,如 果不事先Bind端口号的话,系统会默认在1024到5000随机绑定一个端口号),并通过Send方法向远程服务器发送数据,而后可以通过 Receive从服务端接收数据;而在服务器端,你需要使用Bind方法绑定所指定的接口使Socket与一个本地终结点相联,并通过Listen方法侦 听该接口上的请求,当侦听到用户端的连接时,调用Accept完成连接的操作,创建新的Socket以处理传入的连接请求。使用完 Socket 后,使用 Close 方法关闭 Socket。下图展示了网络模块流程图,通过启动服务器与客户机,完成了它们之间的连接以及数据交换。
11
江南大学数字媒体技术专业
2012--2013年度第1学期
服务器方 Socket()建立套接字 客户方 Bind()与本地地址相连 Listen()监听客户端 Accept()接收连接 Socket()建立套接字 建立连接 Connect()连接服务器 Recv()/Send读/写数据 Recv()/Send读/写数据 关闭套接字接收/发送 关闭套接字 Close()关闭套接字实例
九、 游戏规则
游戏规则模块也是本文的一个重点部分,需要实现小球吃宝石游戏
的基本规则,因此,首先要解决的问题是小球的运动方向,根据轨道的方向制定小球的运动路线,然后要解决的问题是小球与红宝石的接触过程,如果能保证小球不离开轨道而且又能吃到宝石,则小球则达到初步成功;如果能吃到所有宝石,则游戏胜利;相反,如果小球不慎离开轨道,则宣布游戏失败。
12
江南大学数字媒体技术专业
2012--2013年度第1学期
十、 用户控制
本游戏的控制很简单,及用键盘的上下左右(或WSAD)四个箭头控制小球的上下左右四个方向,用户根据自己的战略方式选择小球能吃到宝石的最佳捷径,从而一步步吃掉所有宝石。 十一、 运行结果
13
江南大学数字媒体技术专业
2012--2013年度第1学期
14
江南大学数字媒体技术专业
2012--2013年度第1学期
十二、 心得体会(刘卉)
在学习并实践的过程中,可能在脚本游戏的代码编写上还是出现最多问题的,有的时候就是照搬书本上的代码,也会出错,不仅仅是粗心,也是我对于代码并不熟悉导致的,在一遍遍的修改中,我对代码的编写也更加熟练,相比较之前的生疏,现在算是比较得心应手了。此外,比较困扰我的就是摄像机位置的各方面调整,有的时候很难调整到想要的角度,最后只能将就,这点让我很是纠结。对于这种情况,我试着各种方法达到理想效果,如果说我改变不了摄像机,那我只能改变我设置的场景、对象的位置了,虽然这样的方法比较笨,而且可能会比较繁琐,但是最终也帮助我实现了想要达到的效果。我觉得一些基础快捷键要首先掌握,才能节省时间和精力。场景搭建初期要先构思好场景的基本风格,选择静态模型和装备的时候就不会手忙脚乱了。场景和灯光基本完成时,要多构建几次,一边检验一边修改,这样在后期才不会出现很多错误,以便同组合作的同学的后修工作能很快上手。在尝试着做游戏的同时我还是学到了很多,不能说了解但也是熟悉了这个软件。在与同学的合作中,我学着一点一点的去完善。两人同组合作,大家积极交流,有问题一起想办法解决,不经提高了工作效率,同时增进了同学之间的感情。
15
江南大学数字媒体技术专业
2012--2013年度第1学期
十三、 心得体会(沈玉婷)
Unity3D是一个让人们可以轻松创作的多平台的游戏开发工具,是一个全面整合的专业游戏引擎。基于unity3d平台开发的游戏并不多,尤其是中文游戏,开发的多数是网络游戏以及第一人称游戏,PC机上的大型游戏只有新仙剑奇侠传OL。其他的网游都是国外的,多数是韩国和欧美。unity3d开发的游戏多数都是用在iphone以及android等手机端游戏,比较出名的是武士系列游戏,涂鸦保龄球,城堡勇士,3D方块贴图,以及很多僵尸游戏。UDK相比unity3d功能强大,且拓展性强,但是要求配置也比unity3d高不少,但是不如unity3d效率高,unity3d制作游戏更快。但是关于Unity3D目前应用情况,由百度、谷歌搜索引擎的搜索结果来看,做小型游戏、房产演示的作品比较多。但是,关于力学仿真模拟的产品很少。目前只看到过一款,模型很漂亮但交互功能没有,只是简单的操作流程演示。我推测,U3D不适合物理学仿真领域。它目前只适合做产品演示,操作流程演示等方面的工作。从普通用户的角度来说,3D Unity功能齐全,容易使用,3D模型导入比较容易,做3D项目比较容易。从开发人员的角度来说,使用3D Unity已有的功能,是很方便,但是一旦涉及到某些地方要定制化就很难做。由于它不能直接调用操作系统底层功能,因此,定制化模块的性能会比较差。3Dunity适合做房产演示、产品演示、小型网络游戏。但是不适合做大型网络游戏,和用户定制化要求比较高的项目。
16
正在阅读:
办公楼安防监控系统解决方案05-05
浅谈初中语文高效课堂之我见04-10
溜冰的坚持作文600字06-23
电子信息制造业统计调查制度 - 图文07-02
古代“中药的传说”(第十四集)08-10
朱炳寅老师的文章09-21
感悟生活初二学生作文11-03
《清稗类钞》服饰类04-12
美好的童年生活作文500字06-28
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 课程
- 图文
- 报告
- 设计
- unity
- 刘卉和
- 沈玉婷
- 2011年丹东市基层事业单位选聘优秀高校毕业生拟聘用人员名
- 2011专升本大学语文及答案(三)
- C程序设计 24点小游戏
- 安阳锻压技术 - 安阳锻压机械刘福海
- 2016年汽车类专业课试题卷
- 最新人教版PEP小学六年级英语上册全教案含教学计划进度表
- 2018年播音主持艺考即兴评述素材
- 常见食物热量表!!要控制饮食的人注意了
- EDA练习及答案
- 2018年中国移动警务系统市场前景分析报告目录
- JAVA三大框架面试题-如果你能够撑握保证找到一份好工作
- GPS模块使用手册 - 图文
- 金融市场学2014春第一套作业
- 《朝花夕拾》相关知识
- SP-9890气相色谱仪操作步骤
- 第五期简报 - 图文
- 北邮应用文写作阶梯作业二
- 岩心数字化数据库管理系统操作手册
- 中心试验室管理办法
- 2013 - 2014学年郑州市九年级第一次预测试卷语文(WORD版)