13.8K Views
November 17, 23
スライド概要
やさしいプラグインを作るための C++ Tips UE Tokyo .dev #2 Metaseven
自己紹介 Metaseven(めたせぶん) 𝕏: @suramaru517 ゲームプログラマー1年目 今年の My GOTY は Spider-Man2 2
本日の内容 1. 出品したプラグインの紹介 2. やさしい関数 3. やさしい変数 3
1. 出品したプラグインの紹介 4
Auto Footstep Tool Auto Footstep Tool:コードプラグイン - UE マーケットプレイス キャラクターの足音まわりを 簡単にセットアップできるプラグイン 無料! 5
やさしいところ ● 足が地面に着くフレームを検出して ワンクリックで通知を追加できる ● 四足歩行などの人型以外にも対応 ● 地面の種類による足音の鳴らし分けが データの設定のみで可能 ● 非同期ライントレース・ロードを 使用しているので低負荷 6
2. やさしい関数 7
非同期ライントレース ● UWorld::AsyncLineTraceByChannel 足の接地判定に使用 同期的に結果を得る必要性が低いものは、非同期にした方が低負荷でやさしい 参考:GitHub - seiko-dev/AsyncLineTraceSample Blueprint で使いたい場合は、C++ でノードを作る必要アリ (UBlueprintAsyncActionBase を使うのがオススメ) コード例:AutoFootstepAnimNotify.cpp #L49 8
非同期ロード ● FStreamableManager::RequestAsyncLoad ソフト参照な足音エフェクトをロードするために使用 ロード時にヒッチが発生しなくてやさしい Blueprint では AsyncLoadAsset ノードでおなじみ コード例:AutoFootstepEffectContext.cpp #L32 9
3. やさしい変数 10
ボーンの検索候補が出てくる FName ● UPROPERTY(meta = (AnimNotifyBoneName = true)) AnimNotify の FName の変数限定だが 上記を追加すると値を入力した時に ボーンの検索候補が出てくるようになる やさしい FName ではなく FBoneSocketTarget を使う方法もある 11
値のみ編集可能な TMap ● UPROPERTY(EditFixedSize, meta = (ReadOnlyKeys)) TMap の変数に上記を追加すると、値しか変更できなくなる キーと要素数を固定したい場合に誤操作による変更が防げてやさしい 12
条件によって編集不可・非表示になる変数 変数に以下を追加すると、EditCondition の値が false の時に編集不可になる ● UPROPERTY(meta = (EditCondition = "bAddNotify")) さらに以下も追加すると、編集不可ではなく非表示になる ● UPROPERTY(meta = (EditConditionHides)) 13
よりやさしい変数 UObject::PostEditChangeProperty をオーバーライドすることで いずれかの変数の値が変更された時の 処理を記述できる 例えば右図のように TSet の変数の要素がキーとなるような やさしい TMap の変数を自動的に作れる コード例:AutoFootstepAnimationModifier.cpp #L207 14
まとめ プログラマー以外にも易しくて優しいプラグイン制作を心掛けよう! 15