このドキュメントには、Gameware Navigation を Lua ゲーム コードに統合する方法が記載されています。Navigation World を追加して、ボットをスポーンする方法について学習します。
オートデスクでは、ランタイムでナビゲーションを統合するための一連の Lua スクリプトを提供しています。これらのスクリプトは core/gwnav/lua/runtime に配置されているため、プロジェクト内で利用できます。
統合するためのメイン コンポーネントは Navigation World です(navworld.lua が必要)。
このオブジェクトから以下を実行できます。
レベルの初期化中に NavWorld オブジェクトを作成します。
function MyGame:init() self.navworld = NavWorld(world, level) end
各値の意味は次のとおりです。
Navigation World はフレームごとに更新する必要があります。視覚的なデバッグを行うためにメインのゲーム カメラを送信することもできます。こうすると、ゲームに接続されている場合に、Navigation Lab のカメラがご使用のゲーム カメラと一致するようにできます。
function MyGame:update(dt) self.navworld:update(dt) self.navworld:visual_debug_camera(self.maincamera) end
ワールドに NavData を追加するには:
function MyGame:init() local nav_data = self.navworld:add_navdata("levels/empty") end
ワールドから NavData を除去するには:
self.navworld:remove_navdata(nav_data)
ゲームの呼び出し中に、ナビゲーション メッシュをレンダリングするには:
self.navworld:debug_draw(gui, line_object)
インストールされた Gui および LineObject をこの関数に渡す必要があります。また、ワールドに一部の NavData を追加する必要もあります。
function MyGame:shutdown() self.navworld:shutdown() end
NavWorld にボットを追加するには:
local configuration = NavBotConfiguration() -- You can change any parameters of the configuration: configuration.height = 1.8 local navbot = self.navworld:init_bot_from_unit(unit, configuration)
NavWorld からボットを除去するには:
navbot:shutdown()
ボックスの障害物を作成するには:
local box_obstacle = NavBoxObstacle(navworld, unit) box_obstacle:add_to_world() box_obstacle:remove_from_world() -- obstacles is not destroyed, just no longer present in world
navworld は、この障害物が存在する NavWorld です。unit は、ボックスの障害物を関連付ける Unit です。これは次のスクリプトデータに従って設定されます。
円柱の障害物を作成するには:
local cylinder_obstacle = NavCylinderObstacle(navworld, unit) cylinder_obstacle:add_to_world() cylinder_obstacle:remove_from_world() -- obstacles is not destroyed, just no longer present in world
navworld は、この障害物が存在する NavWorld です。unit は、円柱の障害物を関連付ける Unit です。これは次のスクリプトデータに従って設定されます。
障害物を破壊するには:
box_obstacle:shutdown() cylinder_obstacle:shutdown()