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

UKawaiiPhysicsLibrary

Blueprint Function LibraryのAPIリファレンスです。

ソースを見る

用途別API​

クラス定義​

UCLASS()
class KAWAIIPHYSICS_API UKawaiiPhysicsLibrary : public UBlueprintFunctionLibrary

ノード参照の取得​

ConvertToKawaiiPhysics​

AnimNodeからKawaiiPhysics参照を取得します。

UFUNCTION(BlueprintCallable, Category = "Kawaii Physics",
meta = (BlueprintThreadSafe, ExpandEnumAsExecs = "Result"))
static FKawaiiPhysicsReference ConvertToKawaiiPhysics(
const FAnimNodeReference& Node,
EAnimNodeReferenceConversionResult& Result
);

ConvertToKawaiiPhysicsPure​

AnimNodeからKawaiiPhysics参照を取得(Pure版)。

UFUNCTION(BlueprintPure, Category = "Kawaii Physics",
meta = (BlueprintThreadSafe, DisplayName = "Convert to Kawaii Physics (Pure)"))
static void ConvertToKawaiiPhysicsPure(
const FAnimNodeReference& Node,
FKawaiiPhysicsReference& KawaiiPhysics,
bool& Result
);

CollectKawaiiPhysicsNodes​

AnimInstance(ABP)または SkeletalMeshComponent から、KawaiiPhysics ノード参照をまとめて取得します。GameplayTag でフィルタリングできます。

注記

この関数は C++専用ヘルパー であり、UFUNCTION ではないため Blueprint からは直接呼び出せません(AnimInstance 版と SkeletalMeshComponent 版の2オーバーロードを提供)。Blueprint からノードへ一括アクセスする場合は、AddExternalForcesToComponent / SetAlphaToComponent など Component を受け取る関数を使用してください。

// AnimInstance(ABP) から収集
static bool CollectKawaiiPhysicsNodes(
TArray<FKawaiiPhysicsReference>& Nodes,
UAnimInstance* AnimInstance,
const FGameplayTagContainer& FilterTags,
bool bFilterExactMatch
);

// SkeletalMeshComponent から収集
static bool CollectKawaiiPhysicsNodes(
TArray<FKawaiiPhysicsReference>& Nodes,
USkeletalMeshComponent* MeshComp,
const FGameplayTagContainer& FilterTags,
bool bFilterExactMatch
);

物理リセット​

ResetDynamics​

KawaiiPhysicsノードの物理状態をリセットします。

UFUNCTION(BlueprintCallable, Category = "Kawaii Physics", meta=(BlueprintThreadSafe))
static FKawaiiPhysicsReference ResetDynamics(const FKawaiiPhysicsReference& KawaiiPhysics);

使用例:

  • テレポート後のリセット
  • アニメーション切り替え時
  • シーン遷移時

ボーン設定​

SetRootBoneName / GetRootBoneName​

ルートボーン名の設定/取得。

UFUNCTION(BlueprintCallable, Category = "Kawaii Physics", meta=(BlueprintThreadSafe))
static FKawaiiPhysicsReference SetRootBoneName(
const FKawaiiPhysicsReference& KawaiiPhysics,
UPARAM(ref) FName& RootBoneName
);

UFUNCTION(BlueprintPure, Category = "Kawaii Physics", meta=(BlueprintThreadSafe))
static FName GetRootBoneName(const FKawaiiPhysicsReference& KawaiiPhysics);

SetExcludeBoneNames / GetExcludeBoneNames​

除外ボーン名の設定/取得。

UFUNCTION(BlueprintCallable, Category = "Kawaii Physics", meta=(BlueprintThreadSafe))
static FKawaiiPhysicsReference SetExcludeBoneNames(
const FKawaiiPhysicsReference& KawaiiPhysics,
UPARAM(ref) TArray<FName>& ExcludeBoneNames
);

