...
...
Click on "Add" and you will be prompted with a dialog asking if you want to edit your clip in GUI or script mode.
イベントを作成するには、Atoms UIを開き、必ず
「AnimationClip Events」タブを選択してください。
「Add」をクリックすると、GUIまたはスクリプトモードでクリップを編集するかどうかを尋ねるダイアログが表示されます。
GUI モード
ユーザーのAnimation Clipに名前を付けて下さい(すなわちrobotWalk)。
以前に、エクスポートしたFBXファイルを選択します。ファイルを選択すると、直ちにAtomsは、そのプレビューファイルを検索し、GUIの右側にロードします。ほとんどのGUIオプションは既にこちらで説明されています。
チュートリアルでは、 "Loop Blend"を4に変更します。
プレビューは、ループの開始フレーム、終了フレームを見つける際に、とても便利な機能です。プレビュー上にマウスを移動して、互いに似た2つのポーズを見つけます。一般的に、フットが地面に降りる最初のフレームを選択することは良い選択です。今回の場合、開始フレームは21、終了フレームは50になります。
「Direction Type」をStaticに設定します。
プレビューでは、3D Axisも表示されます。スケルトンの動きを確認して、スケルトンのルートがクリップの最初から最後までの空間をどのように移動するかを確認できます。今回の場合、このクリップの主な移動軸はX軸です。
このため、「Direction」フィールドを(1、0、0)に設定することができます。
「Register」ボタンをクリックするか、Ctrl + Sを押します。
以上で、アニメーションクリップを使用する準備が整いました。
Script モード
Script モードを選択した場合は、次のようにスクリプトを編集する必要があります。
それからCtrl + Sを押すか、「Register」ボタンをクリックしてください。
コード ブロック | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||
import os
import AtomsMath
import AtomsCore
import Atoms
from Atoms import GLOBAL_NAMES
class AnimClipEvent6(Atoms.SimulationEvent):
eventName = 'robotWalk'
clipPath = 'D:/projects/atomsDemo/clips/walk.fbx'
blendFramesAfterFootUp = 4
loop = True
loopStart = 21
loopEnd = 50
loopBlend = 4
idle = False
direction = [1.0,0.0,0.0]
directionType = 1
directionFromJoints = [0,1]
def __init__(self):
Atoms.SimulationEvent.__init__(self)
self.setName(self.eventName)
def load(self):
CLIP = GLOBAL_NAMES.CLIP
aClips = Atoms.AnimationClips.instance()
aClips.addAnimationClip(self.eventName, self.clipPath, True)
acPtr = aClips.animationClip(self.eventName)
if acPtr is None:
return
metadataMap = acPtr.metadata()
metadataMap[CLIP.BLEND_FRAMES_AFTER_FOOT_UP] = AtomsCore.IntMetadata(self.blendFramesAfterFootUp)
metadataMap[CLIP.LOOP] = AtomsCore.BoolMetadata(self.loop)
metadataMap[CLIP.LOOP_START] = AtomsCore.IntMetadata(self.loopStart)
metadataMap[CLIP.LOOP_END] = AtomsCore.IntMetadata(self.loopEnd)
metadataMap[CLIP.LOOP_NUM_BLEND_FRAMES] = AtomsCore.IntMetadata(self.loopBlend)
if self.directionType == 1:
acPtr.setDirectionType(Atoms.AnimationClip.DirectionType.Static)
elif self.directionType == 0:
acPtr.setDirectionType(Atoms.AnimationClip.DirectionType.Pelvis)
else:
acPtr.setDirectionType(Atoms.AnimationClip.DirectionType.Joints)
acPtr.setDirection(AtomsMath.V3d(self.direction[0], self.direction[1], self.direction[2]))
acPtr.setDirectionFromJoints(self.directionFromJoints[0], self.directionFromJoints[1])
acPtr.setIdle(self.idle)
|