Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Experimentalでも使いたい!GraphView実践導入Tips

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
Avatar for th1209 th1209
April 05, 2025
540

 Experimentalでも使いたい!GraphView実践導入Tips

Unity エディタ拡張完全に理解した 勉強会 LTスライドです。
フォローアップ用の記事とサンプルをまとめたリポジトリは以下になります。

Experimentalでも使いたい! Unity GraphViewを実践で導入するための解説記事
https://qiita.com/th1209/items/f27ee8da7783adce3552

unity-graph-view-samples
https://github.com/th1209/unity-graph-view-samples/tree/main

Avatar for th1209

th1209

April 05, 2025
Tweet

Transcript

  1. GraphViewが持つ主要なコールバック nodeCreationRequest ・コンテキストメニューで”Create Node”が呼ばれた際に実行される。 ・Nodeのindex情報や右クリックした際の座標情報が取れるので、ここでNodeを生成する。 graphViewChanged ・GraphViewの要素に変更が入った時に実行される。 ・引数のGraphViewChangeで、GUI操作に応じたの値が取れるのでそれを見て色々やる。  ・Edgeの作成  ・GraphElement(NodeやEdge)の削除

     ・GraphElement(NodeやEdge)の移動 serializeGraphElements canPasteSerializedData unserializeAndPaste ・上記3種はNodeやEdgeのコピー&ペースト対応用のコールバック群。 ・serializeGraphElementsで選択された要素を文字列形式にシリアライズ。 ・canPasteSerializedDataでコピー&ペースト可能か判定。  trueならunserializeAndPasteが呼ばれ、ここに実際のペースト処理を実装する。
  2. 実装上の考慮ポイント② 対応するデータ構造との対応関係を決める ・前述した注意点を踏まえると、最初の設計段階で、データ構造側とGraphView側でどう同期を取るのか決めた方が良い。 ・概ね、以下のようなタイミングで同期を取ることになる。 ・データ構造側からGraphViewを開く時(リロードや読み込むファイルの切り替え時も考慮) ・NodeやEdgeの追加/削除/座標変更時 ・Nodeのプロパティに変更があった際 ・GraphViewを閉じた際、UnityEditorを落とした際 ・Redo/Undo時 ・Copy&Paste時

    ・データ構造側をインスペクタ等で編集した時 ・データ構造側で、View表示するための情報をどう保持しておくかも考慮が必要。 ・ex) Nodeの座標情報はどうするか? → データ構造側でも保持しておきつつ、インスペクタ拡張などで存在を隠蔽できると丁寧。 ・ex) Edgeの情報をどう扱うか? → ランタイム側の都合がいいように。  ・ex) Nodeを一意に識別するidと、その払い出しはどうするか?
  3. 参考にさせて頂いた資料 【Unity】GraphViewで遊んでみた。 https://hirukotime.hatenablog.jp/entry/2022/11/11/201335 https://hirukotime.hatenablog.jp/entry/2022/11/13/001311 https://hirukotime.hatenablog.jp/entry/2022/11/17/200000 ・初回のキャッチアップはこちらの連載記事を参照させていただきました ! 今PCが手元にないなら絶対に見ないで下さい。記事が優良すぎて、ほぼ 100%その場でGraphViewしてしまいます https://qiita.com/dwl/items/dd14f5f2a187084d317b

    ・こちらも入門記事として良さそうです。以下のようなケースの参考にさせて頂きました。  ・「Nodeのフィールドで日本語入力したいケース」「 Nodeに応じたファクトリクラスを毎度生成せず、リフレクションで生成する例」 【Unity】GraphViewの構造解説 https://qiita.com/KEN_GameProject/items/b835cd12ed4bf001086b ・NodeのContainerの構造についてはこちらの記事が分かりやすかったです ! GraphView のすゝめ https://learning.unity3d.jp/7654/ ・主催者のもんりぃ先生が既に解説講演をしてくれていました。こちらも大変わかりやすいです ...! Unity Discussion Undo Redo in GraphView https://discussions.unity.com/t/undo-redo-in-graph-view/247636 Unity Discussion Best way of Implementing copy and pasting o nodes in graph view? https://discussions.unity.com/t/best-way-of-implementing-copy-and-pasting-of-nodes-in-graph-view/791881
  4. 参考にさせて頂いた資料 (UIToolkit関連) Unityの最新UIシステム「UI Toolkit」でランタイムUIを作成する方法まとめ https://qiita.com/uminohiyoko/items/73d366ec35154d301baa ・UIToolkitの初回キャッチアップはこちらの記事にお世話になりました。 UI Toolkit を学ぶ https://note.com/papacoder/n/n50d808b5e41d#8e4d5507-8697-4b98-94ce-e7dc2d9033c2

    ・UIToolkitを学ぶ上での参考資料集がまとめられており、ガッツリ勉強したい方に良さそうです。 ・この記事内で紹介されているいくつかの動画を参考にさせていただきました。 UnityDocumentation USSセレクター https://docs.unity3d.com/ja/2022.3/Manual/UIE-USS-Selectors.html ・公式。UnityStyleSheetの仕様についてはこちらを (CSSと大体似た仕様です )。 【Unity】UI Toolkitにおけるイベント伝播の仕組みとハンドリング方法 https://light11.hatenadiary.com/entry/2023/04/27/192204 ・UIToolkitのイベント伝播の仕様について。 ・今回困ることはありませんでしたが、注意すべき仕様なので抑えておきたいです。