这是一篇残缺不全的记录……

Unity寻路所有的资料大概都是NavMesh吧。本来这一块跟我没啥关系,后来队友告诉我:NavMesh没法模拟坦克的转向。
我也不知道是怎样勇气打算试一下机器学习?反正最后凉了想看解决方法的散了吧……

配环境啥的都不说了。
agent的移动方式是转向和向前向后运动,就是基本的坦克的运动。
提醒一个问题就是如果是用

Input.GetAxis("Vertical")

来判断方向的话,这个值在brain设置为player的时候是对的但是在训练的时候是0……

一开始设计的是

  • 奖励

    • +2 看到目标(正前方的射线检测到目标并且在一定距离内)
    • -0.01 每步
    • +0.02 如果这一次比上一次更接近目标点
    • -1 坦克掉下去
  • 重置条件
    • 坦克的 y < 正常值(掉了下去)
    • 目标的 y < 正常值(也是掉下去了)
    • 坦克长期不移动(可能卡在了哪里)
    • 目标在坦克视线范围内

我还加过一个重置条件是当超过一定时间还没有找到目标的时候,重置目标的位置。无法评价这个决策的好坏……就不在这里加了。

这样训练的结果是,坦克开始疯狂撞墙——可能是由于它找到目标的概率太低了。

于是我开始考虑增加找到目标的概率。
虽然坦克需要处于攻击状态的话,最后是要面向目标。但是一旦我方的坦克和对方之间没有障碍物的话,就意味着我可以在后期通过转向来解决面向目标这个问题。
于是奖励改为

  • +2 能够看到目标(坦克朝着目标方向发射,能检测到目标)

即使这样,坦克也还在撞墙……因为设置的是离散的碰撞检测,所以坦克偶尔会穿透外墙(真努力啊……)掉下去。可能觉得这样的重置条件比较容易满足……
觉得设成连续的成本太高了,于是随手加了一道惩罚

  • -1 坦克撞墙

然后坦克果然不撞墙了——
它开始左右横跳。

原因大概就是,我给(接近目的地)的奖励太高了。让它觉得(拿一半奖励是一个不差的选择……)
于是修改为

  • -0.001 * 坦克到目标的距离

然后它也不跳了。我也不知道发生了啥全世界乱走……走到不知道哪就愣住不动了……啊啊啊……

因为等很久也就偶尔的遇到那么一两次目标。感觉这样训练成本太高了……而且好像Unity的训练还用的CPU……想想就很绝望。

于是懒惰的我开始寻找其他解决方案。
我找的两个方案。
https://connect.unity.com/p/pancake-bot?_ga=2.77336086.286916845.1531878685-422510572.1515301463
这个网站中的Pass the butter
以及例程中的
https://github.com/Unity-Technologies/ml-agents/blob/master/docs/Learning-Environment-Examples.md#pyramids

非常的神奇的一点就是,Unity的ML感觉有一种看着它发展起来的感觉。对比一下中英文文档可以看到历史版本和现在的版本……这个例程也是这几个月才发布的。可能对于感觉自己一直学着上世纪知识的我第一次感觉到开发的进程?(雾)
或许几个月后Unity就发展到,我就不需要思考这个问题了。

从效果看我选了例程那一个(突然找不到视频了但是效果真的蛮好的……可以下下来跑跑看)。
它的条件非常的简单,只有

  • Agent Reward Function (independent):

    • +2 For moving to golden brick (minus 0.001 per step).

不知道训练了多久能到这个效果……
照这个情况,理论上我之前的模型效果肯定不会差啊(怎么就这么随意的凉了)。

不管了努力的迁移一下……
(找不到视频真难过)

黑色的射线是小物体在不断的找开关,接触到了开关之后会出现目标点,目标点还在空中。这个场景其实蛮好的,因为它不需要全局信息,模拟出的结果就是(坦克在不知道敌人在哪的时候不断的寻找,如果你能够躲在什么物体后面的话它会看不到你。)但是理想很美好……
不管怎么说,我认为只要让本来传入开关的参数一直设为false,这样这个物体就会不断的寻找关闭着的开关。
为了达到坦克远程射击的效果,在行为树的上层插入(判断和目标直接的连线有没有遮挡)。这样就能实现和之前类似的效果。
我觉得效果还行,看起来最后的问题应该就是调整一下在真实场景里的尺寸就行了。
于是我尝试把坦克扔进了我们的游戏场景。
但是一运行坦克又开始疯狂撞墙……
调了很久的参数,还是没有办法达到一个足够好的效果。总是转个向就撞了之类的。

就这样我发现我们的游戏和训练的场景还是有比较大的差距的。或许这个场景在它的眼中类似于

我不是指只有一条可以到达的路……而是,我站在中间,可能周围的东西离我非常的近。
之前的场景,agent可以做到一直往前移动,而训练结果也确实是这样的。它不断交替转向和前进的命令,就可以实现转弯。而在现在的场景里,很多时候仅仅转弯是不够的,很可能需要坦克在原地的转向。而这种拥塞的地形是这个训练模型无法达到的……