UFUNCTION(BlueprintPure, Category = "Kawaii Physics", meta=(BlueprintThreadSafe))
static TArray<FName> GetExcludeBoneNames(const FKawaiiPhysicsReference& KawaiiPhysics);

Bone Subdivision​

ボーン細分化(Bone Subdivision)に関するランタイム制御です。Count系を変更すると次回Evaluateで再初期化されます。

SetBoneSubdivisionCount / GetBoneSubdivisionCount​

縦方向ダミー分割数の設定/取得(0〜10にクランプ)。

UFUNCTION(BlueprintCallable, Category = "Kawaii Physics", meta=(BlueprintThreadSafe))
static FKawaiiPhysicsReference SetBoneSubdivisionCount(
const FKawaiiPhysicsReference& KawaiiPhysics,
int32 BoneSubdivisionCount
);

UFUNCTION(BlueprintPure, Category = "Kawaii Physics", meta=(BlueprintThreadSafe))
static int32 GetBoneSubdivisionCount(const FKawaiiPhysicsReference& KawaiiPhysics);

SetBoneSubdivisionCollisionOnly / GetBoneSubdivisionCollisionOnly​

コリジョン専用モードの設定/取得。

UFUNCTION(BlueprintCallable, Category = "Kawaii Physics", meta=(BlueprintThreadSafe))
static FKawaiiPhysicsReference SetBoneSubdivisionCollisionOnly(
const FKawaiiPhysicsReference& KawaiiPhysics,
bool bBoneSubdivisionCollisionOnly
);

UFUNCTION(BlueprintPure, Category = "Kawaii Physics", meta=(BlueprintThreadSafe))
static bool GetBoneSubdivisionCollisionOnly(const FKawaiiPhysicsReference& KawaiiPhysics);

SetBoneConstraintSubdivisionCount / GetBoneConstraintSubdivisionCount​

横方向(bridge dummy)分割数の設定/取得(0〜10にクランプ)。

UFUNCTION(BlueprintCallable, Category = "Kawaii Physics", meta=(BlueprintThreadSafe))
static FKawaiiPhysicsReference SetBoneConstraintSubdivisionCount(
const FKawaiiPhysicsReference& KawaiiPhysics,
int32 BoneConstraintSubdivisionCount
);

UFUNCTION(BlueprintPure, Category = "Kawaii Physics", meta=(BlueprintThreadSafe))
static int32 GetBoneConstraintSubdivisionCount(const FKawaiiPhysicsReference& KawaiiPhysics);

SetBoneConstraintSubdivisionFeedbackScale / GetBoneConstraintSubdivisionFeedbackScale​

フィードバック強度の設定/取得(ランタイムスカラー、再初期化不要)。

UFUNCTION(BlueprintCallable, Category = "Kawaii Physics", meta=(BlueprintThreadSafe))
static FKawaiiPhysicsReference SetBoneConstraintSubdivisionFeedbackScale(
const FKawaiiPhysicsReference& KawaiiPhysics,
float BoneConstraintSubdivisionFeedbackScale
);

UFUNCTION(BlueprintPure, Category = "Kawaii Physics", meta=(BlueprintThreadSafe))
static float GetBoneConstraintSubdivisionFeedbackScale(const FKawaiiPhysicsReference& KawaiiPhysics);

Physics Settings​

SetPhysicsSettings / GetPhysicsSettings​

物理設定の設定/取得。

UFUNCTION(BlueprintCallable, Category = "Kawaii Physics", meta=(BlueprintThreadSafe))
static FKawaiiPhysicsReference SetPhysicsSettings(
const FKawaiiPhysicsReference& KawaiiPhysics,
UPARAM(ref) FKawaiiPhysicsSettings& PhysicsSettings
);

UFUNCTION(BlueprintPure, Category = "Kawaii Physics", meta=(BlueprintThreadSafe))
static FKawaiiPhysicsSettings GetPhysicsSettings(const FKawaiiPhysicsReference& KawaiiPhysics);

