Agent Typeの構築

Agent Typeのイベントを作成するには、Atoms UIを開き、必ず「AgentType Events」タブを選択してください。「Add」をクリックすると、GUIまたはScriptモードでクリップを編集するかどうかを尋ねるダイアログが表示されます。


GUI モード

Agent Typeに名前を付けます(testRobot)。
以前に、エクスポートしたSkeleton FileとGeo Fileを選択します。 "Skeleton File"は、ユーザーのSkeleton Definition fileを指し、 "Geo Path"は、ユーザーのProxy Geo fileを指します。 "Skin Path"は、ユーザーのスキン化されたGeo fileを指します。



State Machineを "robotStateMachine"(前のセクションで作成したもの)に設定するか、フィールドの右側にあるドロップダウンメニューから選択します。
必要に応じて、Agent Typeのスケール乗数を編集できますが、こちらのチュートリアルでは必要ありません。


ユーザーのGUIは、図のように確認することができると思われます。
「Register」ボタンをクリックするか、Ctrl + Sを押します。

ユーザーのAgent Typeは使用可能になりました。

Agent Typeのスケール乗数は、このようなタイプのすべてのエージェントに影響します。特定のエージェントのスケールを変更したい場合は、Agent Scale Behaviourモジュールを使用してください。


Script モード

Script モードを選択した場合は、次のようにスクリプトを編集する必要があります。
また、Ctrl + Sを押すか、「Register」ボタンをクリックしてください。 

AgentType
import os
import AtomsMath
import AtomsCore
import Atoms
from Atoms import GLOBAL_NAMES


class AgentTypeEvent2(Atoms.SimulationEvent):
    eventName = 'testRobot'
    skelFile = 'D:/projects/atomsDemo/configs/atomsRobot.atomsskel'
    geoPath = 'D:/projects/atomsDemo/configs/atomsRobot.geos'
    skinPath = 'D:/projects/atomsDemo/configs/atomsRobot_skin.geos'
    stateMachine = 'robotStateMachine'
    scaleMultiplier = 1.0

    def __init__(self):
        Atoms.SimulationEvent.__init__(self)
        self.setName(self.eventName)

    def load(self):
        AGENT_TYPE = GLOBAL_NAMES.AGENT_TYPE
        
        skel = AtomsCore.Skeleton(1)
        skeletonArchive = AtomsCore.Archive()
        if skeletonArchive.readFromFile(self.skelFile):
            skel.deserialise(skeletonArchive)
        else:
            return

        aType = Atoms.AgentType()
        aType.setSkeleton(skel)

        meshMap = AtomsCore.MapMetadata()
        typeArchive = AtomsCore.Archive()
        if typeArchive.readFromFile(self.geoPath):
            meshMap.deserialise(typeArchive)
            aType.metadata()[AGENT_TYPE.LOW_GEO] = meshMap

        skinMap = AtomsCore.MapMetadata()
        skinArchive = AtomsCore.Archive()
        if skinArchive.readFromFile(self.skinPath):
            skinMap.deserialise(skinArchive)
            aType.metadata()[AGENT_TYPE.SKIN_GEO] = skinMap

        aType.metadata()[AGENT_TYPE.STATE_MACHINE] = AtomsCore.StringMetadata(self.stateMachine)
        aType.metadata()[AGENT_TYPE.SCALE_MULTIPLIER] = AtomsCore.DoubleMetadata(self.scaleMultiplier)

        Atoms.AgentTypes.instance().addAgentType(self.eventName, aType)

	def unload(self):
        Atoms.AgentTypes.instance().removeAgentType(self.eventName)

Copyright © 2017, Toolchefs LTD.