基于Unity3D的AR射击游戏设计与实现

目录
摘 要 1
ABSTRACT 2
第1章绪论 4
1.1 项目概况 4
1.2 课题研究背景和意义 4
1.2.1 课题研究背景 4
1.2.2 课题研究目的 5
1.3 国内外研究现状 6
1.4 SLAM 算法简介 8
1.5 AR 不是 VR 9
1.6 AR 游戏介绍 10
1.6.1 AR游戏–新的游玩方式 10
1.6.2 从《AR-Quake》到《Pokemon GO》 11
1.7 本章小结 13
第二章关键技术简介 14
2.1 ARCore 简介 14
2.1.1 ARCore 主要功能 14
2.1.2 ARCore 的交互方式 14
2.1.3 为何选择 ARCore 15
2.2 Unity3D 使用 ARCore 开发工具包 15
2.2.1 开发环境硬件需求 15
2.2.2 开发环境软件要求 16
2.2.3 将 ARCore 导入到 Unity 中 16
2.2.4 配置构建设置 16
2.2.5 构建并调试 18
2.3 DoTween 简介 18
2.3.1 补间动画 18
2.3.2 Dotween 常用功能 18
2.3.3 Dotween 的基本使用 19
2.4 本章小结 22
第三章概要设计 23
3.1 实验方案 23
3.2 游戏设计思路 23
3.2.1 游戏玩法设计 23
3.2.2 游戏流程设计 24
3.3 预期结果 25
3.4 程序设计思路 27
3.4.1 程序流程 27
3.4.2 程序架构 27
3.5 程序模块设计 28
1 游戏控制模块 GameManage:包含控制整个游戏的流程 28
2 平面识别模块 DetectedPlane:这部分用于平面的检测 28
3 怪物模块 Monster:包含怪物的行为控制以及数据等 28
4 枪炮模块 Turret:这部分包含枪炮的控制以及数据 28
3.6 美术准备 29
3.7 本章小结 30
第四章详细开发流程和结果 31
4.1.1 主要游戏场景 Hierarchy 结构介绍 31
4.1.2 项目文件介绍 31
4.2 主要构建流程 32
4.2.1 前期准备 32
4.2.2 游戏场景搭建 33
4.2.3 平面识别 38
4.2.4 其他各预制件的处理 41
4.3 游戏最终效果 49
4.4 本章小结 53
第五章总结和展望 54
5.1 总结 54
5.2 展望 54
参考文献 56
第三章概要设计
3.1 实验方案
设计好游戏内容。根据游戏开发[16]流程,制作一个游戏,起初是先提出一个游戏的方案,也就是游戏策划,包括游戏的类型,游戏的内容是什么。根据初步设想游戏类型为 FPS 即第一人称射击类,手机屏幕中将会生成怪物,在屏幕的下方有枪一类的模型,以及一个开枪按钮,通过点击按钮,枪将会发射子弹,子弹大中怪物一定的次数可将怪物从屏幕中去掉,此过程中怪物也会对玩家进行攻击,玩家视角将会随着玩家手机方向的改变进行改变。
2 确定好游戏内容后,查找当前的 AR 工具开发包,开发包应该满足这几个条件:
能支持安卓手机且应该支持小米 8(测试手机为小米 8 安卓机);可以导入到 Unity3D 中进行开发使用(题目为基于 Unity3D 的 AR 游戏开发);该组件可以支持平面检测而不只是对图片进行识别然后生成虚拟物体(保留条件,最佳情况是如此);综上最后选择的是 ARCore 组件作为 AR 工具开发包。

3建立项目进行编码以及游戏场景搭建。
4 测试,是否达到预期结果,否则返回 3)继续编码。
3.2 游戏设计思路
3.2.1 游戏玩法设计
游戏类型:为第一人称射击类游戏[17],游戏场景为手机摄像头拍摄到的现实世界场景,通过识别现实三维世界的水平平面在水平方向上会生成一定数量的怪物,在屏幕下方通过点击开火按钮,枪械将会发射子弹,子弹接触到怪物会给怪物带来一定的伤害,伤害累计到一定程度将会破坏掉怪物。本文转载自http://www.biyezuopin.vip/onews.asp?id=14915怪物也会随机移动,并不定时攻击玩家,游戏内表现为怪物冲向手机显示屏(仅仅只是玩家正对着的怪物),玩家被攻击时手机会震动,以提示玩家正在被攻击,同样的玩家受到一定的伤害后游戏结束,游戏结束显示得分。
4.2.4 其他各预制件的处理

(1)怪物 prefab 的处理:首先为怪物 prefab 添加刚体 Rigidbody 和碰撞体这里用 Box Collider 将刚体中的 Constraints 选项的全勾选上[21],这样当碰撞体的时候就不会被撞到改变运动的角度和及其所在坐标,否者物体会突兀的改变现状显得不自然,比如突然出现在某个地方。然后创建一个 MonsterController 脚本用来控制 Monster,将脚本挂载在怪物预制件上。其关键代码如下。其

中 monsterAttack()是怪物攻击玩家时会进行的操作,Damage()方法则是子弹攻击怪物后的伤害评定,当怪物被子弹打中时,除了会收到伤害,还会利用 Dotween 工具的 DOShakePosition 方法将怪物展示震动效果。其关键代码为

void Damage()

{
    
    

int hp = monster.GetHp();

if (hp <= 0) return;

hp -= UnityEngine.Random.Range(10, 20);

monster.SetHp(hp);

transform.DOShakePosition(1, new Vector3(0, 1, 0));

if (hp <= 0)

{
    
    

ar.getGameManage().GetPlayerData().SetScore();

GameObject.Destroy(this.gameObject);

}

}


,OnCollisionEnter()方法是处理怪物与玩家碰撞后的影响。



private void monsterAttack()

{
    
    

_monsterAnim.Play("attack");

}

public static void Shock() {
    
    

Handheld.Vibrate();

}

void OnCollisionEnter(Collision other) {
    
    

if (other.collider.tag == "Player") {
    
    

Shock();

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/newlw/article/details/127039453