文档库 最新最全的文档下载
当前位置:文档库 › 卢杰-基于Unity3D的坦克大战游戏的设计与实现

卢杰-基于Unity3D的坦克大战游戏的设计与实现

卢杰-基于Unity3D的坦克大战游戏的设计与实现
卢杰-基于Unity3D的坦克大战游戏的设计与实现

毕业实训报告

课题名称:基于Unity3d的坦克大战游戏的设计与实现专业:软件技术

班级: RZ软技154

学号:201560190410

学生姓名:卢杰

指导教师:赵冬

2017年5月15日

关于卢杰同学的实训鉴定

同学于年月日至年月日在我公司部门进行了毕业实训。

在实训中,该同学在

单位签章:

指导教师签字:

年月日

中原工学院

毕业实训任务书

中原工学院

毕业实训评审表

摘要

本文利用Unity3D跨平台功能的突出、兼容性强的特点,结合C#开发一款坦克大战的游戏系统,该系统运行流畅,具有较好的可玩性和跨平台性。

课题题目为基于Unity3D的坦克大战游戏的射击与开发,旨在成功的设计出一款可以在PC端运行的坦克游戏,在毕业设计完成时,坦克模型应该能再PC端运行。游戏中,我们可以利用鼠标、键盘来对我们的坦克进行前进后退,而且可以对坦克进行旋转以及发射炮弹,通过这次设计,自己也体验了技术实现的过程。

关键词:Unity3D;坦克大战游戏;游戏引擎

目录

摘要............................................................................................................................................ V 第1章项目概述 (1)

1.1项目背景 (1)

1.2技术路线 (1)

1.2.1 游戏设计与制作阶段 (1)

1.2.2 开发环境 (1)

1.3项目设计目标 (2)

第2章系统设计 (3)

2.1系统的整体设计 (3)

2.2系统的界面设计 (3)

2.2.1 游戏主菜单 (3)

2.2.2 游戏帮助界面 (4)

2.2.3 游戏结束界面 (4)

2.2.4 游戏主界面 (5)

2.2.5 主角模型 (5)

2.2.6 敌人模型 (6)

2.2.7 游戏地图模型 (6)

第3章游戏菜单界面实现 (8)

3.1按钮的实现 (8)

3.2游戏主菜单界面的实现 (8)

3.2.1 说明按钮 (8)

3.2.2 退出按钮 (8)

3.2.3 游戏开始按钮 (8)

3.3游戏帮助界面的实现 (9)

3.3.1 关闭按钮 (9)

3.3.2 游戏帮助文字 (9)

3.4游戏结束界面的实现 (9)

3.4.1 重新开始按钮 (9)

3.4.2 退出游戏按钮 (10)

3.4.3 分数显示 (10)

3.5游戏主界面的实现 (10)

3.5.1 重置按钮 (10)

3.5.2 退出按钮 (11)

3.5.2 游戏得分 (11)

第4章游戏主界面实现 (12)

4.1场景的搭建 (12)

4.2主角的功能实现 (12)

4.2.1移动 (12)

4.2.2攻击 (12)

4.2.3受到伤害 (13)

4.3摄像机的功能实现 (14)

4.3.1移动 (14)

4.3.2围绕主角旋转 (14)

4.3.3视野的拉近或拉远 (15)

4.4敌人的功能实现 (15)

4.4.1 生成 (15)

4.4.2 移动 (16)

4.4.3 攻击 (17)

4.4.4 受伤 (17)

4.5炮弹的碰撞检测 (18)

4.5.1 炮弹的身份 (18)

4.5.1 碰撞检测 (18)

第5章系统测试 (20)

5.1在U NITY3D中运行测试 (20)

5.2在PC中运行测试 (20)

5.3测试结果 (23)

第6章结束语 (24)

第1章项目概述

1.1 项目背景

随着社会的科技水平和经济水平的迅速发展,游戏行业以迅雷不及掩耳之势快速的发展着。现在的游戏行业和电影行业可以说已经站在同一高度,特别是3D技术的进步使得游戏在人们的日常生活中占据着重要的地位。在3D技术如此盛行的今天,游戏引擎收到的关注也持续高涨,目前主要的引擎有BigWorld引擎、Unreal Engine3虚幻引擎、Gamebryo 引擎、Unity3D引擎。相对于前三种引擎来说,Unity3D是最近几年才流行起来,但它由于完美的跨平台系统使他迅速的在引擎市场占据了重要的地位。本文将介绍一款以Unity3D为开发平台,结合C#的坦克大战游戏系统,该系统在保证运行效果的同时,具有设备要求低,跨平台性能好,运行流畅稳定的特点。

