2.3K Views
October 05, 24
スライド概要
ゲームプログラマー┃C#┃C++┃Unity┃Unreal Engine┃Google Apps Script┃Git
エンジンのソースコードを読み解いて オリジナルノードを作成する方法 橋本翼 (ツバサムス) @tsubasamusu
自己紹介 高校時代にオンラインプログラミングスク ールで Unity を勉強 高校卒業後に地方のスタートアップ企業に 就職し、Unreal Engine 5 を用いて Android と iOS 向けのモバイルゲームを開 発 休日も趣味でゲームを制作し、そこで学ん だ事を技術ブログにまとめている しろくまバーが好き(九州との繋がり) ツバサムスBlog
例として使用するノード 任意のアセット(OldAsset)の参照を別の 任意のアセット(NewAsset)に置換する というノードで Editor Utility で使用でき る。 デフォルトではこのようなノードを探して も見つけられず、ChatGPT に聞いても分 からなかった。 (調べ方が悪かっただけで本当は用意され ているのかもしれない…)
エディタでの該当箇所を探す 他のアセットに参照されているアセッ トを削除しようとした際に表示される ダイアログの左下の「Replace References」ボタンが、今回作成し たいノードの機能を実現している。 ソースコードでの検索用にダイアログ のテキストをコピーしておく。 (ボタンにマウスホバーした際に表示 される説明文でも OK!)
キーワードを検索(Visual Studio の場合) プロジェクトの .sln ファイルを開き、 「Edit > Find and Replace > Find in Files」に先程コピ ーしたテキストを貼り付けてエンジンのソース コード内で検索する。 (自分が知らないだけで、ソースコード内の該 当箇所に飛ぶ良い方法が他にもあると思うので ご存じの方は「#UE九州」でポストして教えて 下さい!)
検索に引っ掛かったコードを解読 今回は「SDeleteAssetsDialog::ReplaceReferences()」に飛んだ。 if 文の中に「DeleteModel->DoReplaceReferences( ConsolidationAsset );」という使えそうな関数がある!
クラスや関数の使い方を確認 FAssetDeleteModel クラスのコンストラクタ FAssetDeleteModel クラスの DoReplaceReferences() FAssetData 構造体のコンストラクタ
関数(ノード)を宣言 「Tools > New C++ Class...」から今回は UEditorUtilityLibrary クラス を継承したクラスを作成してヘッダーファイルに関数を宣言。 ブループリントエディタでのノードのカテゴリー、入力ピン(引数) 等を設定。
関数(ノード)の中身を定義 受け取った引数が有効か確認 先程確認したクラスや 構造体をインスタンス 化 参照を置換
ブループリントエディタでノードを使用 今回は Editor Utility Blueprint で使用。 関数の宣言時に検索キーワードを設定する事 も出来る。 関数の宣言時に設定したカテゴリーはここで 使われる。
デバッグ
最後に ブループリントでも大抵の処理は実装 できますが、C++ も読み書き出来るよ うになると実装できる機能の幅や出来 る事が広がります! 是非、これを機に C++ を習得して良い C++ ライフを送りましょう! (X でも日々発信しているのでチラッ と覗いていただけると嬉しいです!) @tsubasamusu