GraphViewのノードをプログラムで繋げる
皆さんUnityでグラフ描いていますか?
最近のUnityに追加された機能でGraphViewがあります。
コレ、結構使えそうで、色々紹介記事を見るのですが、ノードを繋げて色々遊べますよーみたいなのでこのノードをマウスで繋げると便利ですよみたいなのが多いと思います。
それはそれで面白いのですが、なんか、デザイナーからボーンのツリー構造を表示したいとか、今あるゲームのデータの状態遷移を表示したい
とか、なんかデータ読み込んでツリー表示させてほしいリクエストが有った時に結構ハマったのでなんか書こうかと思っていたらアドベントカレンダー来たのでちょっと書こうかなと思います。
そんなデカい記事じゃないですが許してください
ちなみに自分の手元ではUnity2021.3.9f1で確認しています。
プログラム的にノードを作成するときには
public class HogeNode : Node
みたいなノードを宣言して
public class FugaGraphView : GraphView
{
public FugaGraphView(EditorWindow editorWindow)
{
var node1 = new HogeNode();
var node2 = new HogeNode();
AddElement(node1);
AddElement(node2);
みたいなこと書いてノードを作成すると思います(変数名は便宜的なもので適宜読み替えてください)
コレでノードがノードエディタで表示されると思うのですが
ノードのinputポート、outputポートを
var inputPort = node1.inputContainer.Q<Port>();
var outputPort = node2.outputContainer.Q<Port>();
で入力出力ポートも出てくるしPortのメソッドにConnectToがあるので、そのままこれ呼べばいーじゃんと思って
outputPort.ConnectTo(inputPort);
とか書けばちゃんと接続されるぞと書いて実行しても全く接続を表示してくれません
Add(outputPort.ConnectTo(inputPort));
と書くと接続されたノードが作成されます。
AddElementでもなく、Addです。AddElementでも文法違反にならないので判りづらいですよね
なんか出ないなーと悩んでしまったので同じ失敗をしない様にここに書き込んでおきます。ついでにアドベントカレンダーのネタにします。