还能怎么办呢……我现在在认真考虑要不要手撸一个寻路算法…

转载于:https://www.cnblogs.com/BirdCage/p/9973997.html

【Unity】 坦克寻路相关推荐

  1. Unity导航寻路系统插件--A* Pathfinding Project

    Unity的A*寻路是很常用的功能,比如LOL里面的鼠标点击行走,那么一般情况下做这个导航寻路系统的时候会用两种方式去完成,第一种就是Unity里面自带的NavMeshAgent,第二种就是在Unit ...

  2. unity坦克大战(一)

    前面简单的 介绍了unity的一些功能和方法,从现在开始,我们就以一个游戏实例(坦克大战)来讲解unity游戏开发,因为我之前也是看别的教程学习的所以所以可能和别人做法的一样,现在我是一边做一边写,在 ...

  3. unity 坦克大战 (一)

    本周学习了坦克大战的初步实现,使用unity重现坦克大战. 选项界面搭建,裁剪好图片搭至以下样式. 创建新场景,实现转场效果. 代码如下: using System.Collections; usin ...

  4. Unity坦克控制行走程序

    实现目标 使用WS键控制坦克前进和后退,AD控制坦克原地旋转 代码详解 分别设置坦克旋转和行进的速度为steer和speed,他们都应该为float类型,我们可以将两个变量公开,以便我们在游戏界面进行 ...

  5. unity坦克发射炮弹,并显示特效

    步骤 给坦克在发射炮口的位置添加一个空物体,用来得到实例化炮弹的位置,z轴为方向. 在tank的脚本中,得到空物体的位置,并初始化炮弹,再给炮弹一个初始速度,因为添加了rigibody刚体组件,飞行会 ...

  6. Unity Navigation寻路系统并画出指引线

    前言 寻路系统是游戏中很常用的一个功能,角色要达到某一点,需要系统给出一个路径,这样可以帮助玩家规划出路径,提示玩家到达,这种功能在各种类型的游戏中都有大量的应用 本案例通过Navigation实现寻 ...

  7. Unity 导航寻路快速上手

    搭建一个基本的寻路系统 寻路角色与场景 创建一个胶囊体作为玩家,添加刚体组件,并且冻结所有旋转和 y 轴的位置: 之后为玩家添加导航网格代理组件,即 NavMeshAgent 添加外部的场景模型(或者 ...

  8. 详解Unity中的Nav Mesh新特性|导航寻路系统 (二)

    前言 第一篇我们简要概述了新版NavMesh的一些新增功能,以及旧版的对比.本篇我们来讲一讲NavMeshSurface.NavMeshLink这两个组件的参数以及如何应用,接下来就进入正题吧. 本系 ...

  9. Unity 2D手游——坦克大战 C#

    需要下载项目的朋友,请打开CSDN链接:Unity2D坦克大战项目工程 本项目涉及到的功能: 1.UI部分: a .游戏开始界面UI       b.主场景UI      c.游戏胜利界面UI     ...

最新文章

  1. C++的集成开发环境(IDE)
  2. java文件名与class关系
  3. 【PC工具】更高效更快乐地复制粘贴工具CopyQ
  4. 5新标签中超链接_一环路新标签——“市井生活圈” 正在更新中......
  5. 有效的MongoDB索引
  6. HTML + CSS 为何得不到编程界的认可?
  7. android PowerManager 权限问题
  8. 信号与系统——有关卷积的意义
  9. 常用c语言代码大全,C经典程序代码大全.docx
  10. ElasticSearch 多字段分组求和
  11. php 死链查询,网站最新死链查询和处理方法
  12. 神经网络的BP算法推导详解
  13. php 输入经纬度查询位置,根据经纬度查询附近地点信息
  14. 如何安装故障恢复控制台
  15. 操作系统基本原理 操作系统的功能
  16. 开源/免费的视频会议:openmeetings的详细安装步骤
  17. 关于网络广告的的概念
  18. 单波段彩色变换(伪彩色密度分割)
  19. 0.96寸OLED屏幕_清行
  20. cup过高是什么意思_cpu占用率过高是什么原因

热门文章

  1. 数据同步或灾备中的RTO和RPO定义
  2. 怎么样把电脑的可执行文件exe转为手机的可执行文件apk
  3. 用3种方式打开下载链接
  4. 向量图 正弦交流电路_如图所示为 R - L - C 串联的正弦交流电路相量图,取 为参考相量,电压电流为关联方向,当 X C X L 时,相量图为图 。_学小易找答案...
  5. 京东JIMDB(Jingdong In Memory DataBase,京东内存数据库)
  6. 列表标签,自定义列表,img标签,超链接a标签
  7. ACL 2022 | 字节跳动与新加坡科技与设计大学提出:基于演绎推理的数学解题
  8. hadoop 指标说明
  9. The Elements of Style 4ed ---英文写作指南(二)
  10. 浏览器和内核的发展史