1.2 技术路线

1.2.1 游戏设计与制作阶段

在游戏设计的阶段就要想好这款游戏的大概内容,主题鲜明,并且具有良好的游戏乐趣,游戏内容丰富,符合我们日常生活中的逻辑规律。

1.2.2 开发环境

Unity3D

Unity是一款跨平台的游戏开发工具,从一开始就被设计成易于使用的产品。作为一个完全集成的专业级应用,Unity还是功能强大的游戏引擎。Unity3D是一个让你轻松创作的多平台的游戏开发工具,是一个全面整合的专业游戏引擎。

C#语言

C#是一种安全的、稳定的、简单的、优雅的,由C和C++衍生出来的面向对象的编程语言。它在继承C和C++强大功能的同时去掉了一些他们的复杂特性(例如没有宏以及不允许多重继承)。C#综合了VB简单的可视化操作和C++的高运行效率,以其强大的操作能力、-优雅的语法风格、创新的语言特性和便捷的面向组件编程的支持成为.NET开发的首选语言。

1.3 项目设计目标

本游戏应该具备如下界面和功能:

(1)界面设计的美观。

(2)主角进行移动和碰撞检测。

(3)敌人自动寻路以及自动攻击

(4)敌人的死亡与主角的死亡。

第2章系统设计

2.1 系统的整体设计

游戏系统设计主要包含主菜单界面、主场景和游戏结束场景这三大模块组成。其中在主菜单界面和游戏结束场景界面实现了按钮的点击事件;主场景是该游戏的主体,主角和敌人的逻辑都在该场景中实现。游戏的流程图如图2.1所示:

图2.1 游戏流程图

2.2 系统的界面设计

2.2.1 游戏主菜单

游戏主菜单如图2.2所示:

图2.2 游戏主菜单2.2.2 游戏帮助界面

游戏帮助界面如图2.3所示:

图2.3 游戏帮助界面2.2.3 游戏结束界面

游戏结束界面如图2.4所示:

图2.4 游戏结束界面2.2.4 游戏主界面

图2.5 游戏主界面2.2.5 主角模型

主角模型如图2.6所示:

图2.6 主角模型2.2.6 敌人模型

敌人模型如图2.7所示:

图2.7 敌人模型2.2.7 游戏地图模型

游戏地图模型如图2.8所示:

图2.8 游戏地图模型

第3章游戏菜单界面实现

本章包括按钮的制作和游戏介绍、帮助界面。这些事关联在一起的,通过点击对应的按钮来达到对应场景的切换。它们的制作主要利用UGUI(Unity3D的内置组件)来实现的。

3.1 按钮的实现

(1)按钮是由Image组件(需添加Button脚本,该脚本为Unity3D内置脚本)和Text 组件结合实现的。

(2)按钮的点击功能,在每个Button脚本下都有一个OnClick()(点击事件)方法可以绑定点击后需要实现的方法。然后将每个按钮的方法绑定上去即可实现按钮功能。

3.2 游戏主菜单界面的实现

3.2.1 说明按钮

(1)功能

说明按钮的功能是将游戏说明界面显示出来,也就是切换到游戏说明界面场景。

(2)代码如下

public void OnIntroButtonClick()

{

SceneManager.LoadScene("StartUI_Intro");

}

3.2.2 退出按钮

(1)功能

退出按钮的功能是将游戏退出。

(2)代码如下

public void OnExitButtonClick()

{

Application.Quit();

}

3.2.3 游戏开始按钮

(1)功能

游戏开始的功能是进入游戏主场景,也就是切换到游戏主场景。

(2)代码如下

public void OnStartButtonClick()

{

SceneManager.LoadScene("Main");

}

3.3 游戏帮助界面的实现

3.3.1 关闭按钮

(1)功能

关闭按钮的功能是关闭游戏帮助界面,回到游戏主菜单,也就是切换到游戏主菜单。(2)代码

