本节书摘来异步社区《Lua游戏AI开发指南》一书中的第2章,第2.9节,作者: 【美】David Young(杨) 译者: 王磊 责编: 陈冀康,更多章节内容可以访问云栖社区“异步社区”公众号查看。
为了创建一个新的智能体,我们需要创建另一个Lua脚本并实现Agent_Cleanup、 Agent_HandleEvent、 Agent_Initialize和Agent_Update函数。
创建一个Lua文件如下:
src/my_sandbox/script/Agent.lua
Agent.lua:
function Agent_Cleanup(agent)
end
function Agent_HandleEvent(agent, event)
end
function Agent_Initialize(agent)
end
function Agent_Update(agent, deltaTimeInMillis)
end
现在有了一个基础的智能体脚本,我们可以在沙箱中创建一个智能体实例了。修改沙箱的初始化函数,使用Sandbox.CreateAgent函数创建AI代理。
修改沙箱的初始化函数,使用Sandbox.CreateAgent函数创建你的AI智能体。
Sandbox.lua:
function Sandbox_Initialize(sandbox)
...
Sandbox.CreateAgent(sandbox, "Agent.lua");
end
现在沙箱中已经有了一个可运行的智能体,我们还需要为它创建视觉表象以便能够观察它。这一次,我们使用Core.CreateCapsule函数来程序生成一个胶囊网格,然后附加到智能体上。把智能体传入Core.CreateCapsule函数中就会把生成的Ogre网格直接附加到智能体上面,并在它移动时自动更新这个胶囊的位置和旋转。
与Sandbox.CreateObject对象相比,我们只需要创建一个视觉表象,因为智能体已经以胶囊的形式在物理世界中进行模拟了。
创建一个Lua文件如下:
src/my_sandbox/script/AgentUtilities.lua
AgentUtilities.lua:
function AgentUtilities_CreateAgentRepresentation(
agent, height, radius)
-- Capsule height and radius in meters.
local capsule = Core.CreateCapsule(agent, height, radius);
Core.SetMaterial (capsule, "Ground2");
end
Agent.lua:
function Agent_Initialize(agent)
AgentUtilities_CreateAgentRepresentation(
agent, agent:GetHeight(), agent:GetRadius());
end
现在运行沙箱就能看到智能体的视觉表象了,它是一个同样使用Ogre Ground2材质的胶囊,如图2-4所示。
我们可以设置智能体的位置来让它四处移动。由于智能体参与了物理模拟,如果放在空中它就会落向地面;如果被放到地面以下,则会被推到地面上来。
-- Position in meters.
local position = Vector.new(
xCoordinate, yCoordinate, zCoordinate);
Agent.SetPosition(agent, position);
改变智能体的朝向类似于设置位置向量,不同的是需要提供一个前进方向向量。因为沙箱模拟的是类人形的智能体,物理模拟会锁定它的方向以让它始终保持直立。当设置智能体的前进方向向量时,沙箱会把y轴看成是向上的轴向。
local forwardDirection = Vector.new(
xDirection, 0, zDirection);
Agent.SetForward(agent, forwardDirection);
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- howto234.com 版权所有 湘ICP备2022005869号-3
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务