- Papyrusスクリプトの記憶を記録に残すシリーズその5 -
スクリプトで自由に寝転がったり座ったりしたい!
目次
1.「PlayIdle」を使う方法
1-1. 起点となるものにスクリプトを付ける
まずはモーションをとらせる起点となるものにスクリプトを付けます。設置したアクティベーターでも良いですし、魔法に付けても良いです。新規スクリプトの付け方は前回まででやりましたので今回は省略します。
スクリプトには以下のコードを追記します。
Idle Property idlTest Auto ; モーションを指定するプロパティ
Event OnActivate(ObjectReference akActionRef)
Actor actPlayer = Game.GetPlayer() ; プレイヤーを格納する変数
If akActionRef != actPlayer
actPlayer = None
Return
EndIf
If actPlayer.IsWeaponDrawn() == true
actPlayer.SheatheWeapon() ; 武器をしまう
Utility.Wait(2.2)
EndIf
Game.ForceThirdPerson() ; 3人称視点に切り替え
actPlayer.PlayIdle(idlTest) ; モーションの実行
actPlayer = None
EndEvent
idlTestプロパティに実行したいモーションを指定すればOKです。モーションリストを参考にしてください。「PlayIdle」でモーションを実行します。
1-2. モーション実行前に必要な処理
モーションを実行する前に処理を2つ入れています。
1つは、武器を構えているときにしまう処理です。武器を構えているとモーションが出ないので、「IsWeaponDrawn」で構えを取得し、「SheatheWeapon」でしまわせています。
ここでのポイントは「Utility.Wait」です。これは武器をしまう動作を待っているのですが、動作が終了していないとその次のモーションが実行されません。上記では2.2秒待っていますが、指定するモーションによってはもう少し短くても良かったりしますので、テストプレイで確かめる必要があります。
もう1つの処理が、3人称視点への切り替えです。「ForceThirdPerson」で強制的に3人称視点になります。
1人称視点だと何のモーションか良くわからないものが多いのと、視点が動かせなくなったり不自然に両手が表示されたり等の不具合が出るものが結構あります。そのため、事前に3人称視点への切り替えが必要です。
以上が PlayIdle を使う方法で、おそらく正規のやり方だと思います。
ここまで説明しておいてなんですが、実はこの方法では実行できないモーションがかなり多くありまして、有用性は低いです。
2.「SendAnimationEvent」を使う方法
2-1. Debugスクリプトでモーションを再生する
こちらの方法なら再生できるモーションが多いのでおすすめです。
モーション名を文字列で指定する必要があるため、スペルミスしないように気をつけましょう。
Event OnActivate(ObjectReference akActionRef)
Actor actPlayer = Game.GetPlayer() ; プレイヤー
If akActionRef != actPlayer
actPlayer = None
Return
EndIf
If actPlayer.IsWeaponDrawn() == true
actPlayer.SheatheWeapon()
Utility.Wait(2.2)
EndIf
Game.ForceThirdPerson()
Debug.SendAnimationEvent(actPlayer, "IdlePray") ; モーションの実行
actPlayer = None
EndEvent
やり方は PlayIdle のときとほとんど変わりません。上記の例では「IdlePray」という、祈るモーションを指定しています。その他のモーションはモーションリストを参考にしてください。
2-2. モーション名をプロパティで指定する
モーション名の文字列はStringプロパティで指定することもできますので、複数の場所でスクリプトを使いまわす場合には以下のように2行だけ変更します。
;~
String Property strIdle Auto ; 文字列プロパティを追加
;~
Debug.SendAnimationEvent(actPlayer, strIdle) ; モーション名をstrIdleプロパティで指定
;~
Stringプロパティは文字列を直接指定できますので、モーション名を書いておけばOKです。
3. モーションをキャンセルする方法
3-1. 一部のモーションに有効な「IdleStop_Loose」
継続モーションを解除するには、プレイヤーがジャンプしたり武器を構えたりする必要があります。これを任意の時点で解除する方法です。
一部のモーションでは、以下の記述でスマートに解除することができます。
;~
Idle Property idlStop Auto ; ストップモーションを指定するプロパティ
;~
actPlayer.PlayIdle(idlStop)
;~
idlStopプロパティには「IdleStop_Loose」を指定します。このモーションは PlayIdle で使ったときのみ、一部のモーションをストップして通常状態に戻します。
例えば IdlePray モーションは、この方法で解除することができます。
3-2. 武器を構えて解除する
上記の方法で解除できない場合の方法です。武器を構えさせます。
actPlayer.DrawWeapon()
動きは自然ですが、これで解除できないモーションもあります。
3-3. 強制的に着地させて解除する
プレイヤーを少し持ち上げて、強制的に着地モーションを取らせることでも解除できます。
actPlayer.SetPosition( \
actPlayer.GetPositionX(), actPlayer.GetPositionY(), actPlayer.GetPositionZ() + 80 \
)
z方向に 80 持ち上げています。この方法はほとんどのモーションを解除できます。着地モーションが出てしまうのと、モーションの種類によってはカメラがカクっと動くのが難点です。
スクリプト内の「\」は、途中で改行するためのエスケープ記号です。
4. モーションリスト
モーションを90個だけ抜粋してリストにしました。動作の簡単な説明と、その動作が継続して再生され続けるかどうかをまとめています。
これらのモーション名は、Gameplayメニュー > Animations... で表示される Idle Animations のツリーをたどり、Actors\Character\Behaviors\0_Master.hkx 以下の項目内にある Anim Event から抜粋しています。
| 名前 | 動作 | 継続 |
|---|---|---|
| IdleActivatePickUp | 目の前の物を取る | |
| IdleActivatePickUpLow | 足元の物を取る | |
| IdleApplaud2 | 胸の前で細かく拍手 | |
| IdleApplaud3 | 顔の前で大きく拍手 | |
| IdleApplaud4 | 大袈裟に胸の前で拍手 | |
| IdleApplaud5 | 大袈裟に顔の前で拍手 | |
| IdleApplaudSarcastic | 投げ遣りな拍手 | ○ |
| IdleBeggar | 膝を立てた横座り | ○ |
| IdleBlowHornImperial | 戦闘ラッパを吹く | |
| IdleBook_OnePage | 1または4ページめくる | ○ |
| IdleBook_PageTurn | 1または4ページめくる | ○ |
| IdleBook_Read | 本を読む | ○ |
| IdleBoundKneesStart | 後ろ手に縛られてひざまずく | ○ |
| IdleBracedPain | 敬うようにお辞儀する | |
| IdleCarryBucketFillEnter | 桶を持って満たす | |
| IdleCarryBucketPourEnter | 桶を満たす動作(桶は出ない) | |
| IdleChildApologize | 頭をかく | |
| IdleChildCryingStart | 子供のように泣く | ○ |
| IdleChildFidget | 両手を前後に大きく振る | |
| IdleChildLayOnFloor | 床に腹ばいになる | ○ |
| IdleChildPlayDirt | 右手武器の柄で床を叩くような動作 | |
| IdleChildPlayDoll | 人形でひとしきり遊ぶ | |
| IdleChildShy | もじもじする | |
| IdleChildSitOnKnees | 正座して首を左右に揺らす | |
| IdleChildTaunt1 | オーマイガーっ! | |
| IdleChildTaunt2 | ちっくしょう! | |
| IdleChildTaunt3 | だめだねぇ… | |
| IdleChildTaunt4 | あーはははは! | |
| IdleChildWhineKick | サッカーボールキック! | |
| IdleChildWhineStompFeet | 床をダンっ! | |
| IdleCiceroDance1 | バカ踊り | |
| IdleCiceroDance2 | リズムダンス | |
| IdleCiceroDance3 | バカ踊りショートバージョン | |
| IdleCleanSword | 剣を綺麗にする | |
| IdleComeThisWay | こっちこっち | |
| IdleCowering | 危なーい! | |
| IdleDrink | ジョッキから飲む | |
| IdleDrinkPotion | 栄養ドリンクを飲む | |
| IdleEatingStandingStart | 立ってパンをかじる | ○ |
| IdleExamine | 腕を組んで見る | |
| IdleFeedChicken | 花かごを取り出してばらまく | |
| IdleFluteStart | フルートを吹く(音なし) | ○ |
| IdleGetAttention | 両手を挙げて振る | ○ |
| IdleGive | 何かを差し出す | |
| IdleGrave_01 | 手を前にして黙祷 | ○ |
| IdleGrave_02 | 手を後ろにして黙祷 | ○ |
| IdleHoe | クワで耕す | ○ |
| IdleInjured | 弱腰の喧嘩態勢 | ○ |
| IdleKneeling | 足元を調べる | ○ |
| IdleLaugh | 笑う(正面視点不可) | |
| IdleLaydown | 仰向けに寝そべる | ○ |
| IdleLeanTable | テーブルに手をつく(テーブルは出ない) | ○ |
| IdleListenStart | 人の話を聞く | ○ |
| IdleListenStartAngry | 人の話を怒りながら聞く | ○ |
| IdleLookFar | 遠くを見る | |
| IdleLooseSweepingStart | ほうきを持って掃除する | ○ |
| IdleLounge | 空中待機ポーズ | ○ |
| IdleLuteStart | リュートを演奏する(音なし) | ○ |
| IdleMesmerize | 目の前の物を見る | ○ |
| IdleNervous | キョロキョロする | ○ |
| IdleNoteRead | メモを取り出して読む | ○ |
| IdlePointFar_01 | 遠くを指す | |
| IdlePointFar_02 | 遠くを指す | |
| IdlePray | 祈る | ○ |
| IdlePrisonerBeat | 右手パンチ | |
| IdleRitualSkull1 | 空を仰ぐ | ○ |
| IdleRitualSkull2 | 空を仰ぐ | ○ |
| IdleRitualSkull3 | 空に向かってガッツポーズ! | |
| IdleSalute | 右の拳を胸に当てて挨拶 | |
| IdleSell | ポーションを持って構える | ○ |
| IdleSilentBow | お辞儀をして挨拶 | |
| IdleSitCrossLeggedEnter | あぐらで座る | ○ |
| IdleSitLedgeEnter | 足を降ろして座る | ○ |
| IdleSleepNod | コックリ | |
| IdleSnapToAttention | 手を後ろに組んで気を付け! | |
| IdleStudy | 顎に手を当てる | ○ |
| IdleSurrender | 両手を挙げて驚く | |
| IdleT02AscendFemale | 足を閉じて浮く(効果音有り) | ○ |
| IdleT02AscendMale | 足を開いて浮く(効果音有り) | ○ |
| IdleTake | 何かを取ってポケットに入れる | |
| IdleUncontrollableCough | 咳をする | |
| IdleWarmArms | 寒くて両腕をさする | |
| IdleWarmHands | 手を温める | ○ |
| IdleWave | ばいばい! | |
| IdleWipeBrow | 額の汗をぬぐう | |
| IdleWounded_01 | 疲れて座り込む | ○ |
| IdleWounded_02 | 傷ついて横たわる | ○ |
| IdleWounded_03 | お腹を押さえて座り込む | ○ |
| IdleWriteLedgerEnter | 羽ペンとノートを持つ | ○ |
| IdleWriteTableStandingEnter | 羽ペンで書く(正面視点不可) | ○ |
補足:私はスクリプトを書くのは好きですが、専門家ではありません。内容は creationkit.com の情報と個人的な経験を基にして書いています。どうかご参考程度にご覧ください。




初めまして。narekonekoと申します。
返信削除今スクリプトを使ったMODを制作中で、アニメーション取らせるのにこのページが大変役に立ってます。記事を書いてくださってありがとうございます!
narekonekoさん初めまして!
削除お役に立ててすごく嬉しいです。今となっては載せているスクリプトも書き直したい部分がありますが、それでもこうして見て頂けるのはありがたいことだなぁと感じています。
MOD拝見しました。料理人を連れていけるのは今までにない新しい視点でとても良いと思います。お互いにMOD作成を楽しみましょう!