[Unity] Visual Scripting でつくる2Dアクションゲーム – No,1

10月 13, 2023 | ALL, Unity, ビジュアルスクリプティング

Visual Scripting (ビジュアルスクリプティング)とはなんだろう?

Unity Visual Scripting(ビジュアルスクリプティング)とは、Unityのゲーム開発で使えるプログラミング方法の一つで、いわいるビジュアルプログラミングができるツールです。Unreal Engine のBlueprintと同じような機能があります。

Unity Visual Scriptingでは、上記のようなノードと呼ばれる四角い機能を表したものをつなぐ事によってプログラムを作成していきます。簡単なゲームならVisual Scriptingだけで作成できてしまう優れものです。
テキストによるプログラミングと違いのプログラムの流れが視覚的にわかりやすいのは、長く従来のプログラミングをしてきた技術者には少し感動ものかもしれません。
Unity Visual Scripting は Unity 2021以降ではBoltというアセットとして販売されていました。Unity2021以降から標準アセットとしてプリインストールされています。

TileMap でフィールドマップを作成する

まず初めにフィールドを作っていきます。Unityのタイルマップ(Tilemap)機能を使って、作ります。

環境

・Intel Mac
・Unity 2022.3.2f1

今回、以下のFREEでForg Man様が販売されているAssetsを使っています。

Unity Assets store link Pixel Adventure1

それでは、キャラクターを作っていきます。

キャラクターを作成する

ビジュアルスクリプティングでキャラクターにプログラミングする

プレイヤーのビジュアルスクリプト

ステートグラフ(State Graph)を使う

ステイトグラフを使ってキャラクターのプログラミングをしていきましょう。ステイトとは、状態の事を言います。ステイトグラフを使うと、状態変化基準でプログラムをしていくことができます。まずステートグラフを作り、呼び出すスクリプトグラフを決めていきましょう。

【ステートグラフを作りましょう】

プレイヤーのビジュアルスクリプト

ステートグラフの中にスクリプトグラフを入れる(Idle)

まず、キャラクターのアイドル状態でのプログラムをつくります。
下のIdleステイトのTransition State をダブルクリックします。

プレイヤーのビジュアルスクリプト

開いたスクリプトエディタに以下のプログラムをいれます。
遷移タイミングは以下の2つの条件です。
1.左右のキー入力がなくなったとき
2.ジャンプが終わり設置した場合(簡易的なため開発過程次第では改良が必要)

プレイヤーのビジュアルスクリプト

次にIdelステイトのプログラムを入れていきます。Idleステイトをダブルクリックしてください。

プレイヤーのビジュアルスクリプト
プレイヤーのビジュアルスクリプト

Runステートの追加

まず、キャラクターのラン(走る)状態のプログラムをつくります。
下のRunステイトのTransition State をダブルクリックします。

プレイヤーのビジュアルスクリプト

開いたスクリプトエディタに以下のプログラムをいれます。

プレイヤーのビジュアルスクリプト

次にRunステイトのプログラムを入れていきます。Runステイトをダブルクリックしてください。

プレイヤーのビジュアルスクリプト

開いたスクリプトグラフに下4つのプログラムをすべて入れます。

プレイヤーのビジュアルスクリプト
プレイヤーのビジュアルスクリプト
プレイヤーのビジュアルスクリプト
プレイヤーのビジュアルスクリプト

Jumpステートの追加

まず、キャラクターのジャンプ状態のプログラムをつくります。
下のJumpステイトのTransition State をダブルクリックします。

プレイヤーのビジュアルスクリプト

開いたスクリプトエディタに以下のプログラムをいれます。

プレイヤーのビジュアルスクリプト

次にJumpステイトのプログラムを入れていきます。Jumpステイトをダブルクリックしてください。

プレイヤーのビジュアルスクリプト
プレイヤーのビジュアルスクリプト
プレイヤーのビジュアルスクリプト

キャラクターが壁に引っかかるのを直す

キャラクターがジャンプした際に、進むボタンを押している間ずっと壁に引っかかることがあると思います。これは、キャラクターに摩擦がデフォルト設定されているからです。Physics Material 2Dを作り、摩擦係数(Friction)を0にしてColiderに設定しましょう。