赞
踩
Behavior Designer是一个行为树插件,是一款为了让策划,程序员,美术人员方便使用的可视化
编辑器。Behavior Designer提供了强大的AP1可以让你轻松的创建tasks(任务),配合
uScript和PlayMaker这样的插件,可以不费吹灰之力就能够创建出强大的Al系统,而无需写
行代码。(不懂PlayMaker
的,我后面在单独出文章介绍一下,可以期待一下)
BehaviorDesigner插件的基础使用,发哥已经做了详细的介绍了,但是我发现例子很少,于是就有了这篇文章,我自己琢磨实现一个简单的BOSS的AI行为树,把思路分享出来,你可以依据这些思路进行再扩展
不懂BehaviorDesigner基础操作的可以去看发哥的这篇文章:BehaviorDesigner插件制作AI行为树
1、AssetStore下载
插件可以在AssetStore下载到,地址:https://assetstore.unity.com/packages/tools/visual-scripting/behavior-designer-behavior-trees-for-everyone-15277
2.我放了1.7.1版本的到GitCode上,地址:
https://gitcode.net/unity1/unitybehaviordesigner
新建2d项目,搭建环境,主角和敌人boss,给boss新增animator动画,大致连线
导入BehaviorDesigner插件,点击菜单Tools/Behavior Designer/Editor即可打开编辑器窗口
并在敌人身上创建行为树,空格,新增Repeater节点,并勾选永远循环
打印测试,sequence节点控制从左到右执行
每3秒打印"打印日志"
运行效果
新增脚本Attack
using UnityEngine; using BehaviorDesigner.Runtime; using BehaviorDesigner.Runtime.Tasks; public class Attack : Action { public Animator animator; public GameObject player; public override void OnStart(){ //切换动画状态为攻击 animator.SetTrigger("Attack"); } public override void OnEnd(){ Debug.Log("打印2"); } }
运行效果,敌人每3秒发动一次攻击
新增FacePlayer脚本
using BehaviorDesigner.Runtime.Tasks; using UnityEngine; //始终面向主角 public class FacePlayer : Action { private float baseScaleX; public GameObject player; public override void OnAwake() { baseScaleX = transform.localScale.x; } public override TaskStatus OnUpdate() { Vector3 scale = transform.localScale; scale.x = transform.position.x > player.transform.position.x ? baseScaleX : -baseScaleX; transform.localScale = scale; return TaskStatus.Success; } }
运行效果,先朝向玩家再发起攻击
新增Cast脚本
using UnityEngine;
using BehaviorDesigner.Runtime.Tasks;
public class Cast : Action
{
public GameObject player;
public GameObject spell;
public override void OnStart(){
//生成技能攻击特效
float playerH = player.gameObject.GetComponent<SpriteRenderer>().sprite.bounds.size.y; //通过SpriteRenderer获得人物高度
Object.Instantiate(spell, player.transform.position + new Vector3(0, playerH, 0), Quaternion.identity);
}
}
这次我们用Set Trigger节点控制动画切换
运行效果,大概流程就是开始等待3秒,面朝主角,切换动画为魔法攻击动作,再等待0.5秒后切换回Idle动画,并运行Cast代码,触发攻击特效,一直循环
关键就是
Random Selector
节点的使用
中间插入Random Selector节点,分别连接两种攻击模式,运行效果
你可能还希望boss在不同阶段有不同的效果,比如半血以下狂暴,不同技能等
新增IsHealthUnder脚本,我这里就简单举个例子
using BehaviorDesigner.Runtime.Tasks;
public class IsHealthUnder : Action
{
public float health;
public override TaskStatus OnUpdate()
{
return health < 50 ? TaskStatus.Success : TaskStatus.Failure;
}
}
新增Selector节点
运行效果,因为是测试,我这里就手动改敌人的血量了
当血量低于50时,处于第二阶段,就会走左边,打印日志,你可以在这里加入敌人新的状态和技能,或者过场动画
当血量大于100时,处于第一阶段,敌人还是正常走前面的逻辑
如果还是不懂的小伙伴,我推荐两个视频,大家可以自行去学习
【视频1】使用行为树在UNITY中重现假骑士Boss战(空洞骑士)
【视频2】使用行为树在UNITY中重现大黄蜂Boss战(空洞骑士)
https://gitcode.net/unity1/unity-ai-behavior
赠人玫瑰,手有余香!如果文章内容对你有所帮助,请不要吝啬你的点赞评论和关注
,以便我第一时间收到反馈,你的每一次支持
都是我不断创作的最大动力。当然如果你发现了文章中存在错误
或者有更好的解决方法
,也欢迎评论私信告诉我哦!
好了,我是向宇
,https://xiangyu.blog.csdn.net
一位在小公司默默奋斗的开发者,出于兴趣爱好,于是最近才开始自习unity。如果你遇到任何问题,也欢迎你评论私信找我, 虽然有些问题我可能也不一定会,但是我会查阅各方资料,争取给出最好的建议,希望可以帮助更多想学编程的人,共勉~
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。