Lua Behavior Tree For葡京在线开户 Unity3D(Lua描述行为树For Unity3D)

OAuth
OAuth(开放授权)是2个开花标准,允许用户授权第贰方网站访问他们存储在别的的劳务提供者上的新闻,而不须要将用户名和密码提要求第②方网站或享受他们数据的兼具情节。

行为树(BTTree)笔记

QQ登录OAuth2.0:对于用户相关的OpenAPI(例如获取用户音信,动态同步,照片,日志,分享等),为了有限支撑用户数据的平安和隐衷,第叁方网站访问用户数量前都亟需显式的向用户征求授权。

为啥是Lua版本的作为树

方今国内的手机游戏都标配热更新功效,而玩耍AI自然也是MMO游戏的三个标配,比如说挂机的AI,宠物的AI等等。

说起什么用更简单的不二法门开发AI成效,大家都会想到利用状态机或行为树,它们能不小程度上援助我们理清思维逻辑,让AI变的越来越有意思生动。

方今游人如织Unity3D项目都以把Lua做为脚本语言,比如大家项目就是Lua做逻辑开发的3DMMOA奔驰M级PG的游艺,本文分享一下大家项目中应用的Lua版本行为树。

 

QQ登录OAuth2.0用到OAuth2.0标准协议来开展用户身份验证和获取用户授权,相对于事先的OAuth1.0协议,其表明流程更简便和平安。具体参考文档
:【QQ登录】OAuth2.0支付文档

behavior3

Behavior3框架提供了一组工具和开花规范,为你成立、设计和应用作为树应用于游戏、模拟、机器人和其余依据代理应用程序。

  • 提供在线可视化地编辑器,并且提供编辑器源代码,你可以下载后安排到当地,并且伸张它效益。
  • 多代理系统布局,服从三个简约而有力的架构在一个正式的和千篇一律的根底上,优化控制多少个代理
  • 选取贰个绽放的和总结的格式来叙述行为树(json),由此你可以很不难地把它进入到祥和的库,工具或框架中

 

behavior3官网:http://behavior3.com/

behavior3的lua版本 :https://github.com/nottvlike/behavior3lua

 

注:本文部分截图和behavior3官网或github的lua版本有出入,因为大家项目组对lua版本的behavior3的做过修改。

 

QQ互连网站已经提供了PHP,JS,Android和iOS的SDK,缺乏.NET版本的SDK,寒食节假日期间采取部分空暇时间封装了3个享有完全意义的.NET
SDK,后续将包装3个相应的Windows
Phone的SDK,并开源放在http://opensns.codeplex.com
,专门搭建了贰个示范网站http://www.win8charm.com/
和MSDN风格的在线扶助网站http://help.win8charm.com/
。前日那篇小说紧要介绍使用.NET SDK实施QQ登陆功能。

编辑器

浏览器访问:http://editor.behavior3.com/#/dash/projects

选择ProjectNew Project输入Name  – 点击 Editor
,网站会对眼下浏览器编辑的数额进行保存,无需注册登录就在在线编辑自个儿的一言一动树。

从这里http://opensns.codeplex.com/
下载最新版本的SDK,最新版本是Beta,
落成SDK的包裹,希望大家使用支持测试,SDK正视于Newtonsoft.Json和RestSharp多个程序集,具体可以参见使用RestSharp
库消费Restful
Service

重假设多少个类QzoneContext(QQ登陆的上下文数据)  和 QOpenClient
(QQ互联API入口),其余类重假诺模型,配置类。

葡京在线开户 1

1、你得去http://connect.qq.com/
申请三个账号,会拿到三个APP ID和App
Key,那三个东东会在变化请求的时候用到。你的去填一些素材,还要提交一些素材审核。

导入已有的行为树

选择 ProjectImportTree as
Json
,粘贴AI.json数据,完毕由Json数据导入成行为树

 

在布置文件web.config参加QQ登陆所需求的一对布局参数,如下图所示:

导骑行为树