public void OnCloseButtonClick()

{

SceneManager.LoadScene("StartUI");

}

3.3.2 游戏帮助文字

界面上的文字描述,主要是利用UGUI中的Label来实现。在Text属性里输入需要显示的内容,即可显示出来。如图3.1所示:

图3.1 游戏帮助Text

3.4 游戏结束界面的实现

3.4.1 重新开始按钮

(1)功能

重新开始按钮的功能是回到游戏主界面,也就是切换到游戏主界面

(2)代码

public void OnResetButtonClick()

{

SceneManager.LoadScene("Main");

}

3.4.2 退出游戏按钮

(1)功能

退出游戏按钮的功能是将游戏退出

(2)代码

public void OnExitButtonClick()

{

Application.Quit();

}

3.4.3 分数显示

(1)功能

分数显示是在游戏结束后将数据保存下来,切换到游戏结束场景后将数据读取并显示出来,然后将分数归0。

(2)代码

using UnityEngine.UI;

public Text score_Text;

void Start()

{

score_Text.text = "最终得分为:" + PlayerPrefs.GetString("分数") + "分";

PlayerPrefs.SetString("分数", "0");

}

3.5 游戏主界面的实现

3.5.1 重置按钮

(1)功能

重置功能按钮是将游戏回到刚开始游戏的样子,也就是重新加载本场景

(2)代码

public void OnResetButtonClick()

{

SceneManager.LoadScene("Main");

}

3.5.2 退出按钮

(1)功能

退出按钮的功能是回到游戏结束的界面,也就是将场景切换到游戏结束的场景。(2)代码

public void OnQuitButtonClick()

{

SceneManager.LoadScene("GameOver");

}

3.5.2 游戏得分

(1)功能

当击杀一个敌人后变增加分数,并且保存分数,将分数显示出来

(2)代码

public void ScoreAdd()

{

score.text = "分数:" + scoreNum + "分";

PlayerPrefs.SetString("分数", scoreNum.ToString());

}

第4章游戏主界面实现

4.1 场景的搭建

将Unity资源包(后缀名为.unitypackage)导入到项目当中,导入的方式为直接拖拽资源包至Project面板下,然后选择全部导入。

导入后选择场景模型,拖拽至Hierarchy面板,将模型的Transform组件Reset,场景的搭建就完成了。

4.2 主角的功能实现

首先在导入的资源包中找到主角模型,将其拖拽至Hierarchy面板。

4.2.1移动

(1)实现思路

在主角身上添加Rigidbody刚体组件,使用刚体组件通过horizontal轴和vertical轴来运动,W、S控制主角的前进和后退,A、D控制主角的左右旋转。刚体组件如图4.1所示。

图4.1 刚体组件

(2)代码

private void PlayerMove()

{

horizontal = Input.GetAxis("Horizontal");

vertical = Input.GetAxis("Vertical");

m_Rigidbody.velocity = transform.forward * vertical * moveSpeed;

m_Rigidbody.angularVelocity = transform.up * horizontal * angularSpeed;

}

4.2.2攻击

(1)实现思路

当按下鼠标左键的时候,在主角坦克的炮口这个位置,实例化一个炮弹,并且给子弹

一个向前发射的速度。

(2)代码

private void PlayerAttack()

{

if (Input.GetMouseButtonDown(0))

{

if(EventSystem.current.IsPointerOverGameObject())

{

return;

}

GameObject newShell = Instantiate(m_Shell, m_TankFire.position, m_TankFire.rotation) as

GameObject;

newShell.GetComponent().identity = playerIdentity;

newShell.GetComponent().velocity = newShell.transform.forward *

newShell.GetComponent().moveSpeed;

newShell.GetComponent().shellAttack = attack;

m_AudioSource.Play();

}

}

4.2.3受到伤害

(1)实现思路

当敌人的炮弹碰撞到主角时,将敌人的攻击力通过炮弹的传过来,使主角减少血量,当主角血量为0时,在主角的位置实例化一个坦克爆炸的特效,并且销毁主角这个对象。碰撞检测需要给主角加碰撞体组件。碰撞体组件如图4.2所示。

图4.2 刚体组件

(2)代码

public void PlayerBruise(float atk)

{

if (playerHp <= 0)

{

return;

相关文档