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.2k
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.5k
VRMSpringBoneをJobSystem&ECSで最適化してみた話
mao_test_h
0
680
ECS初学者に向けてのTips集
mao_test_h
0
410
OculusGoで大量のオブジェクトを動かしてみた
mao_test_h
1
1.3k
UnityWebGL Tips集
mao_test_h
0
1.2k
UE4+Tangoをいじってみた話
mao_test_h
0
550
Other Decks in Technology
See All in Technology
TypeScript をより型安全に扱うプラクティス #TSKaigi #TSKaigi2025_kataritai
bengo4com
0
2.1k
Test Smarter, Not Harder: Achieving Confidence in Complex Distributed Systems
eliasnogueira
1
120
Amazon DevOps Guru のベースラインを整備して1ヶ月ほど運用してみた #jawsug_asa / Amazon DevOps Guru trial
masahirokawahara
3
210
Oracle Cloud Infrastructure IaaS 新機能アップデート 2025/03 - 2025/05
oracle4engineer
PRO
1
130
Applied NLP in the Age of Generative AI: Future-Proof Strategies for Banking and Finance
inesmontani
PRO
0
200
研究開発部メンバーの働き⽅ / Sansan R&D Profile
sansan33
PRO
3
17k
OpenJDKエコシステムと開発中の機能を紹介 2025夏版
chiroito
1
1.1k
CloudBruteによる外部からのS3バケットの探索・公開の発見について / 20250605 Kumiko Henmi
shift_evolve
3
340
Data Observability:企業資料管理技術的未來顯學
cheng_wei_chen
0
320
実践Kafka Streams 〜イベント駆動型アーキテクチャを添えて〜
joker1007
3
820
AWS Lambdaでサーバレス設計を学ぼう_ベンダーロックインの懸念を超えて-サーバレスの真価を探る
fukuchiiinu
4
930
Contract One Engineering Unit 紹介資料
sansan33
PRO
0
6.2k
Featured
See All Featured
Adopting Sorbet at Scale
ufuk
76
9.4k
Building a Modern Day E-commerce SEO Strategy
aleyda
41
7.3k
Code Review Best Practice
trishagee
68
18k
Building Applications with DynamoDB
mza
95
6.4k
Building a Scalable Design System with Sketch
lauravandoore
462
33k
A Modern Web Designer's Workflow
chriscoyier
693
190k
Music & Morning Musume
bryan
47
6.6k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
130
19k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
280
13k
Automating Front-end Workflow
addyosmani
1370
200k
The Cost Of JavaScript in 2023
addyosmani
49
8.3k
[RailsConf 2023] Rails as a piece of cake
palkan
55
5.6k
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に関数を公開している箇所とか見えてくる ※嫌な所がブラックボックスになっていないので 足りない機能や欲しい機能は自力で何とか出来たりするかも。
まとめ ・本格的にやるならエンジンコードをフォークするなりして 独自に管理するなりした方が良いかもしれない。 (寧ろ、ここらの管理方法は自分も知りたい)