unity行为树制作AI简单例子(1)

用行为树来制作AI是非常方便的,今天就给大家简单介绍一下行为树的强大之处。

所用插件 Behavior Designer v1.421

最开始 我使用过Rain插件,不过用过Behavior Designer后感觉界面更为直观,更容易设计出AI

新建一个项目,先导入该插件

新建一个Cube,命名为Floor,作为本场景的地板,Scale设置为(20, 0.1, 20),Tag设置为Floor

创建一个Capsule,命名为Player,Tag设置为Player,添加一个简单的Player脚本控制移动

using UnityEngine;
using System.Collections;

public class Player : MonoBehaviour {

    public float speed = 5;
    private float _x;
    private float _z;

    void Update () {

        _x = Input.GetAxis("Horizontal") * Time.deltaTime * speed;
        _z = Input.GetAxis("Vertical") * Time.deltaTime * speed;
        transform.position += new Vector3(_x, 0, _z);
    }
}

导入怪物的模型,并设置好其状态机,我只简单设置攻击、站立和行走3种状态

在场景中拖出一个实例,命名为Monster

基本场景已经搭建好了,现在简单介绍一下行为树的组件

大致来说行为树有4种节点

Actions是行为节点,能执行一定动作
Log就是一个行为节点,能执行一个Log操作,在Inspector面板设置输出的Text

              

执行结果:

Decorators是装饰节点,能修饰子节点

Repeater就是一个装饰节点,它修饰后子节点不断循环

                              

执行结果:

Composites该节点能决定子节点执行的顺序

Return Failure是一个装饰节点,它的作用是让子节点无论如何返回Failure

Parallel是平行节点,它会让子节点都正常执行,无论有没有节点返回Failure,事实上如果没有平行节点,右边的Log是不能执行的,

因为默认是从左到右顺序执行,有一个返回Failure则跳出子节点,可在下一个例子顺序节点看出

这次把平行节点改成顺序节点,右方行为节点就执行不了了,因为左边返回Failure跳出了子节点

Conditionals是判断节点,配合Composites中的Selector使用

Selector和Conditionals配合使用类似if elseif else的效果

若是第一个判断节点返回成功,则不继续运行,相当于if执行成功

若是第一个返回失败,第二个返回成功,则相当于elseif

若是两个都返回失败,则会执行最后一个Log,相当于else

行为树由四种节点组成,每种节点其实默认都提供了大量节点,这里没办法一一介绍,需要自己细细研究,

这一次先到这里,下一次会介绍如何自定义节点并创建一棵完整的行为树

美しきもの:http://music.163.com/#/song?id=22782025

时间: 2024-10-10 00:24:22

unity行为树制作AI简单例子(1)的相关文章

unity行为树制作AI简单例子(2)

继续昨天的工程,给Monster添加一个空物体命名为AI,在AI添加脚本BehaviorTree,然后就可以打开行为树编辑器进行编辑了 先写好自定义的节点脚本,下面是一个寻找漫游点的行为节点脚本 using UnityEngine; using BehaviorDesigner.Runtime.Tasks; using BehaviorDesigner.Runtime; [TaskCategory("MyActions")] [TaskDescription("计算出更新的路

Unity多级菜单的简单例子

之前项目中需要一个树状的多级菜单,Unity Asset Store里也有些现成的插件,但是在将其修改成与项目中一致的风格比较难,于是就参考了一下成熟的插件,自己实现了一个树状菜单功能,这样就可以使用自己的UI风格. Unity的UGUI虽然使用简单了,但是还是存在不少的Bug,如果按照常规的思路,把子节点设置为父节点的子物体,然后动态计算父节点的大小从而计算总的大小,Unity有现成的的ContentSizeFilter可以计算总的大小,但是嵌套使用进行布局的话出现布局错乱的问题. 这个多级菜

制作一个简单的用户界面

制作一个简单的用户界面 这节课里面,我们来开发一个XML布局文件,这个布局文件里面会包含一个text field,文本输入框,和一个按钮button.下一节课里面,会教大家怎么在按下一个按钮的时候,跳转到另一个Activity. 这里先简单解释一下Android界面的构成.AndroidApp的界面是使用View和ViewGroup构建起来的.View通常就是我们常见的UI小部件,比如按钮Button.文本控件TextView等:而ViewGroup是一个View的容器,它可以限制这个容器里面的

[转] 3个学习Socket编程的简单例子:TCP Server/Client, Select

以前都是采用ACE的编写网络应用,最近由于工作需要,需要直接只用socket接口编写CS的代码,重新学习这方面的知识,给出自己所用到的3个简单例子,都是拷贝别人的程序.如果你能完全理解这3个例子,估计socket编程就已经基本入门了. 建议:1) 多多查查所用到的网络接口; 2) 最好有一本书,如UNIX环境高级编程,UNIX网络编程,可查询:3) 可以直接使用书上的例子更好. http://blog.csdn.net/zhenjing/article/details/4770490 TCP C

JFrame、JPanel 、Layout开发的简单例子

写了Java这么久,居然发现想手写一个带网格袋布局的JFrame,还不记得怎么写,写了这么多代码真不敢说记得所有细节. 幸好,只要记清楚概念就能快速开发.首先,明确一下3种容器类的差别和用途: No. 区别 1 Panel JPanel用于放置其他控件,也包含其他panels. 2 Frame JFrame 是包含 title and a border的第一层级的容器,其中通过布局设置JPanel或其他控件的位置. 3 Window JWindow是不包含 title and a border的

从一个简单例子来理解js引用类型指针的工作方式

? 1 2 3 4 5 6 7 <script> var a = {n:1};  var b = a;   a.x = a = {n:2};  console.log(a.x);// --> undefined  console.log(b.x);// --> [object Object]  </script> 上面的例子看似简单,但结果并不好了解,很容易把人们给想绕了--"a.x不是指向对象a了么?为啥log(a.x)是undefined?".&

Hadoop RPC简单例子

jdk中已经提供了一个RPC框架-RMI,但是该PRC框架过于重量级并且可控之处比较少,所以Hadoop RPC实现了自定义的PRC框架. 同其他RPC框架一样,Hadoop RPC分为四个部分: (1)序列化层:Clent与Server端通信传递的信息采用了Hadoop里提供的序列化类或自定义的Writable类型: (2)函数调用层:Hadoop RPC通过动态代理以及java反射实现函数调用: (3)网络传输层:Hadoop RPC采用了基于TCP/IP的socket机制: (4)服务器端

iOS 制作一个简单的画板

制作简单画板 作为iOS初学者,在学习完UI的几个简单控件(UILable,UITextField,UIButton)之后,就可以制作一个简单的画图板demo,以下是具体制作流程(在MRC下),如有不足之处,还请各位大神们指教 0.0. 1.搭建界面,主要由UIButton,UITextField组成,底部的按钮是UITextField的一个自定义键盘(inputView) . - (void)viewDidLoad { [super viewDidLoad]; //创建菜单按钮 UIButto

extern外部方法使用C#简单例子

外部方法使用C#简单例子 1.增加引用using System.Runtime.InteropServices; 2.声明和实现的连接[DllImport("kernel32", SetLastError = true)] 3.声明外部方法public static extern int GetCurrentDirectory(int a, StringBuilder b); 4.对外部方法操作  GetCurrentDirectory(300, pathstring); using