Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
UE4初心者がエディタ拡張をやってみた
Search
mao
February 26, 2017
Technology
0
2.1k
UE4初心者がエディタ拡張をやってみた
Unreal Engine Sapporo Meetup! (2/25)
ショートセッション・LT 資料
https://atnd.org/events/85683
mao
February 26, 2017
Tweet
Share
More Decks by mao
See All by mao
たのしいUnsafeUtility
mao_test_h
0
2.2k
VRMSpringBoneをJobSystem&ECSで最適化してみた話
mao_test_h
0
540
ECS初学者に向けてのTips集
mao_test_h
0
370
OculusGoで大量のオブジェクトを動かしてみた
mao_test_h
1
1.2k
UnityWebGL Tips集
mao_test_h
0
1.2k
UE4+Tangoをいじってみた話
mao_test_h
0
500
Other Decks in Technology
See All in Technology
AutomatedLabを使って内部ペンテストを勉強しよう! -やられ社内ネットワークの自動構築-
n_etupirka
1
610
[2024最新版]AWS Control Towerを使ったセキュアなマルチアカウント環境の作り方
hiashisan
0
270
クラウド利用者の「責任」をどう果たす?AWSセキュリティ対策のススメ #AWSSummit
hiashisan
0
280
さらに高品質・高速化を目指すAI時代のテスト設計支援と、めざす先 / AI Test Lab vol.1
shift_evolve
0
190
What is DRE? - Road to SRE NEXT@広島
chanyou0311
3
630
サービス開発を前に進めるために 新米リードエンジニアが 取り組んだこと / Steps Taken by a Novice Lead Engineer to Advance Service Development
nologyance
0
180
20240724_cm_odyssey_hibiyatech
hiashisan
0
110
技術負債による事業の失敗はなぜ起こるのか / Why do business failures due to technical debt occur?
i35_267
0
190
年間一億円削減した時系列データベースのアーキテクチャ改善~不確実性の高いプロジェクトへの挑戦~
lycorptech_jp
PRO
3
2.9k
エンジニアリングマネージャーはどう学んでいくのか #devsumi / How Do Engineering Managers Continue to Learn and Grow?
expajp
4
1.3k
開発と事業を繋ぐ!SREのオブザーバビリティ戦略 ~ Developers Summit 2024 Summer ~
leveragestech
0
630
LINE WORKSへ簡単通知!Incoming Webhookアプリの紹介
mmclsntr
0
110
Featured
See All Featured
Making the Leap to Tech Lead
cromwellryan
127
8.7k
The Power of CSS Pseudo Elements
geoffreycrofte
64
5.2k
Bash Introduction
62gerente
607
210k
Building Flexible Design Systems
yeseniaperezcruz
323
37k
Done Done
chrislema
179
15k
Visualization
eitanlees
139
14k
Practical Orchestrator
shlominoach
185
10k
ParisWeb 2013: Learning to Love: Crash Course in Emotional UX Design
dotmariusz
105
6.8k
How To Stay Up To Date on Web Technology
chriscoyier
784
250k
Faster Mobile Websites
deanohume
303
30k
Build The Right Thing And Hit Your Dates
maggiecrowley
28
2.2k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
277
13k
Transcript
Unreal Engine Sapporo Meetup! (2017/02/25) ショートセッション・LT
どこからきたの?なわばりは? ・mao (@TEST_H_) ・ゲームプログラマーなフレンズ. ・仕事では主にUnityちほー等に生息している. ・UE4は業務関係なしに趣味で楽しんでいる。
注意点 ・LTなので諸々端折ってます。。。 ・内容的に大分プログラマ寄りになります。
その他 質疑応答やご指摘等につきましては後のMeetupタイムで お受けできればと思いますので、お気軽にお声がけ下さい。
目次 1. はじめに 2. BehaviorTreeのTaskに Tick Intervalを設定できるようにしてみた。 3. アウトプットログに サーバルちゃんを表示してみた。
4. UE4上で けものフレンズが見たい。見たい。
はじめに
環境構築について historia社のブログが参考になります。 [UE4] エンジンのソースコード取得とビルド手順のまとめ UE4.6改訂版 http://historia.co.jp/archives/1327 •必要なもの ・GitHubアカウント ・VisualStudio(個人なら無料版であるCommunityでもok) ・UnrealVS
※VisualStudioの拡張機能。 UE4を起動する際にプロジェクト(.uproject)を指定して起動する事が出来る 。 無くても行けなくはないが、確実にあった方が良い。
BehaviorTreeのTaskに Tick Intervalを設定できるようにしてみた。
BehaviorTreeのTaskには Tick Interval(Tickの呼び出し間隔)に 相応する設定が無かったので追加してみた。 ※実装されていないと言う事は、 裏を返せばそもそも使用される想定が無いので 実装されていないだけとも考えられるが...
実装箇所の特定 元からTaskカテゴリーにある ”IgnoreRestartSelf”の文字列で全検索。 →結果”BTTaskNode.h”辺りに変数を発見。
Editor上から値を調整出来る様に 一先ずは処理に必要な変数を追加。 その上でUE4上から値を変更出来る様にしたいので 変数にUPROPERTYを付ける。 →これでEditor上に表示される。 ※ドキュメントに情報が纏まっているので要参照。
後は実装 BTTaskNode.cppに Tick関連の処理があったので改造。 結果、制御出来るようになった。 →右のキャプチャはintervalを [0.016秒][1秒]に設定したTaskを 何個か同時に走らせてログ出力した物。
アウトプットログに サーバルちゃんを表示してみた。
※はめ込み画像ではありません。
エンジンコンテンツにサーバルちゃんを追加 •必要なこと ・エンジンソースのContent以下にサーバルちゃんを追加 “/Engine/Content”が該当するかと思われるので 一先ずは“/Engine/Content/Editor/Slate”以下に追加。 ・SlateStyleクラスの追加 historia社のブログが参考になります。 [UE4] プラグインによるエディタ拡張(4) 自作ツールに画像を利用する http://historia.co.jp/archives/476
※但し、こちらはPlugin想定で書かれているので 画像の参照先をエンジンコンテンツ以下にする必要がある点には注意。
実装箇所の特定 前章と同じくEditor上の固定の文字列で 全検索をかけるという手もあるが、 EditorのUIであれば ウィジェットリフレクタが大変便利
表示が小さくて分かり難いかもしれないが、 下記のキャプチャはアウトプットログにフォーカスを当てたもの。 構造だけでなくソースと行数が表示されるので実装箇所も特定できる。 ※イメージ的にはブラウザの開発ツールのElementsの挙動に近い。
とりあえずはSOutputLog.cppに実装すれば良いことがわかった。 SlateStyleクラスを実装した上でソース中で読み込み、 アウトプットログの右側にボックスを配置して表示。
Slate UI なお、あまり見慣れないであろう下記の書き方は UE4のUIプログラミングフレームワークであるSlateUIの記述。 こちらは公式ドキュメント及びhistoria社のブログが参考になります。 [UE4] プラグインによるエディタ拡張(3) SlateUIを使用してウィンドウを作成する http://historia.co.jp/archives/373
None
UE4上で けものフレンズが見たい。
と言う事で、アウトプットログ上で 動画再生出来る様にしてみたお話。
やったこと ・MediaPlayerEditorの動画再生を行っているUIを特定して Plugin側からエンジンコード側に力技で移植。 ・移植した動画再生エリアをアウトプットログに表示。
None
実装箇所の特定 ウィジェットリフレクタを用いて特定。 結果、”SMediaPlayerEditorViewer.cpp”から 呼び出している”SMediaPlayerEditorOutput”が それっぽかった。 →こちら”SCompoundWidget“と言うのを継承しており、 このままSNewする形で付けられそう。
依存の解決 ・アウトプットログのモジュール依存関係を解決。 OutputLog.Build.csにMediaPlayer関連を追加。 (※精査せずにMedia関連を突っ込んだので多分不要な物も混じっている筈...)
移植 SMediaPlayerEditorOutputはPlugin側で実装されており、 エンジンコード側から参照する方法が現時点では不明だったので、 一先ずはエンジンコード側に 同じ物を実装すると言う力技を用いることに。
MediaPlayerのインスタンス化 再生するにはUMediaPlayerのインスタンスが必要。 →Editor上からの場合はAssetRegistryを用いる事で MediaPlayerのAssetを取得出来そう。 一先ずは必要なAssetのPathを 直打ちする形でMediaPlayerのAssetを取得し、 UMediaPlayerをインスタンス化。 ※右のキャプチャでは普通に呼んでいる が、実際にはAssetの読み込み完了時の コールバック等で読み込んだりと、
ロードの動作を保証する必要がある。
UMediaPlayerのインスタンス化は出来たので さっきのサーバルちゃんの位置に表示してみる。
結果 出来た。 https://twitter.com/TEST_H_/status/833 692908322582528 ※再生動画には けものフレンズでは無く、 サンプル動画を用いております。 (けものフレンズの動画ファイルなんて無かった...)
まとめ ・C++の基礎的な知識は必要になるが、 エンジンコード自体は非常に綺麗に書かれているので 意外と読めた。 ・内部処理を追っていると何が何処にあるのか? と言った情報を目に出来るので、これはこれで勉強に。 →例えばBlueprintに関数を公開している箇所とか見えてくる ※嫌な所がブラックボックスになっていないので 足りない機能や欲しい機能は自力で何とか出来たりするかも。
まとめ ・本格的にやるならエンジンコードをフォークするなりして 独自に管理するなりした方が良いかもしれない。 (寧ろ、ここらの管理方法は自分も知りたい)