Closed GoogleCodeExporter closed 9 years ago
AI Base 已经提交到SVN上
Scripts/AISystem/Common/AI.cs
请在那上面做修改,
-- (c)受到伤害后Halt(目前该行为只能由其子类进行,不知道大家有没有好的建议)
这应该只由子类进行,不应该放在基类做.不同AI行为不同,不是
每个AI都会在受伤后HALT.
-- 2. 武器及其它攻击方式,统一继承一个基类。同时,加入一个Scheduler负责切换或者选择最佳攻击方式(小兵当然不用这么复杂,主要是为了后面的BOSS)。
武器类为什么要Scheduler呢?
是不是应该放在对应的AI中?武器脚本的功能是,
1. 制造设计效果,
2. 判断命中
3. 发送ApplyDamage message
至于选择攻击方式和切换武器什么的,那是武器使用者脚本的�
��任,也就是AI.
Original comment by yinyuanq...@gmail.com
on 16 Dec 2012 at 2:05
--2.Scheduler的工作,就是编排攻击方式,同样是AI的一部分
武器脚本的功能依然没有什么变化,只是加入一个类似Helper的�
��西
但是因为每种武器(攻击方式)都应该有自己的AttackInterval(如狙
击枪和机关枪)
对于虫子(可能是Boss),除了爪击,可能还有吐网以限制玩家移动
由于吐网和爪击有各自的cooldown,所以需要一个Scheduler来决定��
�一个进攻行为是什么
(或者叫choreographer也不错哈,这词是从安卓的api上看到的)
Original comment by lightnin...@gmail.com
on 16 Dec 2012 at 3:35
AI的改动方向应该是按照AntPion.cs 里面的方向,也就是
DispatchCommand -> Execute Command
目前的程序结构是一启动AI就自动运行某个Coroutine
,这只能做为初级的AI框架.
足够弹性的框架是:
1. 在Inspector里先约束每个CommandType对应的Coroutine名字
2. DispatchCommand -> 执行Coroutine
3. 当需要改变AI行为模式的时候,调用EndCurrentCommand
,再调用DispatchCommand(New Command)
CommandType:
SearchAndKill = 0 //自由模式,自动查找玩家,并攻击
Patrol = 1
//巡逻模式,在一个固定的路线上巡逻,如果看见玩家则攻击
Hold = 2 //守护在一个固定地点
Original comment by yinyuanq...@gmail.com
on 17 Dec 2012 at 4:18
大家可以先看看图
再往下看
这个架构基本完成,AISoldier被重写,行为和原来的一样
之前版本里面(包括目前重写的),只要进入AI的CriticalRadius距离�
��面就一定会执行
但是考虑一下这样的情况,玩家低血量+隐形来到AI旁边,突然出
现.
AI就会触发EscapeCommand(这个Command会另其他所有行为停止)
但实际上,更好的应对方案是和玩家火拼,玩家一定会比AI先死
现在,触发器是计时触发式的(每X秒触发一次)
即使EscapeCommand和AttackCommand具有相同触发时间,也一定是陆续��
�发并判断前置条件然后Dispatch
怎么让两者进入决策单元,并选择最佳方案呢?
(目前我想到的是,统一触发时间(目前人的最快反应时间是0.1s,
可以用这个数-.-),直接由决策单元触发)
Original comment by lightnin...@gmail.com
on 20 Dec 2012 at 2:14
Attachments:
即使EscapeCommand和AttackCommand具有相同触发时间,也一定是陆续��
�发并判断前置条件然后Dispatch
怎么让两者进入决策单元,并选择最佳方案呢?
-这里, ESCAPE COMMAND 的前置条件有没有包括:
1. 当前敌人的血量(不一定是玩家,可能是虫族NPC),如果敌人快死了,血量低于N%, 就不满足ESCAPE条件
2. ESCAPE的空间(如果已经是在角落, 就不满足ESCAPE条件)
此外,一些关卡不需要AI能ESCAPE,所以ESCAPE COMMAND
的前置条件应该设为一个BOOL, 可以被控制,而不是一定会ESCAPE
Original comment by yinyuanq...@gmail.com
on 21 Dec 2012 at 3:55
前置条件肯定就是个bool,
我这里用一个函数来判断是否符合前置条件。
(这样也方便触发器执行)
Original comment by lightnin...@gmail.com
on 21 Dec 2012 at 4:08
Hey Jeffery,
Review过 TestAI.7z的代码,有几个Comment:
1. Command的结构
一个Command既代表了数据,也代表了行为.我不赞成这样的结构.�
��个结构的特点是灵活,但是复杂.一个AI GameObject
上面需要附加各种Command组件.
而且Command之间,如何协调,一些公用的函数,如何共享?
还是要靠AI类,既然这样,行为就应该放在AI类之中.Command既然称
之为Command,就应该只是各种Command数据的封装,行为的实现,应该
放在AI中.
2. AI
整体流程OK,但是细节还是过于复杂,不够简洁.
一些重要的ROUTINE,缺少注释.
TryExecuteAllParallel, Analyse,CommandExecuteWrapper
这些重要的函数都必须要有足够的注释. 一些属于C#
语言特色的功能,在Unity里已有替代品,
例如事件委托,尽量用SendMessage,或者Invoke.
记住一点,将来代码需要提交给Apple/unity/Google
play的人review,对方可能完全不熟悉C#, 所以,
尽可能避免使用C#独有特色的功能,
此外,注释要够,而且要用英文.
我会在TestAI.7z基础上做新AI框架的改动.
Original comment by yinyuanq...@gmail.com
on 23 Dec 2012 at 7:35
1.一开始,我也觉得command不应作为component,但是一个执行comma
nd必须先知道具体细节
假如分离出来,command还是要独自持有一些数据,即使是写coro
utine
(返回ienumerator的)函数,实际也是把数据复制过去罢了(编��
�器生成)。
command之间没有任何联系(这是我的原意),能够独立执行(a
ttack里面那个装填弹药可以无视。。。测试等待指令用的),
唯一依赖的是AI基类,因为需要直接控制AI行为
其实我也不爱把它作为component,你们有没有其他好办法
2.中文注释(似乎只有一个地方),还有几个重要函数,没有
加上注释的原因是:这样的框架/架构,我自己也不太满意
事情委托那个会改
Original comment by lightnin...@gmail.com
on 23 Dec 2012 at 10:26
AI框架的一个学习对象:
魔兽争霸III 地图编辑器:
1. 单位定义界面:
见示例人族火枪手定义界面.(Inspector)
首先通过这个界面定义一个单位的各种数据:
攻击力,攻击方式,攻击范围,攻击动画..这就是数据.
2.AI编辑器定义:
当满足某个条件的时候,执行某个动作(Command).
AI的本质也就是是满足某个条件,就执行某个动作.
Original comment by yinyuanq...@gmail.com
on 24 Dec 2012 at 4:50
Attachments:
这么看来,AI
同一时间只能有一条指令在执行,而且要设置优先级,解决��
�指令同时触发的情况
Original comment by lightnin...@gmail.com
on 24 Dec 2012 at 10:16
https://docs.google.com/folder/d/0B84Qni9RlEfdVjhaU3U3eHVxbmc/edit
所有新AI框架的东东,都在这里了,包括:
1. AI Framework_v.1.0.docx 文档
2. Colonization.apk 用新AI框架搞得一个测试Demo
3. AITest_NewAIFrameWork_Demo.unitypackage 最新的资源文件.
SVN已经更新.
Jeffery有时间的话把新的内容下载下来看看吧,我想你先了解这
个框架的工作方式,然后用这个框架做个DEMO,在这个过程里我��
�一起来做BUGFIX和拓展.
Original comment by yinyuanq...@gmail.com
on 4 Jan 2013 at 8:38
mark status done, all issue related to new AI framework should be thrown to
issue 19
Original comment by yinyuanq...@gmail.com
on 4 Jan 2013 at 8:42
Original issue reported on code.google.com by
lightnin...@gmail.com
on 16 Dec 2012 at 4:33