内容纲要

场景搭建效果图

行为树夺旗战搭建场景,AI脚本,旗子拿起插图

展示图GIF(夺旗,夺旗后去终点)

行为树夺旗战搭建场景,AI脚本,旗子拿起插图(1)
Decorators:对单个任务进行操作
Composites:复合任务
Conditionals:做判断
Actions:做行为

行为树1找旗帜

Flee远离目标
Inverter:取反
创建全局变量:OffenseSpeed,AngularSpeed。
原理:是否看到敌人,没看到取反去找旗帜,看到敌人远离敌人,Sequence的中断类型选Self
行为树夺旗战搭建场景,AI脚本,旗子拿起插图(2)
找旗帜行为树样板

行为树夺旗战搭建场景,AI脚本,旗子拿起插图(3)
添加行为树

行为树夺旗战搭建场景,AI脚本,旗子拿起插图(4)
添加注释

行为树夺旗战搭建场景,AI脚本,旗子拿起插图(5)
创建全局变量

行为树夺旗战搭建场景,AI脚本,旗子拿起插图(6)
可以切换行为树

行为树2找到旗帜去终点

行为树夺旗战搭建场景,AI脚本,旗子拿起插图(7)
拿到旗帜去终点,未拿到旗帜,追旗帜
脚本判断是否拿到旗帜,运行成功失败。

public class IsHasFlag :Conditional {
    private Offense offense;
    public override void OnAwake()
    {
        offense = this.GetComponent<Offense>();
    }
    public override TaskStatus OnUpdate()
    {
        if (offense.hasFlag)
        {
            return TaskStatus.Success;
        }
        return TaskStatus.Failure;
    }
}

旗帜上面添加脚本,判断是否与tag为玩家的发生碰撞,发生碰撞给一个boll值,并让旗子碰撞玩家坐标相等,做出带着旗子走的样子

   private Offense owner;
    public void OnTriggerEnter(Collider other)
    {
        if (other.tag == "Offense")
        {
            if (owner != null)
            {
                owner.hasFlag = false;
            }
            other.GetComponent<Offense>().hasFlag = true;
            transform.parent = other.transform;
            owner = other.GetComponent<Offense>();

        }
    }
}

做成预制体,摆放两个玩家

1 对 “行为树夺旗战搭建场景,AI脚本,旗子拿起”的想法;

发表评论