SetDummyBoneLength / GetDummyBoneLength​

ダミーボーン長の設定/取得。

UFUNCTION(BlueprintCallable, Category = "Kawaii Physics", meta=(BlueprintThreadSafe))
static FKawaiiPhysicsReference SetDummyBoneLength(
const FKawaiiPhysicsReference& KawaiiPhysics,
float DummyBoneLength
);

UFUNCTION(BlueprintPure, Category = "Kawaii Physics", meta=(BlueprintThreadSafe))
static float GetDummyBoneLength(const FKawaiiPhysicsReference& KawaiiPhysics);

テレポートしきい値​

SetTeleportDistanceThreshold / GetTeleportDistanceThreshold​

テレポート距離しきい値の設定/取得。

UFUNCTION(BlueprintCallable, Category = "Kawaii Physics", meta=(BlueprintThreadSafe))
static FKawaiiPhysicsReference SetTeleportDistanceThreshold(
const FKawaiiPhysicsReference& KawaiiPhysics,
float TeleportDistanceThreshold
);

UFUNCTION(BlueprintPure, Category = "Kawaii Physics", meta=(BlueprintThreadSafe))
static float GetTeleportDistanceThreshold(const FKawaiiPhysicsReference& KawaiiPhysics);

SetTeleportRotationThreshold / GetTeleportRotationThreshold​

テレポート回転しきい値の設定/取得。

UFUNCTION(BlueprintCallable, Category = "Kawaii Physics", meta=(BlueprintThreadSafe))
static FKawaiiPhysicsReference SetTeleportRotationThreshold(
const FKawaiiPhysicsReference& KawaiiPhysics,
float TeleportRotationThreshold
);

UFUNCTION(BlueprintPure, Category = "Kawaii Physics", meta=(BlueprintThreadSafe))
static float GetTeleportRotationThreshold(const FKawaiiPhysicsReference& KawaiiPhysics);

外部力​

SetGravity / GetGravity​

重力ベクトルの設定/取得。

UFUNCTION(BlueprintCallable, Category = "Kawaii Physics", meta=(BlueprintThreadSafe))
static FKawaiiPhysicsReference SetGravity(
const FKawaiiPhysicsReference& KawaiiPhysics,
FVector Gravity
);

UFUNCTION(BlueprintPure, Category = "Kawaii Physics", meta=(BlueprintThreadSafe))
static FVector GetGravity(const FKawaiiPhysicsReference& KawaiiPhysics);

SetEnableWind / GetEnableWind​

風の有効化設定/取得。

UFUNCTION(BlueprintCallable, Category = "Kawaii Physics", meta=(BlueprintThreadSafe))
static FKawaiiPhysicsReference SetEnableWind(
const FKawaiiPhysicsReference& KawaiiPhysics,
bool bEnableWind
);

UFUNCTION(BlueprintPure, Category = "Kawaii Physics", meta=(BlueprintThreadSafe))
static bool GetEnableWind(const FKawaiiPhysicsReference& KawaiiPhysics);

SetWindScale / GetWindScale​

風のスケールの設定/取得。

UFUNCTION(BlueprintCallable, Category = "Kawaii Physics", meta=(BlueprintThreadSafe))
static FKawaiiPhysicsReference SetWindScale(
const FKawaiiPhysicsReference& KawaiiPhysics,
float WindScale
);

UFUNCTION(BlueprintPure, Category = "Kawaii Physics", meta=(BlueprintThreadSafe))
static float GetWindScale(const FKawaiiPhysicsReference& KawaiiPhysics);

コリジョン​

SetAllowWorldCollision / GetAllowWorldCollision​

ワールドコリジョンの有効化設定/取得。

