ML-Agents是Unity开发智能AI的利器,但是学习曲线相对陡峭,需要一些机器学习算法的理解,经过使用训练模式、好奇心模式的经历,总结一些使用技巧,供爱好者参考。
1.训练模式是老师带学生的模式,玩家通过操作AI,与Agents AI具有相同的参数,只不过用人工替代了电脑大脑的控制和判断,也就是Actions的决策选择。人工的操作不但能让AI学习移动和一些操作,AI还能继续使用加强学习的算法进行大脑的双向训练。配置过程相对麻烦,可以参考官方示例。
2.对于一些复杂环境和多操作,比如要在躲避的过程中还选择攻击,在捡拾道具和攻击、逃跑中做优化寻泽,这种复杂的情况下,尽量开启好奇心模式,在trainer.ymal配置中修改好奇心参数为true。这样会尽量杜绝AI原地打转,浪费训练时间,也完全达不到使用目标和要求。
3.一些简单的训练场景一般都容易实现目标,但是像我们的正常游戏中,AI的操作动作都比较多,场景也比较复杂,比如各种石头、墙壁等具有碰撞体的检测,因此在基础训练满足后,就要将复杂的真实场景进行训练场景的搭建,个人觉得这个步骤很关键,不要单纯的降低训练环境实现大脑文件生成,若此,AI到真实场景中就容易钻入一些复杂环境无法进行智能判断。
4.一劳永逸的摄像机模式不能使用,开始就卡死,不清楚是什么问题,个人感觉跟显卡没有关系,因为我配置的模式是CPU模式。
5.AI的技能训练尽量不用真实技能,可以用射线碰撞代替射线类技能,训练完毕后,将真实技能参数调整到射线碰撞的参数,比如距离、有效半径等。
6.在重写动作控制的方法时,尽量添加一些基本的限制条件,比如22m内如果没有检测到攻击目标的存在就不要释放20m范围攻击的技能,明显攻击不到敌人。
7.代码部分
查找范围敌人并排序
public Transform ClosestEnemy(float viewRange) {
var cols = new List(Physics.OverlapSphere(transform.position, viewRange, enemyMask));
cols.Remove(m_collider);
var firstOrDefault = cols.OrderBy(x => Vector3.Distance(transform.position, x.transform.position)).FirstOrDefault();
return firstOrDefault != null ? firstOrDefault.transform : null;
}