实验报告课程名称:多媒体技术实验题目:用Unity开发设计打靶游戏系别:计算机学院专业:计算机科学与技术班级:计科1303学号:2013011204姓名:赵雨阳指导教师:申闫春实验日期:2016年06月24日一、实验目的:通过本次实验使学生掌握用Unity开发射击打靶游戏的基本方法,学会在虚拟世界添加灯光、材质、刚体等物体对象,学会用Javascript编写游戏程序,学会添加天空盒子、设置碰撞检测、发布游戏等编程能力。
二、实验要求:1、开发出实验内容要求的程序。
2、写出上机实验报告,并写出自己调试程序的心得体会。
三、部分实验操作过程及源程序1、首先在电脑上安装Unity3D,这是本课程需要的游戏开发制作引擎。
2、接下来打开U3D准备创建游戏工程。
详细步骤如下启动Unity,双击桌面Unity,Create New Project,(在D盘建u3d01文件夹),Browse,选D:\u3d01\sheji,Create,!!!去掉“check for updates”的对勾,单击skip new vertion,关闭welcome to unity。
3、在D盘建u3d01文件夹。
在层次面板,create,3d object,cube,选中,F2改名,dimian,创建地面:建立方体cube,按F2键改名,为dimian,按F键聚焦显示物体,鼠标中轮放大缩小,按住平移,把物体放到原点(0,0,0),用transform(位置)变换,直接输入0,0,0,或单击设置齿轮,选reset,按F键聚焦,拉伸scale成地面:改x100,y1,z100,按F键聚焦,完成地面。
4、创建一个砖块,用于砌墙,按F2改名zhuankuai,并且添加质量以及为场景添加灯光,在层次窗口创建源,对齐主摄像机,对齐视图,可以看齐砖块了,单击运行,看到砖块后选中砖块,添加刚体组件。
之后块添加颜色或材质,选中物体,建立材质,材质可以赋给物体。
5、创建一个脚本之前,首先创建一个球体作为射弹,改名为:射弹,制成预制物体,可以重复使用。
创建脚本赋给主摄像机作为射击用,改名叫sheji,并编写第一个代码:功能是控制主摄像机在场景中移动,按W键向前移动,按S键向后移动,按A键向左移动,按D键向右移动,或同时让4个光标移动键同样有移动功能。
6、下是游戏所需要的代码。
#pragma strictfunction Start() {}var speed : int =5;var newobject:Transform;function Update() {var x:float =Input.GetAxis("Horizontal")*Time.deltaTime*speed;var z:float=Input.GetAxis("Vertical")*Time.deltaTime*speed;//移动功能transform.Translate(x,0,z);//print("shiji:"+x);//开火功能if(Input.GetButtonDown("Fire1")){var n:Transform = Instantiate(newobject,transform.position,transform.rotation);var fwd:Vector3 = transform.TransformDirection(Vector3.forward); // 加方向变量n.rigidbody.AddForce(fwd*2800); //给物体加力}//旋转功能if(Input.GetKey(KeyCode.Q)){ //向左transform.Rotate(0,-25*Time.deltaTime,0,Space.Self);//x,y,z,沿着物体自身轴旋转}if(Input.GetKey(KeyCode.E)){ //向右transform.Rotate(0,25*Time.deltaTime,0,Space.Self);//x,y,z,自身面}}销毁炮弹#pragma strictfunction Start() {Destroy(gameObject,3.0);}发射炮弹pragma strictfunction Start() {}var speed : int =5;var newobject:Transform;function Update() {var x:float =Input.GetAxis("Horizontal")*Time.deltaTime*speed;var z:float =Input.GetAxis("Vertical")*Time.deltaTime*speed;transform.Translate(x,0,z);//print("shiji:"+x);if(Input.GetButtonDown("Fire1")){var n:Transform = Instantiate(newobject,transform.position,transform.rotation);var fwd:Vector3 = transform.TransformDirection(Vector3.forward); // 加方向变量n.rigidbody.AddForce(fwd*28000); //给物体加力}}//升高降低镜头if(Input.GetKey(KeyCode.H)){ //向上transform.Translate(0,5*Time.deltaTime,0); //x,y,z}if(Input.GetKey(KeyCode.N)){ //向下transform.Translate(0,5*Time.deltaTime,0);//x,y,z}//旋转功能if(Input.GetKey(KeyCode.Q)){ //向左transform.Rotate(0,-25*Time.deltaTime,0,Space.Self);//x,y,z,沿着物体自身轴旋转}if(Input.GetKey(KeyCode.E)){ //向右transform.Rotate(0,25*Time.deltaTime,0,Space.Self);//x,y,z,自身面}if(Input.GetKey(KeyCode.Z)){ //向上transform.Rotate(-25*Time.deltaTime,0,0,Space.Self);//x,y,z,沿着物体自身轴旋转}if(Input.GetKey(KeyCode.C)){ //向下transform.Rotate(25*Time.deltaTime,0,0,Space.Self);//x,y,z,自身面}实现消灭计数#pragma strictvar sd:int;var xm:int;function Update ( ) {if(gameObjext.transform.position.y<0){xm=gameObject.Find("Main Camera").GetComponent("sheji").xmshu++;sd=gameObject.Find("Main Camera").GetComponent("sheji").sdshu;gameObject.Fine("wenzi").GetComponent(GUIText).text="射弹数:"+sd+" 消灭数:"+xm;//判断消灭数是否大于20if(xm>20){gameObject.Fine("wenzi").GetComponent(GUIText).text="恭喜过关!继续努力!坚持学下去!";gameObject.Find("MainCamera").GetComponent("sheji").enabled=false; //把属性的对勾去掉,不起作用了//gameObject.Find("dimian").GetComponent(dm).enabled=true;//把属性的对勾加上,该属性又起作用了,激活}Destroy(gameObject);}}添加按钮#pragma strictvar sd:int;var xm:int;function Update ( ) {if(gameObjext.transform.position.y<0){xm=gameObject.Find("Main Camera").GetComponent("sheji").xmshu++; sd=gameObject.Find("Main Camera").GetComponent("sheji").sdshu;gameObject.Fine("wenzi").GetComponent(GUIText).text="射弹数:"+sd+" 消灭数:"+xm;//判断消灭数是否大于20if(xm>20){gameObject.Fine("wenzi").GetComponent(GUIText).text="恭喜过关!继续努力!坚持学下去!";gameObject.Find("MainCamera").GetComponent("sheji").enabled=false; //把属性的对勾去掉,不起作用了gameObject.Find("dimian").GetComponent(restart).enabled=true; //把属性的对勾加上,该属性又起作用了,激活}Destroy(gameObject);}}7、在游戏中添加音乐,并设置循环播放。
8、发布游戏,并添加天空盒子。
9、把游戏开始见面场景和游戏连接到一起。
四、实验中的问题以及心得要把源代码的场景名替换成自己设置的场景名否则两个场景无法连接到一起,通过这次实验我学会了通过U3D制作一个最基本的射击游戏,以及U3D这个程序应用的整体布局,对熟悉这个软件起到了非常大的作用。