UFUNCTION(BlueprintCallable, Category = "Kawaii Physics", meta=(BlueprintThreadSafe))
static FKawaiiPhysicsReference SetAllowWorldCollision(
const FKawaiiPhysicsReference& KawaiiPhysics,
bool bAllowWorldCollision
);

UFUNCTION(BlueprintPure, Category = "Kawaii Physics", meta=(BlueprintThreadSafe))
static bool GetAllowWorldCollision(const FKawaiiPhysicsReference& KawaiiPhysics);

SetLimitsDataAsset / GetLimitsDataAsset​

コリジョンData Assetの設定/取得。

UFUNCTION(BlueprintCallable, Category = "Kawaii Physics", meta=(BlueprintThreadSafe))
static FKawaiiPhysicsReference SetLimitsDataAsset(
const FKawaiiPhysicsReference& KawaiiPhysics,
UKawaiiPhysicsLimitsDataAsset* LimitsDataAsset
);

UFUNCTION(BlueprintPure, Category = "Kawaii Physics", meta=(BlueprintThreadSafe))
static UKawaiiPhysicsLimitsDataAsset* GetLimitsDataAsset(const FKawaiiPhysicsReference& KawaiiPhysics);

Shared Collision​

共有コリジョン(Shared Collision)の Source/Target/グループタグを切り替えます。各 Setter は内部で RequestSharedCollisionReinit() を呼び、変更は次回の Evaluate(ワーカースレッド)でスレッドセーフに再初期化されます(PreUpdate を介しません)。カテゴリは Kawaii Physics|Shared Collision。

SetSharedCollisionSource / GetSharedCollisionSource​

このノードを共有コリジョンの Source にするかの設定/取得。

UFUNCTION(BlueprintCallable, Category = "Kawaii Physics|Shared Collision", meta=(BlueprintThreadSafe))
static FKawaiiPhysicsReference SetSharedCollisionSource(
const FKawaiiPhysicsReference& KawaiiPhysics,
bool bSharedCollisionSource
);

UFUNCTION(BlueprintPure, Category = "Kawaii Physics|Shared Collision", meta=(BlueprintThreadSafe))
static bool GetSharedCollisionSource(const FKawaiiPhysicsReference& KawaiiPhysics);

SetUseSharedCollision / GetUseSharedCollision​

このノードを共有コリジョンの Target にするかの設定/取得。

UFUNCTION(BlueprintCallable, Category = "Kawaii Physics|Shared Collision", meta=(BlueprintThreadSafe))
static FKawaiiPhysicsReference SetUseSharedCollision(
const FKawaiiPhysicsReference& KawaiiPhysics,
bool bUseSharedCollision
);

UFUNCTION(BlueprintPure, Category = "Kawaii Physics|Shared Collision", meta=(BlueprintThreadSafe))
static bool GetUseSharedCollision(const FKawaiiPhysicsReference& KawaiiPhysics);

SetSharedCollisionGroupTag / GetSharedCollisionGroupTag​

共有コリジョンのグループタグの設定/取得。

UFUNCTION(BlueprintCallable, Category = "Kawaii Physics|Shared Collision", meta=(BlueprintThreadSafe))
static FKawaiiPhysicsReference SetSharedCollisionGroupTag(
const FKawaiiPhysicsReference& KawaiiPhysics,
FGameplayTag SharedCollisionGroupTag
);

UFUNCTION(BlueprintPure, Category = "Kawaii Physics|Shared Collision", meta=(BlueprintThreadSafe))
static FGameplayTag GetSharedCollisionGroupTag(const FKawaiiPhysicsReference& KawaiiPhysics);

ウォームアップ​

SetNeedWarmUp / GetNeedWarmUp​

ウォームアップの有効化設定/取得。

UFUNCTION(BlueprintCallable, Category = "Kawaii Physics", meta=(BlueprintThreadSafe))
static FKawaiiPhysicsReference SetNeedWarmUp(
const FKawaiiPhysicsReference& KawaiiPhysics,
bool bNeedWarmUp
);

