游戏开发实验报告
实 验 报 告
课程名称: 多媒体技术
实验题目: 系 别: 专 业: 班 级: 学 号: 姓 名: 指导教师:
实验日期:
一、实验目的:
通过本次实验使学生掌握用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
xm=gameObject.Find("Main Camera").GetComponent("sheji").xmshu++; sd=gameObject.Find("Main Camera").GetComponent("sheji").sdshu; gameObject.Fine("wenzi").GetComponent(GUIText).text="射弹数:
"+sd+" 消灭数:"+xm;
//判断消灭数是否大于20
if(xm>20){
gameObject.Fine("wenzi").GetComponent(GUIText).text="恭喜过关! 继续努力!坚持学下去!";
gameObject.Find("Main
Camera").GetComponent("sheji").enabled=false; //把属性的对勾去掉,不起作用了
//gameObject.Find("dimian").GetComponent(dm).enabled=true; //把属性的对勾加上,该属性又起作用了,激活
}
Destroy(gameObject);
}
}
添加按钮
#pragma strict
var sd:int;
var xm:int;
function Update ( ) {
if(gameObjext.transform.position.y
xm=gameObject.Find("Main Camera").GetComponent("sheji").xmshu++; sd=gameObject.Find("Main Camera").GetComponent("sheji").sdshu; gameObject.Fine("wenzi").GetComponent(GUIText).text="射弹数:"+sd+" 消灭数:"+xm;
//判断消灭数是否大于20
if(xm>20){
gameObject.Fine("wenzi").GetComponent(GUIText).text="恭喜过关!继续努力!坚持学下去!";
gameObject.Find("Main
Camera").GetComponent("sheji").enabled=false; //把属性的对勾去掉,不起作用了
gameObject.Find("dimian").GetComponent(restart).enabled=true; //把属性的对勾加上,该属性又起作用了,激活
}
Destroy(gameObject);
}
}
7、在游戏中添加音乐,并设置循环播放。
8、发布游戏,并添加天空盒子。
9、把游戏开始见面场景和游戏连接到一起。
四、实验中的问题以及心得
要把源代码的场景名替换成自己设置的场景名否则两个场景无法连接到一起,通过这次实验我学会了通过U3D 制作一个最基本的射击游戏,以及U3D 这个程序应用的整体布局,对熟悉这个软件起到了非常大的作用。