ポーションを飲む環境を作る

環境構築

アニメーションについて調べたことをまとめます。

書きかけです。

アニメーションの管理

CKのメニューのGameplay、Animationsにあります。

ここで定義されているIdle Animationがアニメーションのひとつひとつになります。

Idle AnimationはID、Anim Event、Conditionsなどの要素で構成されています。このうち、自由に変更できるのはConditionsだけと思った方がいいです。

どのAnim Eventにたいしてどのアニメーションファイル(hkxファイル)が使われるのか、といったことは別の場所で管理されているようで、変更したり増やしたりはできません。

アニメーション時に小道具を使う場合があります。これはCKではAnimObjectというレコードで管理されていますが、これも増やしたりはできないようです。

FNIS

Anim Eventを増やすModです。詳しいことはわかりませんが、力業で増やしているようです。

問題は、Anim Eventを増やすには、まずFNISの作者に許可をもらい、対応してもらう必要があることです。するとFNISのバージョンがあがって公開されるようです。いまはもうFNISの開発は終了しているので、今後Anim Eventが増えることはないと思われます。

Nemesis

Anim Eventを増やすModです。

FNISと違って作者の対応が不要です。個々のModderが対応させればいいようです。

すでに結構な数のModがNemesisに対応しています。

DAR

状況に応じてアニメーションファイルを切り替えるModです。

Anim Eventを増やすModではありません。

このDARをうまく使うことで、アニメーションを追加できます。

アニメーションの制限

詳しいことはわかりませんが、Skyrimは納刀時と抜刀時でアニメーションが異なるようです。

納刀時用のアニメーションを抜刀時に再生させると、キャラクターの挙動がおかしくなってしまうようです。

アニメーションの動きを定義しているhkxファイルは、動き以外にもキャラクターの状態を操作する機能があるようです。これが想定外の動作になっておかしくなるのではないかと思います。

抜刀時に魔法を装備していると、ほとんどのアニメーションが再生できなくなってしまうようです。これは一時的に魔法を外すことで対応できます。

ポーションを飲むアニメーションを用意する

納刀時のポーションを飲むというアニメーションはバニラにあります。Anim EventはIdleDrinkPotionです。このIdleDrinkPotionは、結構もっさりしています。また、抜刀時に再生すると挙動がおかしくなるので使えません。

Simple Potion Drinking Animation by Loop – SSEというModがあります。このModのアニメーションは動きが早いのと、抜刀時にも問題なく再生できます。

小道具について

ポーションを飲むときは、手にポーションを持つべきです。バニラのIdleDrinkPotionはAnimObjectに用意されているポーションを使っています。

Simple Potion Drinking Animation by Loop – SSEは、ポーションが手の位置にあるように見える魔法のエフェクトを用意して、アニメーション中に魔法をかけて重ねているようです。

Eating Animations and Sounds SEという食事のアニメーションを追加するModがあります。こちらは食べ物が手の位置にあるようにみえる防具を用意して、アニメーション中に装備させているようです。バージョンアップで魔法ベースにかわったようです。バニラと同じAnimObjectになったようです。

アニメーションを再生させる

アニメーションの再生はスクリプトで行います。ポイントはスクリプトをどのように稼働させるかです。

Actorの行動を監視する方法

Actorに何らかの形でスクリプトを割り当てておきます。

  • Actorにアビリティのようなスペルを持たせておいて、スペルの効果(ActiveMagicEffect)のスクリプトを使う
  • ActorをReferenceAliasに入れておいて、ReferenceAliasのスクリプトを使う
  • Actorにスクリプトを直接割り当てて使う

ポーションを飲むとOnObjectEquippedイベントが発火します。そこでポーションを飲んだかどうかを判定してアニメーションを再生します。

メリットはModを含んだすべてのポーションで動作するということです。

デメリットはOnObjectEquippedイベントの負荷が高いことです。OnObjectEquippedイベントはActorが何かしらの装備品を身に着けた時、食事やポーションを摂取した際にかならず発火します。そのため、ポーションでない場合は無視する必要があります。必要のない状況でも無駄にスクリプト負荷が発生してしまいます。

すべてのActorにスクリプトを割り当てておくのが面倒だったのですが、SPIDを使うことで簡単になりました。

ポーションの効果を使う方法

ポーションの効果もスペルと同様にMagicEffectになっています。

  • ポーションの効果にアニメーション用のMagicEffectを加える
  • 元からあるポーションの効果にアニメーション用スクリプトを加える

メリットはすべてActorで動作するということです。

また、ポーションを飲んだときのみ処理が発生するので、無駄な処理がなくて負荷が低いことです。

デメリットはポーションに手を入れるので競合しやすく、Modで追加されるポーションにも手を入れる必要があることです。

参考サイト

FNISで遊ぼ!~AnimObject付きモーションの弄り方(おばちゃんのスカイリムガイド)

【Papyrus.psc】特定のモーションをとらせる(今からSkyrim)

Eating Animations and Sounds SE 1.9を使う

食事にアニメーションを実装するModですが、内部的には食事もポーションなので、同じ仕組みです。

1.7までがポーションの効果を使う実装、1.9からActorを監視する実装になりました。

以下はKIDを使ってAleのアニメーションを割り当てる例です。

Keyword = EASKID_All|Potion|VendorItemPotion

Keyword = EASKID_Group01|Potion|VendorItemPotion

Keyword = EASkey_Ale|Potion|VendorItemPotion

以下がAnimObject SwapperでAleの見た目をポーションにする例です。

[ANIO|EASPotionHealthGreatFaction]
aaAO_Ale|aaAO_PotionHealthGreat

EASPotionHealthGreatFaction というFactionと、ポーションのメッシュを使ってAnimObjectを用意する必要があります。

ポーションを飲む動作としてはやや長めですが、納刀、抜刀、立ち、座りなど様々な状況から問題なくアニメーションを再生できるので、既存のポーションアニメーションModより優れていると感じました。

タイトルとURLをコピーしました