UFUNCTION(BlueprintPure, Category = "Kawaii Physics", meta=(BlueprintThreadSafe))
static bool GetNeedWarmUp(const FKawaiiPhysicsReference& KawaiiPhysics);

External Force API​

AddExternalForce​

外力を追加します。

UFUNCTION(BlueprintCallable, Category = "Kawaii Physics", meta=(BlueprintThreadSafe))
static bool AddExternalForce(
const FKawaiiPhysicsReference& KawaiiPhysics,
FInstancedStruct& ExternalForce,
UObject* Owner,
bool bIsOneShot = false
);

AddExternalForceWithExecResult​

外力を追加(実行結果付き)。

UFUNCTION(BlueprintCallable, Category = "Kawaii Physics",
meta=(BlueprintThreadSafe, ExpandEnumAsExecs = "ExecResult"))
static FKawaiiPhysicsReference AddExternalForceWithExecResult(
EKawaiiPhysicsAccessExternalForceResult& ExecResult,
const FKawaiiPhysicsReference& KawaiiPhysics,
FInstancedStruct& ExternalForce,
UObject* Owner
);

AddExternalForcesToComponent​

SkeletalMeshComponentに外力を追加します。

UFUNCTION(BlueprintCallable, Category = "Kawaii Physics", meta=(BlueprintThreadSafe))
static bool AddExternalForcesToComponent(
USkeletalMeshComponent* MeshComp,
UPARAM(ref) TArray<FInstancedStruct>& ExternalForces,
UObject* Owner,
UPARAM(ref) FGameplayTagContainer& FilterTags,
bool bFilterExactMatch = false,
bool bIsOneShot = false
);

RemoveExternalForcesFromComponent​

SkeletalMeshComponentから外力を削除します。

UFUNCTION(BlueprintCallable, Category = "Kawaii Physics", meta=(BlueprintThreadSafe))
static bool RemoveExternalForcesFromComponent(
USkeletalMeshComponent* MeshComp,
UObject* Owner,
UPARAM(ref) FGameplayTagContainer& FilterTags,
bool bFilterExactMatch = false
);

Alpha制御​

SetAlphaToComponent​

コンポーネント内のすべてのKawaiiPhysicsノードにAlpha値を設定します。

UFUNCTION(BlueprintCallable, Category = "Kawaii Physics", meta=(BlueprintThreadSafe))
static bool SetAlphaToComponent(
USkeletalMeshComponent* MeshComp,
float Alpha,
UPARAM(ref) FGameplayTagContainer& FilterTags,
bool bFilterExactMatch = false
);

GetAlphaFromComponent​

コンポーネント内の最初にマッチしたKawaiiPhysicsノードからAlpha値を取得します。

UFUNCTION(BlueprintCallable, Category = "Kawaii Physics", meta=(BlueprintThreadSafe))
static bool GetAlphaFromComponent(
USkeletalMeshComponent* MeshComp,
float& OutAlpha,
UPARAM(ref) FGameplayTagContainer& FilterTags,
bool bFilterExactMatch = false
);

External Force プロパティアクセス​

SetExternalForceBoolProperty / GetExternalForceBoolProperty​

外力のboolプロパティ設定/取得。

UFUNCTION(BlueprintCallable, Category = "Kawaii Physics",
meta=(BlueprintThreadSafe, ExpandEnumAsExecs = "ExecResult"))
static FKawaiiPhysicsReference SetExternalForceBoolProperty(
EKawaiiPhysicsAccessExternalForceResult& ExecResult,
const FKawaiiPhysicsReference& KawaiiPhysics,
int ExternalForceIndex,
FName PropertyName,
bool Value
);

