【UE4】【UE5】ユニークな(=重複しない)アセットパス・名を生成してくれるCreateUniqueAssetNameノードについて
はじめに
忘れないようにメモ代わりにざっくりと
EditorUtility機能を使ってアセット生成をしていると、『出力先に既に同名アセットがあったら、重複しないようにアセット名に連番をつけて生成する』的なことをしたくなります。
単純な処理なので自作も可能ですが、AssetToolsのCreate Unique Asset Nameを使うことでかんたんに実現できます。
C++だと
AssetToolsModule.Get().CreateUniqueAssetName
です。
使い方
Content/Test に Hoge というアセットを保存する場合は In Base Package Name に 『Game/Test/Hoge』を渡します。そして、もし既に重複アセットが存在する場合は Out Package Name が 『Game/Test/Hoge0』、Out Asset Nameが『Hoge0』という結果になります。
もしアセット名の末尾に特定の文字列を付けたい場合は In Suffix に その文字列を指定します。例えば『New』を指定すると、重複アセットがない場合は『Game/Test/HogeNew』、ある場合は『Game/Test/HogeNew0』という結果になります。
さいごに
重複アセットがあるとアセット生成に失敗することは多いですし、仮に生成できても意図せず上書きすることになりトラブルの原因になります。そんな時に今回紹介したAssetToolsのCreate Unique Asset Nameはとても便利なので是非使ってみてください~
ちなみに、単純にアセットの重複にならないかのチェックをしたい場合は DoesAssetExistノード(C++だと UEditorAssetLibrary::DoesAssetExist )が便利です。
おしまい
【UE4】【UE5】SequencerのTransform Origin (Actor) が実行・Previewしなくても反映されるようになって感動したという話
はじめに結論から
UE4.26まではLevelSequenceActorが持つTransform Origin (Actor)を反映するには実行・Previewする必要があったのですが…
UE4.27以降(UE5も含む)からはそれが不要になりました!
具体的にはTransform Trackが再生されたら実行の有無を問わずに反映されるようになりました!
いつの間にかSequencerのTransformOrigin(Actor)が実行・Previewしなくても反映されるようになってるー!
— おかず (@pafuhana1213) 2022年6月21日
これで実行せずに調整するために空ActorにAttachするようなことをしなくてもよくなる!嬉しい!!!(遡ったらUE4.27からでした)#UE4 #UE4Study #UE5 #UE5Study pic.twitter.com/FeSN9kZwDm
動画の高解像度版:
bandicam 2022 06 21 12 05 48 975 - YouTube
超便利!!!
以降はTransform Origin (Actor)がどんな機能でどんな時に使うのかを軽く説明
【UE5】「1フレーム後に実行」が少し簡単に実装できるようになった話(Next Tick)
はじめに
記事名の通りですが、UE5から「1フレーム後に実行」を少し簡単に実装できるようになったという話
※ ↓「次フレーム」じゃなかったので記事にしました
今更で恥ずかしいですが、DelayだけでなくSet Timerに対しても『次フレームで実行』が追加されてたのね! #UE5 #UE5Study pic.twitter.com/rEWvjHyyQt
— おかず (@pafuhana1213) 2022年6月5日
まず結果・結論から
https://twitter.com/pafuhana1213/status/1533347622424940544/photo/1 (高解像度版)
[348]LogBlueprintUserMessages: --- START --- [348]LogScript: Warning: Script Msg: ThirdPersonMap_WP_C_43 CustomEvent_1 SetTimer passed a negative or zero time. The associated timer may fail to be created/fire! If using InitialStartDelayVariance, be sure it is smaller than (Time + InitialStartDelay). [348]LogBlueprintUserMessages: [UE4] delay 0 1st [348]LogBlueprintUserMessages: [UE5] Delay Until Next Tick [348]LogBlueprintUserMessages: [UE5] Set Timer for Next Tick by Event [349]LogBlueprintUserMessages: [UE5] Delay Until Next Tick After Using Set Timer [349]LogBlueprintUserMessages: [UE4] delay 0 2nd
- Delay 0 の代わりにDelay Until Next Tickノードを使えるようになったので、0を入力する手間がなくなったよ
- Set Timer でも Set Timer for Next Tick by Eventノードを使うことでDelay 0 的なことができるようになったよ
- 1フレーム後に処理したい場合は複数使う必要がある仕様は変わってないよ
【UE4】PoseAI LiveLinkプラグインとiPhone(iPad)を使ってフィギュアからポーズアセットを作ろう!
はじめに
Twitter経由で知ったiPhoneのカメラを使ってモーキャプできるPoseAI LiveLinkを検証してたら、フィギュアのポーズをUE4に持ってこれました!
(昔やりたかったことができて感動してます!
うわあぁぁぁぁ!!!さっきから検証しているPose AI 、人間っぽいものでも検出するからフィギュアもいけるやん!!!
— おかず (@pafuhana1213) 2022年2月16日
つまり、デッサン人形をiPhoneのカメラに映したら即ポーズをUE4に持っていける!!!これはやばい!!! #UE4 pic.twitter.com/tYrdFprYRy
アクション人形やフィギュアを使ってポーズを作って…iPhoneで撮影するだけでUE4でポーズを作れる!
これはやばい!!!!!
みんなやろう!!!!!!!!!!
公式サイト
Motion Capture | Pose AI
公式ドキュメント
UE4 LiveLink | Pose AI
公式Q&A
FAQ | Pose AI
必要なもの
https://unrealengine.com/marketplace/en-US/product/poseai-livelink
- Pose Cam アプリ ( 年間6 ~ 7ドル )
https://apps.apple.com/app/id1555012109#?platform=iphone
- フィギュア( 人っぽいものならいけそう。ロボは駄目でした )
以降は雑に導入方法と使い方についてのメモ書きみたいなものです。
公式が配布しているサンプルを使いますが、ご自身のプロジェクトに導入したい場合は↑のドキュメントをどうぞ。
ちなみに、このプラグイン・アプリはカメラ一台からのモーキャプ用途がメインなのでご注意ください
【UE4】テキストローカライズのプレビュー言語をBPやC++から制御する方法について
はじめに
エディタ設定のPreview Game LanguageやUMGのツールバーのアイコンから言語を指定することで、テキストのローカライズ結果をエディタ上で確認することができます。
ただON・OFFや言語変更する度にこれらを触りにいくのは面倒です。オレオレデバッグ機能・エディタから変更できるようにしておくと色々便利な気がしたので、BP, C++から制御できる方法を探してみました
Preview Game LanguageをBP, C++から変えるには
void UMyBlueprintFunctionLibrary::SetLocalizationPreviewLanguage(FString InCulture) { FTextLocalizationManager::Get().ConfigureGameLocalizationPreviewLanguage(InCulture); FTextLocalizationManager::Get().EnableGameLocalizationPreview(); } void UMyBlueprintFunctionLibrary::EnableGameLocalizationPreview() { FTextLocalizationManager::Get().EnableGameLocalizationPreview(); } void UMyBlueprintFunctionLibrary::DisableGameLocalizationPreview() { FTextLocalizationManager::Get().DisableGameLocalizationPreview(); } bool UMyBlueprintFunctionLibrary::IsGameLocalizationPreviewEnabled() { return FTextLocalizationManager::Get().IsGameLocalizationPreviewEnabled(); }
参考:SDesignerToolBarの各実装
Engine\Source\Editor\UMGEditor\Private\Designer\SDesignerToolBar.cpp
これらの関数を使うと…
オレオレスクリプトエディタにテキストローカライズ確認用機能が追加された!これがやりたかったんや… #UE4 pic.twitter.com/s6k6xOYkLF
— おかず (@pafuhana1213) 2022年1月20日
いけました。やったー!
ただし、この設定はPreview Game LanguageとかUMGのツールバーと共通なのでご注意を。
おしまい
【UE4】ローカライズ対象の言語がリストになくて困ったときに試すべきこと
はじめに
ローカライズ(多言語)対応を開始したのはいいけど、プロジェクト設定のLocalizations to PackageのShow Localizedが空だったり、
エディタ設定のPreview Game Languageが空だったり、
Asset Localizationの言語候補が1つしか無くて困ってる人向けの記事です
試してほしいこと
LocalizationDashboardで一度Compileしてみてください。たぶん80割ぐらいの確率で解決します。
原因分かりました! 4.25から仕様が変わって、Localization Dashboard にて対象の言語を一度Compileする必要があるようです… #UE4 #UE4Study pic.twitter.com/MS2U9QQUl5
— おかず (@pafuhana1213) 2020年6月26日
Compile後
やったね!
LocalizationDashboardについて
qiita.com
おしまい
【UE4】キャラクターが崖際で浮いてしまう問題を改善する方法について(PerchRadiusThresholdはいいぞ編)
本記事は「Unreal Engine (UE) Advent Calendar 2021 その3」の3日目の記事の代理投稿です。
はじめに
便利なCharacterですが、デフォルト設定ですと上図のように崖際で浮いてしまいます…見え場が非常に悪いですね!
そんな時に便利なのが、Character Movement Component の PerchRadiusThreshold!
デフォルトは0なのですが、この値を上げていくと…
崖際で落ちるようになります!やったね!
少し解説とか補足とか
このPerchRadiusThreshold が 0.15( SWEEP_EDGE_REJECT_DISTANCE )以上の値に設定されていると、崖際で留まるか否かのチェック処理が走るようになります。その計算に関しては PerchRadiusThreshold だけでなく
- 床のチェック処理の結果 (
- Characterの各パラメータ(カプセルの半径、MaxStepHeight、PerchAdditionalHeight)
が使われており…更にエンジンコード上で固定の値が微調整(?)で使われていて少し複雑な感じです。しかも、カプセルの半径とMaxStepHeightに関しては崖際以外の場面での挙動に影響を与えてしまいます。なので、まずは PerchRadiusThreshold の調整のみで解決できるかどうかを模索してみる所から始めるのが良いのかなと思います。
また、もしこの辺りの挙動を変えたい!場合は
- UCharacterMovementComponent::ShouldComputePerchResult 関数
- UCharacterMovementComponent::FindFloor関数 の Sweep floor処理の次
をまず確認することになるはずです。コード自体は比較的シンプルなのでぜひ。
個人的な所見
PerchRadiusThresholdを大きめの値にすることで崖際で浮くことはなくなるのですが…アクション性の高いゲームの場合はユーザのストレスになる場合があるかもしれません。意図しない落下が多発したり、ギリ届くと思ったジャンプが届かなかったり…。
なので、PerchRadiusThresholdの値調整は両足が浮いてしまうような明らかにおかしい挙動の回避に使いつつ、重心が崖側にあるときは専用の崖際モーションをブレンド or AnimGraphやControlRigを使ってプロシージャルアニメーション制御をするのがバランス良いのかなと思います。
(イメージ)
簡単な内容でしたが困ってる人を自分含めて2人知ってるので記事にしてみました!
ご参考になれば幸いです!