ランタイム制御
ゲーム実行中にKawaiiPhysicsを動的に制御する方法を説明します。
パラメータの動的変更
Blueprintから
Animation Blueprintの変数を通じてパラメータを変更できます。
// Animation Blueprint内
UPROPERTY(BlueprintReadWrite)
float DynamicDamping = 0.1f;
C++から
// AnimInstanceを取得してパラメータを変更
UAnimInstance* AnimInstance = Mesh->GetAnimInstance();
// カスタムAnimInstanceクラスでパラメータを公開
有効/無効の切り替え
一時停止
UPROPERTY()
bool bEnabled = true;
使用例
- カットシーン中は無効化
- ポーズメニュー中は無効化
- LODに応じて無効化
外部力の動的適用
SetExternalForce
// 爆発の衝撃
void ApplyExplosionForce(FVector ExplosionLocation, float Force)
{
FVector Direction = (BoneLocation - ExplosionLocation).GetSafeNormal();
SetExternalForce(Direction * Force);
}
時間経過で減衰
void Tick(float DeltaTime)
{
// 外部力を徐々に減衰
CurrentExternalForce *= FMath::Exp(-DecayRate * DeltaTime);
SetExternalForce(CurrentExternalForce);
}
リセット
物理状態を初期状態に戻します。
// 物理状態をリセット
ResetDynamics();
使用例
- テレポート後
- アニメーション遷移時
- リスポーン時
イベント連携
AnimNotifyサポート
バージョン情報
v1.17.0で追加
KawaiiPhysics専用のAnimNotifyが提供されています。
AnimNotify_KawaiiPhysics_ResetDynamics
物理状態をリセットします。テレポートやアニメーション遷移時に使用します。
AnimNotify_KawaiiPhysics_SetExternalForce
外部力を設定します。ジャンプ開始時の風圧などに使用します。
AnimNotifyState: Set Alpha
バージョン情報
v1.20.0で追加
アニメーション中に物理のブレンド率を動的に変更できるAnimNotifyStateです。
アニメーションタイムライン:
[=======================================]
[--Set Alpha: 0.0 -> 1.0--]
↑ ↑
開始(物理OFF) 終了(物理ON)
使用例:
- 特定のアニメーション中だけ物理を無効化
- アニメーション遷移時のスムーズなブレンド
- カットシーン中の制御
カスタムAnimNotify
Anim Notifyから物理パラメータを変更:
void UAnimNotify_KPForce::Notify(...)
{
// ジャンプ開始時に外部力を適用
KawaiiPhysics->SetExternalForce(FVector(0, 0, 100));
}
ゲームプレイイベント
// ダメージを受けた時
void OnDamageReceived(float Damage, FVector HitDirection)
{
// 衝撃を物理に反映
float ImpactForce = Damage * 10.0f;
KawaiiPhysics->SetExternalForce(HitDirection * ImpactForce);
}
Blueprint Function Library
よく使う操作をライブラリ化すると便利です。
UCLASS()
class UKawaiiPhysicsLibrary : public UBlueprintFunctionLibrary
{
UFUNCTION(BlueprintCallable)
static void ApplyImpulse(AActor* Actor, FVector Impulse);
UFUNCTION(BlueprintCallable)
static void ResetAllKawaiiPhysics(AActor* Actor);
};
詳しくは APIリファレンス を参照してください。