UFUNCTION(BlueprintCallable, Category = "Kawaii Physics",
meta=(BlueprintThreadSafe, ExpandEnumAsExecs = "ExecResult"))
static bool GetExternalForceBoolProperty(
EKawaiiPhysicsAccessExternalForceResult& ExecResult,
const FKawaiiPhysicsReference& KawaiiPhysics,
int ExternalForceIndex,
FName PropertyName
);

他の型のプロパティアクセス​

同様のパターンで以下の型もサポートしています。Set~ は FKawaiiPhysicsReference を返し(チェーン可能)、Get~ は対応する型の値を返します。いずれも ExecResult(EKawaiiPhysicsAccessExternalForceResult)を ExpandEnumAsExecs で出力します。

  • int32: SetExternalForceIntProperty / GetExternalForceIntProperty
  • float: SetExternalForceFloatProperty / GetExternalForceFloatProperty
  • FVector: SetExternalForceVectorProperty / GetExternalForceVectorProperty
  • FRotator: SetExternalForceRotatorProperty / GetExternalForceRotatorProperty
  • FTransform: SetExternalForceTransformProperty / GetExternalForceTransformProperty
  • Wildcard: SetExternalForceWildcardProperty / GetExternalForceWildcardProperty
注記

Wildcard 版は任意の型を扱う CustomThunk 実装で、戻り値は void(値は参照引数で受け渡し)です。他の型付き版とは異なり FKawaiiPhysicsReference を返しません。型が事前に分かっている場合は専用版(Int / Float / Vector など)の使用を推奨します。

Blueprint使用例​

テレポート後のリセット​

Event: On Teleport
→ Get Anim Instance from Mesh
→ Get Linked Anim Graph Instance by Tag
→ Get Anim Node By Tag
→ Convert to Kawaii Physics
→ Call ResetDynamics

外力の適用​

Event: On Impact
→ Create External Force (Instanced Struct)
→ Add External Forces to Component
→ Mesh Comp: Self
→ Owner: Self
→ Filter Tags: "KawaiiPhysics.Hair"

C++使用例​

Linked Anim Graphのタグを HairPhysics に設定します。KawaiiPhysics.Hair をGameplay Tagとして登録し、対象ノードの KawaiiPhysicsTag に割り当ててください。

#include "KawaiiPhysicsLibrary.h"

void AMyCharacter::OnTeleport()
{
UAnimInstance* AnimInstance = GetMesh()->GetAnimInstance();
if (!AnimInstance)
{
return;
}

// Linked Anim GraphのタグはFNameで指定します。
UAnimInstance* LinkedAnimInstance =
AnimInstance->GetLinkedAnimGraphInstanceByTag(FName(TEXT("HairPhysics")));
if (!LinkedAnimInstance)
{
return;
}

// Gameplay TagでKawaiiPhysicsノードを絞り込みます。
const FGameplayTag KawaiiPhysicsTag =
FGameplayTag::RequestGameplayTag(FName(TEXT("KawaiiPhysics.Hair")), false);
if (!KawaiiPhysicsTag.IsValid())
{
return;
}

FGameplayTagContainer FilterTags;
FilterTags.AddTag(KawaiiPhysicsTag);

TArray<FKawaiiPhysicsReference> Nodes;
if (!UKawaiiPhysicsLibrary::CollectKawaiiPhysicsNodes(
Nodes, LinkedAnimInstance, FilterTags, false))
{
return;
}

for (const FKawaiiPhysicsReference& Node : Nodes)
{
UKawaiiPhysicsLibrary::ResetDynamics(Node);
}
}

void AMyCharacter::ApplyImpact(FVector Direction, float Force)
{
// 外力を追加
FGameplayTagContainer FilterTags;
FilterTags.AddTag(FGameplayTag::RequestGameplayTag("KawaiiPhysics.Hair"));

TArray<FInstancedStruct> ExternalForces;
// 外力を設定...

UKawaiiPhysicsLibrary::AddExternalForcesToComponent(
GetMesh(),
ExternalForces,
this,
FilterTags
);
}

関連​