「玉転がし」でUnity Boltを学習する(1/3)

「玉転がし」チュートリアルについて

Posted by 51n1 on 25 Sep, 2020

もくじ

はじめに

本ブログ記事は3部構成となり、本ページは「玉転がし」チュートリアルについて言及している。また、次ページがUnity Hubによるプロジェクト作成の手順で、最後にBoltのインストール手順を記載している。

少し基本的なことばかりを書いてしまった気がするが、今回取り上げている「玉転がし」チュートリアルで作成したゲームを色々とカスタマイズしてみたので、次回の記事ではそれらを紹介しようと考えている。

日本語版「玉転がし」チュートリアルについて

Unity公式サイトのUnity LearnではRoll-a-Ballの日本語版でかつBoltを使ったビジュアルスクリプティング版のチュートリアルが公開されている。Unity Learnのコンテンツで日本語に翻訳されているチュートリアルというのは数が少ないのだが、このチュートリアルは日本語に翻訳されているだけではなく、日本語版だけのオリジナルのコンテンツが含まれており、Unity Learnのチュートリアルの中でも面白い内容になっていると思う。

Unity入門チュートリアル 「玉転がし」(Roll-a-Ball) ビジュアルスクリプティング版

英語版「Roll-a-Ball」チュートリアルについて

元祖Roll-a-ballの英語版チュートリアルを元に作成したプロジェクトのシーン画面

元々、Roll-a-Ballという入門向けのチュートリアルが英語で公開されていた。現在は全く新しく別のチュートリアルとして更新されており、この元祖Roll-a-Ballチュートリアルは旧チュートリアルとしてアーカイブ扱いとなっている。ちなみに新チュートリアルの方は新しいInput System等を取り入れたチュートリアルになっているようなので、別の機会に見てみようと思う。

Roll-a-ball (Deprecated):旧チュートリアル

Roll-a-ball (New):新チュートリアル

「玉転がし」チュートリアルをUnity 2020バージョンで学習する

日本語版の「玉転がし」チュートリアルは、Unity 5ぐらいの古いバージョンを使ったチュートリアルとなっているので、最新の安定リリース版であるUnity 2020.1で学習してみると、チュートリアルとは違う箇所がいくつかある。

異なる部分というのはチュートリアル項番で言うと、「1. プロジェクトを作成する」と「5.Bolt のインストール」にあたる。そこで、本記事では、Unity 2020.1でプロジェクトを作成し、Boltをセットアップする手順をまとめてみた。Boltのセットアップ完了以降は、日本語版 「玉転がし」チュートリアルの「6.地面の作成」から学習をスムーズに進められると思う。

次ページ以降にUnity 2020.1でのプロジェクト作成とBoltセットアップ手順を記載しているが、もし公式のチュートリアルがアップデートされたら、そちらを参照して頂ければと思う。

日本語版「玉転がし」チュートリアルが古いUnityバージョンを使用したものとはいえUnity 2020.1における手順が異なるのは、実質、プロジェクト作成とBoltのインストールのところだけである。Boltの操作やノードの設定等の大半はUnityのバージョンが違ってもほとんど変わらないので、あまり気にせずチュートリアルを進めても問題ないだろう。

ビジュアルスクリプティングとUnity C#スクリプティングについて

両者の共通点としては、Unityのゲームオブジェクトのコンポーネントとしてアタッチされるということぐらいだろうか。通常、C#スクリプトはスクリプトファイル(.cs)を実体としてスクリプト内のコードが更新されるとUnity Editorは再コンパイルを実行する。

あくまでも推測だがBoltにおいて各種処理を実行するために作成したノードグラフは、実際には何らかの形でC#スクリプトに変換されて実行されるのだろう。C#スクリプトのコンポーネントにあたるのが、Flow MachineもしくはState Machineというコンポーネントであり、それらがゲームオブジェクトに追加されると同時に自動でVariablesというオブジェクト変数用のコンポーネントも追加される。Boltのグラフ情報というのはそのコンポーネント内部に直接含めるか、Macroファイルとして外部に保持することもできる。

C#スクリプトの簡単な例として英語版「Roll-a-Ball」ゲームのPlayerオブジェクトにアタッチされているスクリプトPlayerController.csのコード抜粋を示す。

using UnityEngine;
using System.Collections;

public class PlayerController : MonoBehaviour {

  public float speed;

  void FixedUpdate ()
  {
    float moveHorizontal = Input.GetAxis ("Horizontal");
    float moveVertical = Input.GetAxis ("Vertical");

    Vector3 movement = new Vector3 (moveHorizontal, 0.0f, moveVertical);

    GetComponent<Rigidbody>().AddForce (movement * speed);
  }

}

次に上記のC#のコードと同等の処理をBoltで実装する場合の例を示す。日本語版「玉転がし」ゲームのPlayerオブジェクトに追加するFlowグラフである。

BoltのFlow Graphウィンドウ

PlayerオブジェクトにBoltのFlow Machineコンポーネントをアタッチし、MacroとしてPlayerControllerを割り当てた。

これはとても単純な例だが、上記UnityのC#スクリプトのコードとBoltのFlow Graphを比較するとほぼ同様の処理をしていることがわかる。ビジュアルスクリプティングといっても基本的にはC#スクリプトと同じことをするのである。思考の方法、論理的な考え方は同じである。

C#スクリプトで定義されているそれぞれの処理、例えばFixed Update、AddForce、Input.GetAxisなどを、Boltで相当するノードとして配置させて、意図するプロセスに沿うよう各ノードを接続させグラフを作成する。ちなみに変数Speedの定義については、以下のようになる。

C#のコードでは下記の通り。
public float speed;
この変数speedはpublicなのでUnity EditorのInspectorに表示され、Unity Editorから変数の値を変更することができる。

C#スクリプトのInspector

BoltのInspector

BoltではVariablesコンポーネントで定義する。BoltのFlow MachineコンポーネントもしくはState Machineコンポーネントを追加すると自動でオブジェクト変数用のインタフェースが追加されるので、新規変数名を作成すればよい。

Roll-a-Ballの旧チュートリアルで一度、C#スクリプトの基本を学習し、日本語版の「玉転がし」ゲームのチュートリアルを進めて、Boltのビジュアルスクリプティングを使いどのようにプログラム処理を組み込むのかを知るというのがとても最適な学習パスだと言える。ここで紹介した「Roll-a-Ball」や「玉転がし」ゲームは簡単なものだが、Unityを最初に学習するのに最適なチュートリアルだと思う。

次ページはUnity Hubによるプロジェクト作成手順となる。