LoginSignup
3
2

More than 1 year has passed since last update.

VisualScriptingでゲーム作ったのでまとめと所感

Posted at

前置き

ノードでのプログラムアセットとしては依然からBoltが有名でした

Unity2021からVisualScriptingとして正式に取り込まれています

VisualScriptingを触って簡単なゲームを作ったので使い方をメモしておきます

ボクシングゲームのスクショ.png

基礎概念

ScriptGraph

ノードスクリプト
GameObjectにScriptMachineをAddComponentしてNewを押してScriptGraphを追加、もしくはProjectで追加したScriptGraphをGraphに設定することで実行される
デフォルトではなにもないのでEventノードを手動で追加して処理を作る

VS_ScriptGraph_debuglog.png

Eventノードには同じみのOnStartやOnUpdateもある
ノード自体はUnityのC#コードでお馴染みの関数が用意されているので慣れれば難しくはない

めんどくさいけど

StateGraph

ScriptGraph用のステートマシン
GameObjectにStateMachineをAddComponentしてNewを押してStateGraphを追加、もしくはProject Viewで追加したStateGraphをGraphに設定する

状態遷移を管理することができるステート
ステートの中身はFlowGraphみたいに使える
StateMachineを知らない人はAnimatorみたいなものと考えてOK

キャラアニメーションのStateGraph

VS-StateGraph-boxer.png

Idleステートから始まり、左のObject Variableの値が変わることで別のStateに移動する

Idleステートの中身

VS-ScriptGraph-boxer.png

ScriptGraphの中には「OnEnterState」「OnUpdate」「OnExitState」の3種のEventノードがデフォルトで設定されている
Stateに入ってきたらOn Enter Stateイベントが発火してTimerノードにイベントが流れる

こだわった使い方をしたい

C#コードで自作ノードを使う

namespaceに入れなければ自動コンパイルしてScriptGraphで呼び出せる
namespaceに入ってる場合はProject Settings > Visual ScriptingのNode Libraryにnamespaceを追加したらScriptGraphから呼び出せる

自作ノードをプログラマーが作って、デザイナーがVisualScriptする未来が見える

State移動どうやるの?

Variableを追加してTransitionでVariableをUpdateでチェックしてState移動した
プログラマーとしては気持ち悪い

EnumをScriptGraphで使えるようにしたい

Enumを定義して、Project Settings > Visual ScriptingのType Optionsに追加する
StateごとにEnumを割り振る場合、C#を介さずに増やしたいのでVisualScriptingだけで追加できるようにしてほしい

C#からVariableの値を変更

Variable.declarations のkeyを検索してvalueを上書きすると反映される

[SerializeField] Variables variables;
void SetVariable(string key, object value)
{
    foreach (var v in variables.declarations)
        if (v.name == key)
            v.value = value;
}

所感

メリット

・ノードのフローがビジュアルで見える。StateMachineも見やすい。このStateMachineは普通にC#コードでも使えるようになってほしい
・エラーが起きると該当ノードが赤色になる
・ノードスクリプティングではビルド時間なしに起動確認できる。しかもPlay中に数値変更する
と反映される
・コードの感覚でスクリプティングできる。コードでできることは大体できる
・ロジックのAB化ができる。バイナリ更新せずに挙動が変えられる!

デメリット

・なんでもできてしまう。非エンジニアには機能制限して渡したい
・リファクタがしにくい。参照探しやリネームができない。綺麗な設計にするにはかなり気を遣う。

改善してほしい点

・UnrealEngineみたいなブレークポイント
 ・非プログラマーがデバッグするのにはまだ難しい。ブレークポイントを正式対応してほしい。
・Enumの追加を気軽にしたい
 ・StateMachineでStateを移動するのにVariableを使うしかないが、StateごとにVariableが増えるのでInspectorが汚れる
 ・EnumでStateを一括管理してInspectorのVariableを短くしたい
・VariableにGraphとObjectがあるが、StateMachine内のみ共有する変数が欲しい
 ・StateMachine内でしか使わない変数が多い

BoltとVisualScriptingの違い

・大きな変更点はない
・BoltのSetupWizardがなくなった
・BoltではメニューバーからType OptionsやNode Libraryを指定していたが、VisualScriptingではProjectSettingsに移動した
・PrefarenceにもVisualScriptingの項目があり、見た目の設定を変えることができる
・Graphで最大ズームしなくてもコメントの端を掴んで拡張できる
・GraphのズームがスクロールじゃなくてCtrl-スクロールになった。正直使いにくい。

考察

UnrealEngineのブループリントほどではないですが使えるように整備されています
ですがやはりゲーム全体をVisualScriptingで作るのはメンテナンスコストが高いため現実的ではないと思います

しかしグラフィカルにデバッグできる点、アセットとしてDLできる点などから
レベルデザイナーに部分的に実装してもらうのがよさそうです

将来的にもっとデバッグ能力やメンテナンス能力が向上すれば
プログラマーはノード追加に徹して、ゲームの大部分を非プログラマーが作成するのも可能ではないでしょうか

3
2
0

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
3
2