开启辅助访问
 找回密码
 注册帐号

扫一扫,访问微社区

开发者专栏

关注:1667

当前位置:游戏蛮牛 技术专区 开发者专栏

__________________________________________________________________________________
开发者干货区版块规则:

  1、文章必须是图文形式。(至少2幅图)
      2、文章字数必须保持在1500字节以上。(编辑器右下角有字数检查)
      3、本版块只支持在游戏蛮牛原创首发,不支持转载。
      4、本版块回复不得无意义,如:顶、呵呵、不错......【真的会扣分的哦】
      5、......
__________________________________________________________________________________
查看: 3087|回复: 18

[云图] behave行为树学习使用第一天

[复制链接]  [移动端链接]
抢楼 抢楼 本帖为抢楼帖,欢迎抢楼! 
排名
347
昨日变化
2

43

主题

353

帖子

3972

积分

Rank: 9Rank: 9Rank: 9

UID
42814
好友
32
蛮牛币
5949
威望
0
注册时间
2014-8-31
在线时间
1220 小时
最后登录
2017-4-24

专栏作家

QQ
发表于 2015-11-19 17:01:08 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?注册帐号

x
最近在学习使用行为树做AI,决定把学到的贡献出来,抛砖引玉,希望可以认识到更多大牛

-- 首先我们了解下什么是行为树和为什么要使用行为树。
  在我们项目中如果需要做一个AI敌人,比如做一个手游 某民突击里面的普通步兵,那么这个步兵的基本ai 就是 从出生点出来后获取一个躲避点,然后向躲避点跑动,当到达躲避点后,开始做各种动作 向玩家开枪,当开枪完后执行躲避动作,躲避动作完成后可能继续开枪,或者又跑到其他躲避点,然后就是一个循环。 那么做这个ai 一般会用fsm状态机来写,通过不同的状态 来调用具体的方法,状态机有效的解决了代码的扩展性问题,使得开发变得很清晰,代码之间的耦合性也分的比较好。 但是,状态机也有些弊端,比如代码不能重用,如果一个项目特别的大,状态之间的切换会变得很复杂,维护状态机也会变得麻烦。所以这个时候就需要用行为树来做解决方案了。当然,这里指的是状态机做得足够大才会出现的问题,目前我做的ai还不至于到状态机撑爆,那你说我为什么我还要学行为树呢 , zzz.png 没错 ,就是为了学(zhuang)习(bi)。
好,废话说了那么多,那我们现在来进入正题。
-------
首先我们用的是Behave 行为树插件,目前这个插件好像unity商店已经没有了,我会在后面提供给大家。
首先导入这个插件, 会在项目中出现一个 1.png 这样的文件夹,里面就包含了全部behave插件的内容了
然后我们点击project的create library 2.png   创建一个 库 然后点击这个库  inspector 面板就会出现几个选项 ,我们点击edit library
然后unity会多出来两个窗口 一个behave editor 和 behave browse  我们的行为树就是在这两个面板进行创建和编辑了 然后我们点击 behave browse  面板的create
create一个collection  ,继续 再create一个tree 这样我们就有一个空的行为树了 ,接下来 我们选中新创建的NewTree1 在behave editor面板就会多出来7个选项在下面,
这7个就是我们要学的行为树的内容了  后面我会逐个介绍 , 首先介绍 那个小圆圈的那个 就是一个行为节点 ,我们把小圆圈拖到上面,然后改名叫MyAction,
然后在顶部中间的方块拉出一条线,连线到我们的小圆圈顶上,这样就建立起来了一个连接。 2-2.png
ok,现在我们画出来了一个行为节点,怎么去执行这个节点呢,或者说去编辑这个节点的代码呢 ,这时候我们新建一个脚本,就叫MyAction.cs
然后添加引用
using Behave.Runtime;
using Tree = Behave.Runtime.Tree;
声明一个静态变量,再引用行为树。
在MonoBehaviour后面再加一个继承,IAgent 接口,然后实现这些方法 。
增加一个类Tree m_Tree;
再改写Start方法为 IEnumerator Start()
Start方法使用库里面的InstantiateTree 静态方法,再用一个死循环来调用一个AIUpdate方法 在AIUpdate里面执行 行为树的Tick() 方法,每当行为节点被调用时,都会调用这个Tick方法就是实例的默认方法,我们开始重新改写这几个方法,换成我们自己的方法。

好,现在我们开始改写从接口实现下来的方法,一共有3个

public void Reset(Tree sender){  }




public int SelectTopPriority(Tree sender, params int[] IDs){






return 0;

  }






