前言

中山大学数据科学与计算机学院3D游戏课程学习记录博客。
游戏代码: gitee
参考师兄的博客: 师兄博客
游戏视频:bilibili

游戏要求

从商店下载游戏:“Kawaii” Tank 或 其他坦克模型,构建 AI 对战坦克。具体要求如下:

  • 使用“感知-思考-行为”模型,建模 AI 坦克;
  • 场景中要放置一些障碍阻挡对手视线;
  • 坦克需要放置一个矩阵包围盒触发器,以保证 AI 坦克能使用射线探测对手方位;
  • AI 坦克必须在有目标条件下使用导航,并能绕过障碍;
  • 实现人机对战。

游戏分析

整个游戏需要分成三部分来实现:设计场景、添加脚本、优化UI。

  • 在设计场景部分,需要布置游戏场景,然后使用寻路组件Navigation让坦克自动寻路。
  • 在添加脚本部分,编写脚本让电脑坦克进行自动寻路、攻击,玩家控制的坦克则在控制下攻击电脑坦克。
  • 在优化UI部分,让UI给玩家更好的游戏体验,比如实现血量显示,游戏提示等UI功能。

游戏实现

设计场景

1.学习Navigation组件,学习Navigation组件的内容我写到了另一篇博客中:Navigation组件学习。

2.设计游戏场景,使用Unity Assets Store 中的 Kawaii Tank 模型。

场景如下图:

把平面设置为可通过,房子和树设置为不可通过,然后Bake,可以得到下图:

添加脚本

1.首先需要脚本跟踪坦克移动,写PlaceTarget.cs:

public class PlaceTarget : MonoBehaviour
{public GameObject target;//获取对象NavMeshAgent mr;//记录对象的NavMeshAgent组件void Start(){//获取自身的NavMeshAgent组件}void Update(){//使用方法获取目标点坐标}
}

2.控制导弹发射,写Fire_Control_CS.cs:
控制电脑坦克在Update函数中实现:

void Update ()
{if (idScript.isPlayer) {#if UNITY_ANDROID || UNITY_IPHONEMobile_Input ();#elseDesktop_Input ();#endif} else{count = count + Time.deltaTime;if(count > 3.0f){Fire();count = 0;}}
}

上述代码控制电脑坦克3s开火一次。

控制玩家坦克在MainBody->Turret_Base->Cannon_Base中的Reload Time实现,建议改为0.5,不然打不过电脑。

3.控制坦克受到伤害,写Damage_Control_CS.cs中:
使用Update函数来控制坦克受到伤害:

void Update ()
{//通过血量的多少来判断行动方式if (idScript.isPlayer) {#if UNITY_ANDROID || UNITY_IPHONEif (CrossPlatformInputManager.GetButtonDown ("Destruct")) {#elseif (Input.GetKeyDown (KeyCode.Return)) {#endifStart_Destroying ();}}
}

使用Start_Destroying来判断坦克是否需要销毁,区分玩家坦克和电脑坦克的销毁:

void Start_Destroying ()
{//销毁坦克//玩家坦克和电脑坦克销毁方式不同
}

优化UI

可以显示血量,让玩家知道自己坦克的情况,写Damage_Display_CS.cs:
通过函数Get_Damage进行显示:

public void Get_Damage (float durability, float initialDurability)
{ // Called from "Damage_Control_CS".thisText.text = Mathf.Ceil (durability) + "/" + initialDurability;
}

通过UI组件辅助显示。

游戏效果


红框内为血条。

总结

本次游戏主要是学习到了Navigation巡路工具的使用,也大概明白了AI在游戏中的作用。

详细代码见Gitee仓库,游戏视频见bilibili.

Unity 3D游戏十一:坦克大战相关推荐

  1. Unity开发游戏--2D坦克大战(一)

    Unity开发游戏--2D坦克大战(一) 前言 开发环境 场景搭建 新建工程 导入素材 设置Camera 设置游戏窗口大小 保存场景 创建角色 创建图片角色 修改角色大小 生成Prefab 前言 游戏 ...

  2. Unity 3D做2D坦克大战,控制图片切换朝向的2种方法。

    老师 | Trigger 学习者 |小白 出品 | Siki 学院 第一种更换图片切换朝向的方法: public class Player:MonoBehaviour{public float mov ...

  3. Unity 3D做2D坦克大战--敌人自动攻击AI编写

    敌人AI攻击方法的编写 老师 | Trigger 学习者 |小白 出品 | Siki 学院 public class Enemy : MonoBehaviour {//属性值public float ...

  4. 超详细 Unity 大作业之 坦克大战

    本次大作业中,我选择的主题是制作一款简单的坦克大战小游戏,实现此项目借鉴并使用了BiliBili教程及资源和学姐的博,利用Unity自带的3D导航技术实现敌人坦克的自动导航. 演示视频:Unity大作 ...

  5. Unity 3D游戏代码编程学习教程 Full Guide To Unity 3D C#: Learn To Code Making 3D Games

    Unity 3D游戏代码编程学习教程 Full Guide To Unity 3D & C#: Learn To Code Making 3D Games Full Guide To Unit ...

  6. 《Unity 3D 游戏开发技术详解与典型案例》——1.3节第一个Unity 3D程序

    本节书摘来自异步社区<Unity 3D 游戏开发技术详解与典型案例>一书中的第1章,第1.3节第一个Unity 3D程序,作者 吴亚峰 , 于复兴,更多章节内容可以访问云栖社区" ...

  7. 雨松MOMO《Unity 3D游戏开发》源码公布

    原创文章如需转载请注明:转载自雨松MOMO程序研究院 本文链接地址:雨松MOMO<Unity 3D游戏开发>源码公布 下载源码时,首先大家请登陆图灵社区找到<Unity 3D游戏开发 ...

  8. 微信小游戏制作坦克大战(四)添加敌方坦克,敌方坦克可以随机移动

    微信小游戏制作坦克大战(四)添加敌方坦克,敌方坦克可以随机移动 首先导入敌方坦克素材 重命名为敌方坦克1 敌方坦克也移动到屏幕外面,后面使用克隆体来显示. 我们给敌方坦克添加事件 好的,现在敌方坦克已 ...

  9. 微信小游戏制作坦克大战(六)碰撞检测,主角坦克碰到敌方坦克、炮弹爆炸

    微信小游戏制作坦克大战(六)碰撞检测,主角坦克碰到敌方坦克.炮弹爆炸 导入坦克爆炸效果的图片和声音素材 给主角坦克添加事件 给爆炸动画添加事件 当主角坦克碰到敌方坦克或者炮弹时显示爆炸效果 下一篇文章 ...

  10. 【Unity 3D游戏开发】在Unity使用NoSQL数据库方法介绍

    随着游戏体积和功能的不断叠加,游戏中的数据也变得越来越庞杂,这其中既包括玩家产生的游戏存档等数据,例如关卡数.金币等,也包括游戏配置数据,例如每一关的配置情况.尽管Unity提供了PlayerPref ...

最新文章

  1. extjs2.0 ie8 下拉树_extjs自定义下拉树
  2. Windows窗口风格
  3. 带通 带阻滤波器 幅频响应_二阶有源带通滤波器设计
  4. 几种Win7/Windows共享虚拟无线网络的方法及区别
  5. android使碎片切换界面,玩转Android中的碎片Fragment
  6. php键值对数组排序,PHP按指定键值对二维数组进行排序的方法_PHP
  7. 高德地图车道级导航适配OPPO Find N折叠屏手机
  8. xunsearch全文检索初体验
  9. Latex写作学习——(大学生数学建模论文模板)
  10. 停车场管理系统 Java语言
  11. linux开发工具少_从设计到开发,我必不可少的10种工具
  12. python中if in是什么意思_python中的in是什么意思
  13. linux常用面试题
  14. 漫画网站服务器,建立家庭漫画服务器,从iPad上看漫画
  15. 永劫无间组装电脑配置推荐2021 玩永劫无间需要什么配置
  16. Go语言中的条件变量Cond
  17. 用一个uchar 类型表示八个通道的状态
  18. Java并发包:ExecutorService和ThreadPoolExecutor
  19. 最近邻插值与双线性插值
  20. 有考c语言的软件工程专硕吗,2020年南开大学软件工程硕士考研真题试卷及试题答案,C语言与数据结构考研试题下载...

热门文章

  1. 安卓模拟器最优选择+抖音检测全绕过简述
  2. 移动apn接入点哪个快_2020年北京移动电信联通校园卡5G网速究竟有多快?
  3. can协议crc计算_CAN协议中CRC编码的硬件实现
  4. 琴生不等式及其加权形式的证明
  5. Linuxnbsp;下摄像头驱动支持情况(…
  6. WeX5制作的app,界面模仿b站(哔哩哔哩弹幕视频网)客户端
  7. 《京东话费充值系统架构演进实践》读后感
  8. 软件测试中的心理学效应
  9. nodejs mysql process_nodeJS之进程process对象
  10. 计算机视觉主要完成哪些任务