课程:Unity3D课程设计题目:小球吃宝石班级:数媒0902学号:0305090205/0305090206 姓名:刘卉/沈玉婷日期:2012.12网络游戏是一种新型的IT产业。
我们研究主要内容是网络软件设计方法,网络游戏:英文名称为Online Game,又称“在线游戏”,简称“网游”。
指以互联网为传输媒介,以游戏运营商服务器和用户计算机为处理终端,以游戏客户端软件为信息交互窗口的旨在实现娱乐、休闲、交流和取得虚拟成就的具有可持续性的个体性多人在线游戏。
本报告主要讲述了这个小游戏的设计思路及初步使用Unity3D 软件的感受和总结。
设计过程中,首先建立自己想要的模型,然后在此基础上进行需求迭代,详细设计时不断地修正和完善,经过测试阶段反复调试和验证,最终形成达到设计要求的小游戏。
基于视频教程“平衡球”的基础,构建了一个益智游戏风格的游戏,并有主角(小球)与关卡(一关)、游戏逻辑(触碰宝石)、游戏环境界面(环形轨道)等设计,使得玩家可以在场景轨道中进行小球吃宝石的冒险游戏。
本游戏的控制很简单,及用键盘的上下左右(或WSAD)四个箭头控制小球的上下左右四个方向,用户根据自己的战略方式选择小球能吃到宝石的最佳捷径,从而一步步吃掉所有宝石。
分工:刘卉——场景的构建和小球、宝石等道具的设计;沈玉婷——游戏内容的构思设计和程序代码的编写。
关键词:网络游戏、小球吃宝石、浏览器形式。
《网络游戏程序设计》这一课程以大作业形式进行考核,能更好地锻炼学生综合运用本课程所授知识的能力。
大作业主要内容为设计完成面向某一主题内容的游戏演示程序。
自选游戏主题,并根据所选定的主题内容设计一个典型的游戏场景及玩家逻辑,其中包含主角与关卡,游戏逻辑,游戏环境界面与交互过程等的设计;开发完成与设计相符的游戏Demo。
要求使用Unity3D游戏开发软件实现上述游戏Demo。
三、具体要求1、每人单独完成,特殊可由2人合作完成。
2、游戏主题自拟。
3、根据所设游戏主题、场景及玩家逻辑,实现完成相应的游戏Demo,并撰写设计开发报告。
四、网络游戏介绍网络游戏是一种新型的 IT产业。
我们研究主要内容是网络软件设计方法,网络游戏:英文名称为Online Game,又称“在线游戏”,简称“网游”。
指以互联网为传输媒介,以游戏运营商服务器和用户计算机为处理终端,以游戏客户端软件为信息交互窗口的旨在实现娱乐、休闲、交流和取得虚拟成就的具有可持续性的个体性多人在线游戏。
网络游戏目前的使用形式可以分为以下二种:(1)浏览器形式基于浏览器的游戏,也就是我们通常说到的网页游戏,又称为WEBGAME,它不用下载客户端,任何地方任何时间任何一台能上网的电脑快乐的游戏,尤其适合上班族,其类型及题材也非常丰富。
(2)客户端形式这一种类型是由公司所架设的服务器来提供游戏,而玩家们则是由公司所提供的客户端来连上公司服务器以进行游戏,而现在称之为网络游戏的大都属于此类型。
此类游戏的特征是大多数玩家都会有一个专属于自己的角色(虚拟身份),而一切角色资料以及游戏资讯均记录在服务端。
就目前网络游戏主要的游戏模式而言,主要有以下几种:动作游戏、冒险游戏、益智游戏、卡片游戏、战略游戏等等。
本课程设计所设计的游戏类型是小球吃宝石游戏,属于益智游戏的一种。
五、设计主题基于视频教程“平衡球”的基础,构建了一个益智游戏风格的游戏,并有主角(小球)与关卡(一关)、游戏逻辑(触碰宝石)、游戏环境界面(环形轨道)等设计,使得玩家可以在场景轨道中进行小球吃宝石的冒险游戏。
六、设计思路本游戏以几个环环相扣的轨道作为小球运动的轨迹,在轨道上分别设计一些红宝石,通过电脑上的上下左右箭头(或WSAD)分别控制小球的运动方向(上下左右),稍有偏差小球就会离开平面,游戏结束;相反,如果小球运动位置没有偏离所设计轨道平面而且碰触到红宝石,即算初步成功,当小球全部吃掉所设计的红宝石,游戏胜利。
本报告主要讲述了这个小游戏的设计思路及初步使用Unity3D软件的感受和总结。
设计过程中,首先建立自己想要的模型,然后在此基础上进行需求迭代,详细设计时不断地修正和完善,经过测试阶段反复调试和验证,最终形成达到设计要求的小游戏。
分工:刘卉——场景的构建和小球、宝石等道具的设计;沈玉婷——游戏内容的构思设计和程序代码的编写。
七、具体构建步骤1、天空盒子添加2、用BSP笔刷建造场景的基本结构。
3、为场景贴图。
贴图时,根据道具的风格,选择泥土或砖块的BSP贴图,每次贴图选择一个平面的一个面,复制粘贴直至完全贴完。
4、放置静态模型和道具。
本场景设定为环形轨道上小球的运动,选用小球和宝石做道具。
5、场景灯光。
添加相应的点光源,查看效果。
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("Horizontal") * -Vector3.left * movementSpeed) + (Input.GetAxis("Vertical") * Vector3.forward *movementSpeed);rigidbody.AddForce(movement, ForceMode.Force);}void OnTriggerEnter (Collider other ) {if (other.tag == "Pickup"){MarbleGameManager.SP.FoundGem();Destroy(other.gameObject);}else{//Other collider.. See other.tag and }}}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("Pickup").Length;Time.timeScale = 1.0f;}void OnGUI () {bel(" Found gems: "+foundGems+"/"+totalGems );if (gameState == MarbleGameState.lost){bel("You Lost!");if(GUILayout.Button("Try again") ){Application.LoadLevel(Application.loadedLevel);}}else if (gameState == MarbleGameState.won){bel("You won!");if(GUILayout.Button("Play again") ){Application.LoadLevel(Application.loadedLevel);}}}public void FoundGem(){foundGems++;if (foundGems >= totalGems){WonGame();}}public void WonGame(){Time.timeScale = 0.0f; //Pause gamegameState = MarbleGameState.won;}public void SetGameOver(){Time.timeScale = 0.0f; //Pause gamegameState = 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;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。