public BehaveResult Tick(Tree sender, bool init) {






  Debug.Log("调用系统的Tick方法 " +
            (BLAgentBehaveLib.IsAction(sender.ActiveID) ? "Action " : "Decorator ") + " ... " +
            (BLAgentBehaveLib.IsAction(sender.ActiveID) ? ((BLAgentBehaveLib.ActionType)sender.ActiveID).ToString() :
            ((BLAgentBehaveLib.DecoratorType)sender.ActiveID).ToString())
        );
                return BehaveResult.Success;







   }







  这里的tick 就会输入我们自己的tick方法了
好了,这个时候就到我们刚才的MyAction的行为节点的代码了
现在 ,我们开始加入实现MyAction 节点的代码   这里有个命名规则
BehaveResult Tick+"你的行为节点的名字"+Action(Tree sender)
[C#] 纯文本查看 复制代码
  public BehaveResult TickMyactionAction(Tree sender)
    {
        Debug.Log("我的action");
        return BehaveResult.Success;
    }


记住,脚本的方法名字一定要和行为节点一模一样  否则他就调不到,就回去调Tick方法了
这时候你的代码应该是这样的  
2-5.png

然后我们运行一下,就可以看到我们写的myAction方法了
2-4.png

好了,我们第一天的介绍就到这里,目前我们就学习了 behave 这个插件的基本搭建和调用了一个最简单的Action节点了





下面是源码  里面还有我新的学习情况,会多出几个内容,将在后面在介绍
写得好辛苦,就小小收几个币吧






unity3d 行为树;unity 本身的行为树插件;
3.png
2-3.png

behave.rar

336.83 KB, 下载次数: 145

售价: 2 蛮牛币  [记录]

评分

参与人数 2鲜花 +52 收起 理由
染指爵士 + 2 赞一个!
朱迪 + 50 很给力!

查看全部评分


回复

使用道具 举报

3偶尔光临
185/300
排名
7904
昨日变化
4

0

主题

32

帖子

185

积分

Rank: 3Rank: 3Rank: 3

UID
105530
好友
0
蛮牛币
506
威望
0
注册时间
2015-6-3
在线时间
57 小时
最后登录
2016-11-10
发表于 2015-11-20 09:22:46 | 显示全部楼层
学习学习,支持楼主,就是能否共享下这个插件啊,我看附件貌似只是个工程

回复

使用道具 举报

排名
347
昨日变化
2

43

主题

353

帖子

3972

积分

Rank: 9Rank: 9Rank: 9

UID
42814
好友
32
蛮牛币
5949
威望
0
注册时间
2014-8-31
在线时间
1220 小时
最后登录
2017-4-24

专栏作家

QQ
 楼主| 发表于 2015-11-20 09:44:14 | 显示全部楼层
wx_UYnEeNeq 发表于 2015-11-20 09:22
学习学习,支持楼主,就是能否共享下这个插件啊,我看附件貌似只是个工程 ...

工程里面的 behave文件夹就是整个插件了,我也下载不到,也是从别人的例子拿过来的

回复

使用道具 举报

排名
1616
昨日变化

18

主题

445

帖子

2206

积分

Rank: 9Rank: 9Rank: 9

UID
31561
好友
47
蛮牛币
122
威望
0
注册时间
2014-6-27
在线时间
382 小时
最后登录
2017-4-17

七夕浪漫情人认证开发者

QQ
发表于 2015-11-20 10:31:10 | 显示全部楼层
前来支持一下。

回复

使用道具 举报

5熟悉之中
981/1000
排名
1121
昨日变化

5

主题

83

帖子

981

积分

Rank: 5Rank: 5

UID
2261
好友
1
蛮牛币
2821
威望
0
注册时间
2013-8-19
在线时间
155 小时
最后登录
2017-3-28
发表于 2015-11-20 11:48:52 | 显示全部楼层
支持楼主继续后面的教程,我倒是有一个免费的最后版本,提供给楼主:http://pan.baidu.com/s/1mgCjFHu
后来直接升级为2.0版本,现在已经收费了,200美元挺狠的,名字也改为:Behave 2 for Unity,给大家一个传送门:https://www.assetstore.unity3d.com/en/#!/content/10912

回复

使用道具 举报

5熟悉之中
981/1000
排名
1121
昨日变化

5

主题

83

帖子

981

积分

Rank: 5Rank: 5

UID
2261
好友
1
蛮牛币
2821
威望
0
注册时间
2013-8-19
在线时间
155 小时
最后登录
2017-3-28
发表于 2015-11-20 11:55:31 | 显示全部楼层
本帖最后由 yalin20000 于 2015-11-20 14:32 编辑

还要审查,还以为第一次没有发成功呢 呵呵

回复

使用道具 举报

5熟悉之中
834/1000
排名
2566
昨日变化

1

主题

92

帖子

834

积分

Rank: 5Rank: 5

UID
52742
好友
1
蛮牛币
2008
威望
0
注册时间
2014-11-3
在线时间
351 小时
最后登录
2017-4-24
发表于 2015-11-20 14:25:54 | 显示全部楼层
楼主加油,支持楼主,也谢谢楼上提供的资源

回复

使用道具 举报

排名
347
昨日变化
2

43

主题

353

帖子

3972

积分

Rank: 9Rank: 9Rank: 9

UID
42814
好友
32
蛮牛币
5949
威望
0
注册时间
2014-8-31
在线时间
1220 小时
最后登录
2017-4-24

专栏作家

QQ
 楼主| 发表于 2015-11-20 14:44:04 | 显示全部楼层
yalin20000 发表于 2015-11-20 11:48
支持楼主继续后面的教程,我倒是有一个免费的最后版本,提供给楼主:http://pan.baidu.com/s/1mgCjFHu
后来 ...

感谢楼上,不过2.0的版本真心买不起,还是老老实实用免费版了

回复

使用道具 举报

排名
1032
昨日变化
2

14

主题

226

帖子

1554

积分

Rank: 11Rank: 11Rank: 11Rank: 11Rank: 11

UID
19893
好友
5
蛮牛币
2642
威望
0
注册时间
2014-4-1
在线时间
398 小时
最后登录
2017-4-24

活力之星迈向小康

QQ
发表于 2015-11-23 09:24:15 | 显示全部楼层
顶一下!

励志成为大神的男人!!!
回复

使用道具 举报

5熟悉之中
665/1000
排名
4411
昨日变化
30

1

主题

122

帖子

665

积分

Rank: 5Rank: 5

UID
12477
好友
0
蛮牛币
326
威望
0
注册时间
2014-1-14
在线时间
322 小时
最后登录
2017-4-24
发表于 2016-1-4 17:46:21 | 显示全部楼层
学习了!!!

回复

使用道具 举报

5熟悉之中
571/1000
排名
2944
昨日变化
1

1

主题

47

帖子

571

积分

Rank: 5Rank: 5

UID
63737
好友
2
蛮牛币
1220
威望
0
注册时间
2014-12-26
在线时间
187 小时
最后登录
2016-12-2
QQ
发表于 2016-1-14 16:14:22 | 显示全部楼层
被上帝盯着还能不能好好写代码

回复

使用道具 举报

7日久生情
2492/5000
排名
221
昨日变化

5

主题

434

帖子

2492

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
32498
好友
3
蛮牛币
4118
威望
0
注册时间
2014-7-4
在线时间
607 小时
最后登录
2017-4-22
发表于 2016-1-17 09:41:01 | 显示全部楼层
弱弱的问一句 ,为什么不用  BehaviorDesigner 插件了, BehaviorDesigner 貌似 比这个插件好

回复

使用道具 举报

3偶尔光临
224/300
排名
7904
昨日变化
4

1

主题

60

帖子

224

积分

Rank: 3Rank: 3Rank: 3

UID
16286
好友
2
蛮牛币
523
威望
0
注册时间
2014-3-3
在线时间
67 小时
最后登录
2017-1-4
发表于 2016-1-29 15:56:54 | 显示全部楼层
顶一个, 希望这样能让行为更容易写

回复

使用道具 举报

7日久生情
1615/5000
排名
1224
昨日变化

3

主题

355

帖子

1615

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
46577
好友
0
蛮牛币
1919
威望
0
注册时间
2014-9-24
在线时间
561 小时
最后登录
2017-4-21
发表于 2016-8-2 10:43:02 | 显示全部楼层
这是否也意味着每一个行为都是一个节点都是一个脚本

回复

使用道具 举报

3偶尔光临
215/300
排名
7633
昨日变化
97

1

主题

23

帖子

215

积分

Rank: 3Rank: 3Rank: 3

UID
57613
好友
0
蛮牛币
304
威望
0
注册时间
2014-11-25
在线时间
89 小时
最后登录
2017-4-23
发表于 2016-11-6 12:21:40 | 显示全部楼层
非常感谢^.^

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册帐号

本版积分规则

快速回复 返回顶部 返回列表