选择 ProjectExportTree as
Json
,选取全体内容并复制,粘贴到AI.json,达成由AI树转换来Json数据

 

<configuration>
  <configSections>
    <sectionGroup
name=”QQSectionGroup”>
      <section name=”QzoneSection”
type=”System.Configuration.NameValueSectionHandler,System,
Version=4.0.0.0, Culture=neutral,PublicKeyToken=b77a5c561934e089″
/>
    </sectionGroup>
  </configSections>
   <QQSectionGroup>
    <QzoneSection>
      <add key=”AppKey” value=””
/>
      <add key=”AppSecret” value=””
/>
      <add key=”CallBackURI” value=””
/>
      <add key=”AuthorizeURL”
value=”https://graph.qq.com/oauth2.0/authorize” />
    </QzoneSection>
  </QQSectionGroup>

行为树基础知识

请提早摸底行为树的功底概念,我列几点:

每一帧都会遍历全体的节点 (从性质角度可以每逻辑帧遍历二回)

施行顺序:从上往下,从左往右

 

AppKey是申请QQ登录成功后,分配给选取的appid;AppSecret是报名QQ登录成功后,分配给网站的appkey;CallBackU冠道I是QQ登陆成功后的回调地址:AuthorizeUKugaL是QQ互联的OAth2认证地址:

Composites(全部可用的花色)

下边以达成1个大概的宠物AI来分解各节点的用法。注:小编列出的节点类型解释和拔取方法是依照自身的精通所写,并不合规定文档的解说。

 

 

二 、在品种中添加八个引用Newtonsoft.Json.dll、RestSharp.dll和
QConnectSDK.dll,
在页面上停放按钮,打开qq登录的页面,然后登录成功今后回调您的网站的页面。此时一经用户在您的网站有账号,那就可以绑定现有账号,或许新注册3个账号。假如你是新建站,也可以完全接纳qq登录来作为用户连串。

BTPrioritySelector(优先挑选)

一旦当前节点的嵌入条件从不,则置空。

对此最上层的顶节点,可以利用它

 

下边上代码:

BTSequence(序列)

假若并行节点有多少个子节点,同级的节点中,上二个回来true,下贰个节点才会履行。

示范:与主人距离当先18以此节点为序列节点,有八个叶子节点,当ClearBattleState重临True,TeleportToMaster才会被实践

葡京在线开户 2

而只有系列节点的有着叶子节点都回来true,那些节点才算执行已毕,才会跻身下贰个节点

 

        /// <summary>
        /// QQ登陆页面
        /// </summary>

BTParalled(并行)

 

 

 

       [HttpGet]
       public ActionResult Login(string
returnUrl)
       {
           this.Session[RETURNURL] =
returnUrl;
           var context = new
QzoneContext();
           string state =
Guid.NewGuid().ToString().Replace(“-“, “”);
           Session[“requeststate”] =
state;
           string scope =
“get_user_info,add_share,list_album,upload_pic,check_page_fans,add_t,add_pic_t,del_t,get_repost_list,get_info,get_other_info,get_fanslist,get_idolist,add_idol,del_idol,add_one_blog,add_topic,get_tenpay_addr”;

BTParableFlexible(散列)

 

 

           var authenticationUrl =
context.GetAuthorizationUrl(state, scope);
           return new
RedirectResult(authenticationUrl);

Actions(动作/执行函数)

位于最末尾的叶子节点上,用于实践函数

可以给它丰盛前置条件(isFarFromMaster())
,给函数传参数(DoFollowMaster(sqrDistance = 4)),示例:

葡京在线开户 3

 

       }   

给艺术传参数

假诺在表现树给艺术传递八个参数,在lua端怎么着接受传递的参数呢?

在lua的法门中:使用p.参数名1,p.参数名2,获取相应岗位的参数

 

        /// <summary>
        /// 回调页面
        /// </summary>

在Unity3D中调剂行为树

咱俩当前是在C#端结合Unity开放的编辑器接口,编写了GizmosHelper,便于在运作时对表现树举行调试。

一言九鼎原理:

