在模拟过程中,可以根据环境使用认知控制器功能来使群组成员改变行为。例如,一个角色可以随机漫步,直到它移动到和一目标相距一定距离时开始朝那个目标直行。
在技术术语中,认知控制器使用条件脚本来影响群组模拟,这可以有效的实现一系列的人工智能。可以使用认知控制器编辑器,这是一个流程图样式编辑器(很像“运动流图”对话框),来设置行为网络和行为组合,我们将其称之为状态。然后,可以应用基于 MAXScript 脚本的变化来指定代理何时从一个状态移动到另一个状态。即便使用相对简单的设置,也可以创建模拟,以使角色栩栩如生、具有意识、在场景中移动时能作出决定。
可以在“状态”对话框主题中找到介绍认知控制器变换的各种示例的步骤:
要设置并使用认知控制器,请执行以下操作:
此步骤是创建和使用认知控制器的典型设置过程。此步骤假设您已具备群组模拟设置的基本知识。为获得更多关于群组设置的信息,请参阅群组辅助对象和“设置”卷展栏。
character studio 将此控制器命名为默认名称“认知控制器”。推荐为此认知控制器命名一个描述性的名称,例如:“查找/漫步”。单击文本框中的名称并从键盘进行编辑。
创建一个认知控制器会自动转到“创建状态”模式中。
下一步,给每一状态定义一个或多个行为。
如果选中了多个行为,那么可以在“状态”编辑器中给每个行为指定不同权重。例如,可以把二分之一权重的“漫步”行为合并到全权重的“查找”行为中,以便在代理查找目标时会轻盈地漫步。
下一步,使用“创建变换”来定义在模拟过程中的状态序列。
显示一个变换箭头,它从“源”状态指向“目标”状态。
每一状态可以拥有任意数目的传入和外出变换。可以根据需要给每一状态指定不同的状态变换条件来创建复杂状态图表。
下一步,使用“状态变换”对话框给每一变换定义一个条件。
通常,它是一个用来测试条件的函数,并返回 1(如果为真)或 0(如果为假)。
例如:
fn test1 del t = ( if (del.simpos.x <= 40 and del.duration > 50) then 1 else 0 )
简而言之,上述内容说明如果代理在 X 轴上的位置小于或等于 40,而它当前所处的状态占用了 50 多个帧,则会发生过渡。然而,如果条件其中之一为假或都为假,那么代理应该呆在当前状态(或测试其它变换)。下面列出关键字:
通过打开 MAXScript 监听窗口(按 F11 键)并输入以下字符,能够看到可以检入脚本的特定于代理的参数的完整列表:
显示属性 $delegate01
因为代理是一个节点,除了上面提到的“simpos”之外,它也能对标准的 MAXScript 节点相关函数作出反应。此外,为获得关于如何访问变换属性的信息,例如,持续时间和优先级,请参阅 MAXScript 帮助。
要了解可以与认知控制器一起使用的 MAXScript 条件的更多示例,请参见“状态变换”对话框。