Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
UE4初心者がエディタ拡張をやってみた
Search
mao
February 26, 2017
Technology
2.3k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
UE4初心者がエディタ拡張をやってみた
Unreal Engine Sapporo Meetup! (2/25)
ショートセッション・LT 資料
https://atnd.org/events/85683
mao
February 26, 2017
More Decks by mao
See All by mao
たのしいUnsafeUtility
mao_test_h
0
2.8k
VRMSpringBoneをJobSystem&ECSで最適化してみた話
mao_test_h
0
790
ECS初学者に向けてのTips集
mao_test_h
0
480
OculusGoで大量のオブジェクトを動かしてみた
mao_test_h
1
1.3k
UnityWebGL Tips集
mao_test_h
0
1.3k
UE4+Tangoをいじってみた話
mao_test_h
0
610
Other Decks in Technology
See All in Technology
Microsoft Entra Kerberos で実現するクラウド デバイス管理
tamaiyutaro
2
590
バックオフィスに染み出すTypeScript ── clasp で安全に仕組みを作る
nealle
1
180
AIエージェントの監視、思考を見るか行動を見るか / Monitoring AI Agents: Thoughts or Actions
yusukeshimizu
1
160
生き様としてのSRE
hokkai7go
1
170
HQ駆動開発で最高のAI-Contextを作ろう
sansantech
PRO
1
100
ゼロから作るWebアプリの新定番!?Amplify Gen 2 × AWS Blocksで実現する「開発速度とRDBの柔軟性のいいとこ取り」
amixedcolor
1
160
Consistency for mere mortals - A gentle guide to consistency
ufried
0
120
レガシーコードに対する loop engineering的なAI開発プロセス導入について
kubell_hr
0
270
Kiro 入門 (1 つのエージェントを、どの画面からでも) | 目指せ Kiro マスター 01
inariku
PRO
3
790
Don't write the architecture only in the prompt.
neohsu
0
310
増え続けるプロダクトの品質をどう担保するか。ProductSpecとTypeScriptによる取り組み
joere
3
430
AI時代のエンジニアの情報発信〜個人の発信を組織の力に変える〜
ryo_kawamata
1
7.4k
Featured
See All Featured
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
133
20k
Are puppies a ranking factor?
jonoalderson
2
4.1k
Making Projects Easy
brettharned
120
6.8k
How to Think Like a Performance Engineer
csswizardry
28
2.9k
Stop Working from a Prison Cell
hatefulcrawdad
274
21k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.9k
Optimizing for Happiness
mojombo
378
71k
Building Flexible Design Systems
yeseniaperezcruz
330
41k
Between Models and Reality
mayunak
4
560
Odyssey Design
rkendrick25
PRO
2
930
Un-Boring Meetings
codingconduct
0
490
Jamie Indigo - Trashchat’s Guide to Black Boxes: Technical SEO Tactics for LLMs
techseoconnect
PRO
0
740
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に関数を公開している箇所とか見えてくる ※嫌な所がブラックボックスになっていないので 足りない機能や欲しい機能は自力で何とか出来たりするかも。
まとめ ・本格的にやるならエンジンコードをフォークするなりして 独自に管理するなりした方が良いかもしれない。 (寧ろ、ここらの管理方法は自分も知りたい)