读取AI.jso的多寡,获取节点坐标、标题,由点连线,线结合树状,还原成在behavior编辑器的树状

如果某些节点及其子节点的情事为Active,那条线运用木色画,否则使用靛青画。 

 

       public ActionResult
QQConnect(LoginModel model)
       {
           if (Request.Params[“code”] !=
null)
           {
               QOpenClient qzone =
null;

注意事项

在你还大不熟习行为树的场馆下,最好不用为Sequence或Parallel的子结点加前置条件,而是平素加在Sequence或Parallel结点本身上面。。。

停放条件得以大大方方用在Priority结点或其子结点上
那样树的逻辑会清晰一点
除此以外,前置条件协助以“!”初叶,表示对紧跟在其后边的尺度举行取反再判断

               var verifier =
Request.Params[“code”];
               var state =
Request.Params[“state”];
               string requestState =
Session[“requeststate”].ToString();

               if (state == requestState)

               {
                   qzone = new
QOpenClient(verifier, state);
                   var currentUser =
qzone.GetCurrentUser();
                   if
(this.Session[“QzoneOauth”] == null)
                   {
                      
this.Session[“QzoneOauth”] = qzone;
                   }
                   var friendlyName =
currentUser.Nickname;

                   var isPersistentCookie
= true;
                  
SetAuthCookie(qzone.OAuthToken.OpenId, isPersistentCookie,
friendlyName);

                   return
Redirect(Url.Action(“Index”, “Home”));
               }

           }
           return View();
       }

地方的代码是ASP.NET
MVC的,项目示范运营在http://www.win8charm.com/ ,下边贴个ASP.NET
WebForm的代码示例:

QQ登陆页面

namespace OpenConnect.WebSample.Account

{
    public partial class LoginToQQ :
System.Web.UI.Page
    {
        protected void Page_Load(object
sender, EventArgs e)
        {
            GetRequestToken();
        }

        private void GetRequestToken()

        {
            var context = new
QzoneContext();
            string state =
Guid.NewGuid().ToString().Replace(“-“, “”);
            string scope =
“get_user_info,add_share,list_album,upload_pic,check_page_fans,add_t,add_pic_t,del_t,get_repost_list,get_info,get_other_info,get_fanslist,get_idolist,add_idol,del_idol,add_one_blog,add_topic,get_tenpay_addr”;

            var authenticationUrl =
context.GetAuthorizationUrl(state,scope);
            //request token, request token
secret 需求保存起来
           
//在demo演示中,间接保存在全局变量中.实际情形必要网站本身处理
            Session[“requeststate”] =
state;          
           
Response.Redirect(authenticationUrl);

        }
    }
}

 

回调页面

namespace OpenConnect.WebSample.Account

{
    public partial class QQCallback :
System.Web.UI.Page
    {
        protected void Page_Load(object
sender, EventArgs e)
        {
            if (Request.Params[“code”]
!= null)
            {
                QOpenClient qzone = null;

                User currentUser =
null;

                var verifier =
Request.Params[“code”];
                string state =
Session[“requeststate”].ToString();
                qzone = new
QOpenClient(verifier, state);
                currentUser =
qzone.GetCurrentUser();
                if (null != currentUser)

                {
                    this.result.Text =
“成功登陆”;
                    this.Nickname.Text =
currentUser.Nickname;
                   
this.Figureurl.ImageUrl = currentUser.Figureurl;
                }
                Session[“QzoneOauth”] =
qzone;

            }

     }

}

此处说明一(Wissu)(Nutrilon)下用到QQ互联登陆是取得不到用户的QQ号的,只会拿走到用户的OpenId,OpenID和QQ号是逐一对应涉及。

本地测试
  • 前提准备,明白当地Host文件的意义
  1. 找到C:\WINDOWS\system32\drivers\etc\hosts这一个文件
  2. 用文件形式打开
  3. 追加一行:127.0.0.1
    www.domain.com
  4. 开行本地服务器
  5. 起步浏览器访问
    http://www.domain.com/
其他