游戏开发实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验报告
课程名称:多媒体技术
实验题目:用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 strict
function 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 strict
function Start() {
Destroy(gameObject,3.0);
}
发射炮弹
pragma strict
function 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 strict
var 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="射弹数: