メインコンテンツまでスキップ

UKawaiiPhysicsLibrary — ノード属性とプリセット

未正式リリース

この機能はまだ正式リリースされていません。KawaiiPhysics v1.22でリリース予定です。開発中のため仕様が変更される場合があります。

概要​

ゲームイベントで髪の重力方向を変え、イベント終了時に戻すなど、実行中のノード設定をBlueprintから読み書きできます。ノードタグで部位を選び、型に合うSet/Get関数で値を扱います。アセットに保存する設定の編集はUKawaiiPhysicsEditorLibraryを使います。

Gravityの変更例​

  1. CollectKawaiiPhysicsNodesFromComponentへ対象メッシュとFilterTagsを渡し、ノード参照を取得します。
  2. 各参照のGetNodeVectorPropertyへPropertyName = Gravityを渡し、元の値を保持します。
  3. SetNodeVectorPropertyへ新しいFVectorを渡し、ExecResultで成否を扱います。
  4. イベント終了時に、保持した値を同じSetterへ渡します。

通常の属性変更は自動で復元されません。期間終了で解除する効果にはSettings Multiplierなどの一時効果APIを使えます。

v1.21との違い​

Alphaの変更・取得、外力の追加・削除、外力属性の型別/Wildcardアクセス、C++のノード収集はv1.21にもあります。今回の追加はノード本体の属性アクセスや新機能へのAPIです。ボーン分割や固定サブステップ自体も既存機能です。

旧名(非推奨・引き続き動作)開発版で推奨する名前
SetAlphaToComponentSetAlphaOnComponent
GetAlphaFromComponentGetAlphaOnComponent
AddExternalForcesToComponentAddExternalForcesOnComponent
RemoveExternalForcesFromComponentRemoveExternalForcesOnComponent

単一ノードへのAddExternalForceも非推奨です。AddExternalForceWithExecResultではEKawaiiPhysicsAccessExternalForceResultのValid/NotValid分岐で成否を扱えます。名前変更だけを新しい物理挙動と解釈しないでください。

対象ノードの取得​

ConvertToKawaiiPhysicsはFAnimNodeReferenceをFKawaiiPhysicsReferenceへ変換します。Blueprintに公開されたCollectKawaiiPhysicsNodesFromAnimInstance/CollectKawaiiPhysicsNodesFromComponentは、参照配列Nodesと収集成否を返します。Component側は本体のAnimInstanceに加え、Linked AnimInstanceとPostProcessを対象にします。

FilterTagsは各ノードのKawaiiPhysicsTagで絞る条件です。空なら全件、bFilterExactMatchの既定はfalseです。複数対象へのSet Alphaは一致ノード全件、Get Alphaは最初の一致ノード1件を扱います。

既存のWarm Up関数で左右のノード参照をConvert to Kawaii Physicsへ渡し、Set Need Warm UpにつなぐBlueprint例
既存ドキュメントのWarm Up接続例。対象ノードの参照を渡す考え方を見るための図で、新しい属性SetterのUIを示すものではありません。

型別・Wildcardの属性アクセス​

BlueprintのKawaii Physicsカテゴリに、次のSet/Getペアがあります。PropertyNameには表示名ではなくソースのFNameを渡し、ExecResultを必ず確認します。

値の型API名の共通部分
bool / int32 / floatNodeBoolProperty / NodeIntProperty / NodeFloatProperty
FVector / FRotator / FTransformNodeVectorProperty / NodeRotatorProperty / NodeTransformProperty
FName / FGameplayTagNodeNameProperty / NodeGameplayTagProperty
ピンに接続した型NodeWildcardProperty

名前指定で任意の内部値を変更できるわけではありません。対象はFAnimNode_KawaiiPhysics自身が持つ、プリセットの属性分類で許可された項目です。Transient/EditorOnlyや拒否対象を除外し、型別APIは期待型、Wildcardはプロパティとピンの同一型を要求します。変更する属性に応じてボーン・共有コリジョン・Simple World Collisionの再初期化が要求されます。

WildcardはBlueprint用のCustomThunkです。ヘッダー上のint32仮引数を「どの型にも使えるC++関数」として直接呼び出さないでください。C++向けの文字列/低レベルヘルパーはUFUNCTIONを持たず、Blueprint公開APIとは区別します。

プリセットと機能別制御​

ApplyPresetDataAsset(ExecResult, KawaiiPhysics, Preset, Options)はUKawaiiPhysicsPresetDataAssetをランタイムノードへ適用します。安全のためExternalForcesとCustomExternalForcesは除外します。外力まで一括置換するEditor操作とは同じ範囲ではありません。

用途代表API/参照先
Simple World Collisionの切替SetUseSimpleWorldCollision、SetSimpleWorldCollisionSource、SetSimpleWorldCollisionSharedTag、SetSimpleWorldCollisionGatherInterval → Simple World Collision
コリジョンの左右生成SetMirrorDataTableForLimits(設定 Mirror Data Table for Collision に対応)、SetSkipMirroredBoneWithExistingCollision
Procedural WindSetProceduralWindParameters/OnComponent、ApplyProceduralWindPreset/OnComponent → Procedural Wind
一時効果StartPhysicsSettingsMultiplier/OnComponent、AddTransientExternalForce/OnComponent、対応するStop API
Shared PublisherSetSharedPublisherEnabled、SetSimpleWorldCollisionSettingsOnSharedPublisher、風のOnSharedPublisher API

GenerateTransientHandleとPushPhysicsSettingsMultiplier系はC++用で、Blueprintノードとしては公開されていません。一時効果の寿命・ブレンド・ハンドル管理は機能別説明に従ってください。

呼び出しタイミング​

BlueprintThreadSafeは別スレッドとの同期を自動で作る印ではありません。ノード属性アクセスは参照先へ即時実行します。AnimGraphの適切なThreadSafe文脈、または対象が評価中でないGameThreadから呼んでください。収集をAnimGraphから行う場合は呼び出し元自身のAnimInstance/Componentに限定し、他のオブジェクトは評価されていないGameThreadで扱います。

個々のAPIには別の制約があります。診断はGameThread専用、風のパラメータ更新はPendingRequest経由です。属性APIで共有時計・外力の内部状態を書き換える代わりに、対応する専用APIを使ってください。

ランタイム適用​

Blueprint公開の UKawaiiPhysicsLibrary::ApplyPresetDataAsset はノード参照、プリセット、適用オプションを受け取り、ExecResultでアクセス結果を返します。ExternalForcesとCustomExternalForcesは安全性のためコピーしません。

適用後はModifyBonesとShared Collisionの再初期化を要求します。期間終了で元へ戻る効果ではなく、ノード設定の適用です。一時効果はSettings Multiplier、スレッド・評価文脈の条件はUKawaiiPhysicsLibraryを確認してください。

v1.22予定の機能一覧 · 正式版の物理設定ガイド

関連するUE公式ドキュメント​