LoginSignup
0

GraphViewのノードをプログラムで繋げる

Last updated at Posted at 2022-12-17

GraphViewのノードをプログラムで繋げる

皆さんUnityでグラフ描いていますか?
最近のUnityに追加された機能でGraphViewがあります。
コレ、結構使えそうで、色々紹介記事を見るのですが、ノードを繋げて色々遊べますよーみたいなのでこのノードをマウスで繋げると便利ですよみたいなのが多いと思います。
それはそれで面白いのですが、なんか、デザイナーからボーンのツリー構造を表示したいとか、今あるゲームのデータの状態遷移を表示したい
とか、なんかデータ読み込んでツリー表示させてほしいリクエストが有った時に結構ハマったのでなんか書こうかと思っていたらアドベントカレンダー来たのでちょっと書こうかなと思います。
そんなデカい記事じゃないですが許してください
ちなみに自分の手元ではUnity2021.3.9f1で確認しています。

プログラム的にノードを作成するときには

HogeNode.cs
    public class HogeNode : Node

みたいなノードを宣言して

FugaGraphView.cs
	public class FugaGraphView : GraphView
	{
	    public FugaGraphView(EditorWindow editorWindow)
	    {

			var node1 = new HogeNode();
			var node2 = new HogeNode();

	        AddElement(node1);
	        AddElement(node2);

みたいなこと書いてノードを作成すると思います(変数名は便宜的なもので適宜読み替えてください)
コレでノードがノードエディタで表示されると思うのですが
ノードのinputポート、outputポートを

FugaGraphView.cs
        var inputPort = node1.inputContainer.Q<Port>();
        var outputPort = node2.outputContainer.Q<Port>();

で入力出力ポートも出てくるしPortのメソッドにConnectToがあるので、そのままこれ呼べばいーじゃんと思って

FugaGraphView.cs
       outputPort.ConnectTo(inputPort);

とか書けばちゃんと接続されるぞと書いて実行しても全く接続を表示してくれません

FugaGraphView.cs
       Add(outputPort.ConnectTo(inputPort));

と書くと接続されたノードが作成されます。
AddElementでもなく、Addです。AddElementでも文法違反にならないので判りづらいですよね
なんか出ないなーと悩んでしまったので同じ失敗をしない様にここに書き込んでおきます。ついでにアドベントカレンダーのネタにします。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0