首页 > 编程语言 > 详细

Unity进阶:行为树 02 夺旗战搭建场景,AI脚本,旗子拿起

时间:2019-08-27 10:34:43      阅读:100      评论:0      收藏:0      [点我收藏+]

版权申明:

  • 本文原创首发于以下网站:
  1. 博客园『优梦创客』的空间:https://www.cnblogs.com/raymondking123
  2. 优梦创客的官方博客:https://91make.top
  3. 优梦创客的游戏讲堂:https://91make.ke.qq.com
  4. 『优梦创客』的微信公众号:umaketop
  • 您可以自由转载,但必须加入完整的版权声明

场景搭建效果图

技术分享图片

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

技术分享图片
Decorators:对单个任务进行操作
Composites:复合任务
Conditionals:做判断
Actions:做行为

行为树1找旗帜

Flee远离目标
Inverter:取反
创建全局变量:OffenseSpeed,AngularSpeed。
原理:是否看到敌人,没看到取反去找旗帜,看到敌人远离敌人,Sequence的中断类型选Self
技术分享图片

找旗帜行为树样板
技术分享图片

添加行为树
技术分享图片

添加注释
技术分享图片

创建全局变量
技术分享图片

可以切换行为树

行为树2找到旗帜去终点

技术分享图片

拿到旗帜去终点,未拿到旗帜,追旗帜
脚本判断是否拿到旗帜,运行成功失败。

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>();

        }
    }
}

Unity进阶:行为树 02 夺旗战搭建场景,AI脚本,旗子拿起

原文:https://www.cnblogs.com/raymondking123/p/11416296.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!