猫でもわかるUnity入門(第12回 玉転がし作成 その4)

f:id:enia:20210228230354p:plain

はじめに

えにあです。 前回はプレイヤー(球体)の動きにカメラが付いてくるようになりました。 前回の状態では、地面らしきものは表示されていますが、色の塗られた範囲を超えてボールが転がって行ってしまいますね。 今回はプレイフィールドを壁で覆い、プレイヤーがフィールドの外に出ていけないようにします。

目次

Wallオブジェクトの作成

まず、空のオブジェクトを一つ追加します。 トップメニューから「ゲームオブジェクト」->「空のオブジェクトを作成」を選択します。
f:id:enia:20210301182337p:plain

このオブジェクトの名前をWallに変更しましょう。 オブジェクトの名前はインスペクターで設定できます。
f:id:enia:20210301182452p:plain

Unityでは、空のオブジェクトはゲームオブジェクトのフォルダとして利用することができます。 この後の手順で、Wallオブジェクトの下に東西南北4つの壁オブジェクトを作成していきますが、その前にWallオブジェクトをリセットします。

Wallオブジェクトを選択し、インスペクターのTransfomrの右側にある「︙」をクリックし、リセットを押します。これにより、Wallオブジェクトの位置が原点(0, 0, 0)になります。
f:id:enia:20210301182948p:plain

この手順は重要です。子オブジェクトを持つオブジェクトは原点に位置する必要があります。

さあ、Wallオブジェクトの下に、実際の壁を追加していきます。 ヒエラルキービューでWallオブジェクトを右クリックし、「3Dオブジェクト」->「キューブ」を選択します。
f:id:enia:20210301183058p:plain

このオブジェクトの名前を「West Wall」に変更しましょう。 West WallがWallの内側に入ったのが分かりますね。
f:id:enia:20210301220634p:plain

シーンビューを見ると、ボールに重なって立方体が重なっているのが分かります。
f:id:enia:20210301221016p:plain

立方体のサイズを変更し、位置を変えることで西側の壁として配置していきます。 その前に、地面のサイズをそろえましょう。

Groundオブジェクトを選択し、インスペクターで拡大/縮小(Scale)を(2, 1, 2)に設定します。
f:id:enia:20210301221316p:plain

この地面のサイズにWest Wallのサイズも合わせていきます。 West Wallを選択し、インスペクターで拡大/縮小(Scale)の値を(0.5, 2, 20.5)に設定します。
f:id:enia:20210301221508p:plain

シーンビューを見ると、なんとなくいい感じのサイズに見えますね。
f:id:enia:20210301221728p:plain

それでは、位置を変えて西側に配置しましょう。 西側なのでX軸の値はマイナスになりますね。-10に設定してみましょう。
f:id:enia:20210301222052p:plain

シーンビューを見てみましょう。西側に壁が配置されました!
f:id:enia:20210301222126p:plain

四方を壁で囲もう

同様に、東、北、南の壁を作っていきます。 ヒエラルキービューでWest Wallを選択し、コピー(ctrl + c) & ペースト(ctrl + v)しましょう。 West Wallがコピーされたのが分かります。
f:id:enia:20210301222333p:plain

同様の手順でもう2つWest Wallをコピーし、それぞれ、East Wall、North Wall、South Wallに名前を変えましょう。
f:id:enia:20210301222658p:plain

East Wallを選択しインスペクターを見てみましょう。 拡大/縮小(scale)にWest Wallで設定した値がすでに入っていますね。 オブジェクトをコピーすると、このように値が引き継がれます。
f:id:enia:20210301222832p:plain

サイズは同じでよいですが、位置は東側に変更する必要があります。 X軸の値を+10に変更すればよいですね。
f:id:enia:20210301223023p:plain

これで西と東が壁で覆われました。
f:id:enia:20210301223401p:plain

北側も同様に設定していきます。 北側は位置をどのように設定すればよいでしょうか。試しに(0, 0, 10)にしてみます。
f:id:enia:20210301223618p:plain

すると、位置は悪くなさそうですが、壁の方向がおかしいですね。
f:id:enia:20210301223705p:plain

これを修正するために、拡大/縮小(scale)のXとXの値を入れ替えて、(20.5, 2, 0.5)に変更しましょう。
f:id:enia:20210301223816p:plain

シーンビューを見ると、北側にも壁が設置されたのがわかります。
f:id:enia:20210301223834p:plain

では最後に南側の壁も設定しましょう。 位置は(0, 0, -10)、拡大/縮小は(20.5, 2, 0.5)に設定すればよいですね。
f:id:enia:20210301224012p:plain

これで四方が壁に囲まれました。
f:id:enia:20210301224106p:plain

実際に動かしてみよう

プレイモードにして実際に動かしてみましょう。 ボールが壁の外には出ていけないようになっていますね!
f:id:enia:20210301224243p:plain

今回はここまで!

猫でもわかるUnity入門(第11回 玉転がし作成 その3)

f:id:enia:20210228230354p:plain

えにあです。 前回はキーボード入力でプレイヤーオブジェクト(球体)を移動できるようにしました。 今回はよりゲームらしくしていきます。

目次

ボールのスピードを変更しよう

前回まででボールを移動できるようになったものの、ボールのスピードが遅く感じますね。 そこで、ボールのスピードを速くするようにコードを修正していきましょう。

まず、PlayerControllerにspeedというpublicフィールドを追加します。 コードは以下のようになります。

public class PlayerController : MonoBehaviour
{
    public float speed;
    private Rigidbody rb;
    ~中略
}

次に、speedを使って移動の力を増幅させます。 FixedUpdateメソッドをの最後の1行を以下のように修正します。

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

        Vector3 movement = new Vector3 (moveHorizontal, 0.0f, moveVertical);
        rb.AddForce(movement * speed);
    }

speedをpublicフィールドにしたのには理由があります。 例えば、rb.AddForce(movement * 10);と書いても、力を増幅させることはできますね。 この場合、もし10を20に変えたい場合、スクリプトを修正して再度コンパイルする必要があります。 これは時間のかかる作業です。

publicフィールドを追加すると、Unityのインスペクタ上で値を変更できるようになります。 こにれより、簡単に速度を調整することが可能になります。

スクリプトの変更を保存して、Unityに戻りましょう。 Playerオブジェクトを選択してインスペクターを見てください。 先ほど定義したspeedパブリックフィールドが表示されているのが分かります。 f:id:enia:20210301140040p:plain

NOTE:
日本語化しているため「speed」が自動的に「速度」に翻訳されています。 試しにフィールド名をplayerSpeedにしたら、インスペクターでは「Player Speed」と表示されました。

では、speedを10に設定して、プレイモードで試してみましょう。 スムーズにボールを移動できるようになりましたね!

カメラの位置を変えてみよう

現状だとボールをほぼ水平の位置から撮影しているように表示されています。 まず、カメラの位置を設定しましょう。 ヒエラルキーでMain Cameraを選択します。 f:id:enia:20210301140900p:plain

次にインスペクターで値を設定していきます。

NOTE:
この作業はプレイモードにしながら行うとシーンビューにダイナミックに変更が反映されるためわかりやすいです。ただし、プレイモードを終了すると変更が戻ってしまうため、プレイモード終了後に再度値を設定するようにしましょう。

まず位置のY軸には現在1が設定されていると思いますが、これを10にします。 f:id:enia:20210301141641p:plain

すると、シーンビュー上にボールが映らなくなったと思います。 f:id:enia:20210301141734p:plain

つまり、カメラのY軸の位置とは目の高さということですね。 先ほどまでは目の高さが地面すれすれにありましたが、目の高さを上げてしまったため、足元のボールが見えなくなってしまいました。

そこで、カメラの角度を変えてボールが映るようにします。 回転のX軸の値を45に変更しましょう。 f:id:enia:20210301142013p:plain

すると、カメラが斜め下を向き、ボールが映るようになったと思います。 f:id:enia:20210301142047p:plain

NOTE:
カメラを下に向けるのになぜX軸の値を設定するのでしょう。私は最初Y軸なんじゃないかと思ってしまいました。おそらく、X軸を中心にしてぐるぐる回していくということですね。

カメラとプレイヤーを関連付けよう

現状だとカメラの位置が固定なので、カメラの外までプレイヤーが動くと見えなくなってしまいます。 そこで、カメラがプレイヤーに追従するようにしていきます。

関連付けはカメラにスクリプトを追加することで行います。 カメラオブジェクトを選択した状態で、インスペクターから新しいスクリプトを作成しましょう。 名前はCameraControllerにします。 f:id:enia:20210301154028p:plain

プロジェクトビューを見ると、プロジェクトルートにファイルが置かれていると思います。 ドラッグアンドドロップでScriptsフォルダに移動させましょう。 f:id:enia:20210301154133p:plain

CameraControllerスクリプトを開いて修正していきます。 CameraControllerに二つのフィールドを追加します。 GameObject型のplayerと、Vector3型のoffsetです。 コードは以下のようになります。

public class CameraController : MonoBehaviour
{
    public GameObject player;
    private Vector3 offset;
    ~中略~
}

offsetは、ゲームスタート時におけるカメラの位置とプレイヤーの位置の差を表します。 インスペクターで設定したカメラの位置と、プレイヤーの位置を引き算することで算出できます。 ゲームスタート時に一回だけ算出すればよいわけですが、どこに書けばよいでしょう。 そう、Startメソッドの出番ですね。

Startメソッドのコードは以下のようになります。

    void Start()
    {
        offset = transform.position - player.transform.position;
    }

次に、このoffsetを使ってカメラの位置を計算します。 カメラの位置は常にPlayerオブジェクトからoffset分だけ離れた位置にすれば、カメラは常にプレイヤーを追いかけ続けますね。
この処理はフレームごとに行う必要があります。フレームごとに呼び出されるメソッドと言えばそう、Updateメソッドです。

Updateメソッドのコードを以下のように修正します。

    void Update()
    {
        transform.position = player.transform.position + offset;
    }

これで、カメラの位置がプレイヤーの位置に追従するようになりました。 しかし、実はUpdateメソッドはカメラの位置を更新するには適した場所ではありません。 この処理を書くのに本当に適切な場所はLateUpdateメソッドです。

LateUpdateメソッドはUpdateメソッドと同様にフレームごとに呼び出されますが、全てのオブジェクトのUpdate処理が終わった後に呼び出されることが保証されています。 LateUpdateメソッドでカメラの位置を変えることで、確実にPlayerの移動が終わったあとにカメラの移動が行われます。

NOTE:
PlayerControllerとCameraControllerでは、どちらのUpdateが先に実行されるか、順序の保証がないということでしょう。LateUpdateメソッド同士の実行順序も保証されないと思いますが、LateUpdateには実行順序に依存するコードを書くべきでないということだと思われます。

最終的なコードは以下のようになります。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class CameraController : MonoBehaviour
{
    public GameObject player;
    private Vector3 offset;

    void Start()
    {
        offset = transform.position - player.transform.position;
    }

    void LateUpdate()
    {
        transform.position = player.transform.position + offset;       
    }
}

実際に動かしてみよう

動かす前にUnityに戻り、ヒエラルキービューでMain Cameraを選択した状態でインスペクターを見てください。 CameraControllerにPlayerというプロパティが表示されていますね。 f:id:enia:20210301171506p:plain

これが表示されるのは、先ほどCameraControllerにPublicフィールドとしてplayerを定義したからです。 一方で、offsetはPrivateフィールドとして定義したので表示されていません。

しかし、Playerプロパティの値が「なし」になっています。 Playerオブジェクトを関連づけるために、ヒエラルキーからPlayerオブジェクトをドラッグし、Playerプロパティの上にドロップしましょう。

すると、PlayerプロパティにPlayerオブジェクトへの参照が設定されました。 f:id:enia:20210301171827p:plain

さあ、プレイモードに変更して試してみましょう。 カメラがボールを追いかけてくるので、常にボールが画面の中心に表示されますね!

よりゲームらしさが増したのではないでしょうか。 少し短いですが、今回はここまで。

猫でもわかるUnity入門(第10回 玉転がし作成 その2)

f:id:enia:20210228230354p:plain

えにあです。 前回は玉転がし作成ゲームのプレイヤーオブジェクトである球体と、プレイグラウンドの作成を行いました。 今回は、ゲームのユーザによる入力に基づき、プレイヤー(球体)に物理的な力を加えて動かせるようにしていきます。

目次

プレイヤーに必要な動作を考えよう

まず、プレイヤーにどのような動きをさせるかを考えましょう。 プレイヤーはゲームエリア全体を転がることができ、端まで行くと壁にぶつかります。
プレイヤーは常に地面に設置していて、宙に浮くことはありません。 また、アイテムに触れたら接触したアイテムを取得できるようにします。

これには物理演算が必要です。 物理演算を使用するには、ゲームオブジェクトにRigidBodyコンポーネントをアタッチする必要があります。

リジッドボディ
物理シミュレーションによって、モデル同士の衝突判定(コリジョン)を行う際に設定する代表的な要素。リジッドボディはレンガや岩など、それ自身が変形しない硬い材質のモデルに適用する。

リジッドボディをアタッチしよう

コンポーネントをアタッチするには、まずアタッチされるゲームオブジェクトを選択します。

ここでは、プレイヤーを動かすのが目的ですのでプレイヤーゲームオブジェクトを選択します。 プレイヤーゲームオブジェクトを選択した状態でトップメニューから「コンポーネント」->「物理」->「リジッドボディ」を選択します。

f:id:enia:20210228233415p:plain

または、インスペクターで「コンポーネントを追加」->「リジットボディ」で追加することもできます。 f:id:enia:20210228234335p:plain

追加するとインスペクターにリジットボディの項目が表示されますね。 f:id:enia:20210228234931p:plain

コンポーネントは順番を変更することができます。 コンポーネントの右側の「︙」をクリックして、上に移動/下に移動で変更できます。 コンポーネントの順序はゲームには一切影響ありませんが、整理して見やすくすることができます。
f:id:enia:20210228234631p:plain

プレイヤーを動かすためのスクリプトファイルを作成しよう

プレイヤーを移動させるには、ユーザのキー入力を取得し、入力に応じてプレイヤーに力を加え、シーン内でプレイヤーを動かすようにする必要があります。

これはプレイヤーゲームオブジェクトにスクリプトをアタッチすることで実現します。 まず、プロジェクトビューでスクリプトアセットを格納するためのフォルダを作成しましょう。

フォルダの作成手順は以前と同じです。
トップメニューから「アセット」->「作成」->「フォルダ」で作成します。 f:id:enia:20210301090235p:plain

作成するフォルダの名前は「Scripts」にします。

NOTE:
私は小文字でscriptsにしてしまいましたが、デフォルトで存在するScenesなどに合わせるために大文字から始めるのが良いと思います。

f:id:enia:20210301090358p:plain

次に、新しいC#スクリプトを作成します。 スクリプトを作成する方法はいくつかありますが、一つはトップメニューから「アセット」->「作成」->「C#スクリプト」を選択する方法です。※別の方法を使いますので実行しなくて良いです。 f:id:enia:20210301090548p:plain

ですが、今回はプレイヤーにスクリプトをアタッチするのが目的ですので、プレイヤーオブジェクトを選択して、インスペクターで「コンポーネントを追加」->「新しいスクリプト」と選択するのが効率的です。 これを行うと、スクリプトの作成とアタッチを同時に行ってくれますので、今回はこの方法を利用します。 f:id:enia:20210301090852p:plain

PlayerControllerという名前をつけて新しいスクリプトを作成しましょう。
f:id:enia:20210301091103p:plain

InspectorにPlayerControllerが表示されましたね。
f:id:enia:20210301091158p:plain

プロジェクトビューを見てみましょう。 作成したPlayerControllerがプロジェクトのルートフォルダに置かれていることが分かります。
f:id:enia:20210301091409p:plain

整理するために、先ほど作成した「Scripts」フォルダの下に移動させましょう。 ファイルの移動はプロジェクトビューでドラッグアンドドロップするだけです。

Scriptsフォルダの中にPlayerControllerが置かれたことを確認してください。 f:id:enia:20210301091924p:plain

プロジェクトビューでスクリプトを選択するとインスペクターにソースコードが表示されますが、インスペクター上で直接編集することはできません。 f:id:enia:20210301092714p:plain

編集する場合はファイルを開く必要があります。
インスペクターの上側右の方にOpenというボタンがありますね。
f:id:enia:20210301092707p:plain

このボタンを押すとエディタが起動し、ファイルを編集することができます。
エディタは何でも構いませんが、Windows標準のメモ帳で編集していきます。

NOTE:
公式のチュートリアルではMonoDevelopというエディタを使っています。
このエディタを使うと、変数名や関数名の入力補完をしてくれるようです。
しかし、Unity2018以降はこのEditorが廃止された模様です。 今回はメモ帳で書きますが、入力補完なしでは開発効率が悪いので今後エディタ便利なエディタを探す予定です。VSCodeが利用できると良いな。

プレイヤーを動かすためのスクリプトを書いていこう

まずスクリプトでどのような処理を書くべきか考えてみましょう。 このスクリプトではフレームごとにユーザの入力をチェックし、その入力に従ってプレイヤーオブジェクトを動かします。
入力チェックは、スクリプトのどこに記述すればよいのでしょうか? UpdateメソッドまたはFixedUpdateメソッドのどちらかです。

Updateメソッドはフレームをレンダリングする前にコールされ、ゲームのコードの大部分がここに記述されます。

それに対してFixedUpdateメソッドは、物理演算を実行する直前に呼び出されます。 物理演算のコードはここに記述されます。 リジッドボディに力を加えてボールを動かす行為は物理演算です。 そのため、今回はFixedUpdateメソッドに処理を書いていきます。

まずはデフォルトで記述されていたStartメソッドやUpdateメソッドを削除し、FixedUpdateメソッドを追加しましょう。コードは以下のようになります。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PlayerController : MonoBehaviour
{
    // 物理演算の度にコールされます。
    void FixedUpdate ()
    {
    }
}

Unityでユーザ入力を扱うにはInputクラスを利用します。
Unityの標準クラスのドキュメントは以下のURLに用意されています。
Unity スクリプトリファレンス

今回利用するInputクラスのドキュメントはこちらです。
UnityEngine.Input - Unity スクリプトリファレンス

Inputクラスの概要を読むと、このクラスを使用して入力で設定された軸を読み取りモバイルデバイスでマルチタッチ/加速度計データにアクセスできることが分かります。

ドキュメントの下の方に目を移すと、スタティックフィールドとスタティックメソッドの一覧があります。 スタティックフィールドは情報を保持します。 例えば、touchCountにはタッチ回数が保存され、gyroにはデフォルトのジャイロスコープへの参照が保存さます。

スタティックメソッドは様々な機能を提供します。 今回はユーザ入力を受け取るためのGetAxisメソッドを使っていきます。 f:id:enia:20210301100510p:plain

メソッド名のリンクをクリックすると、メソッドの詳細を見ることができます。 GetAxisの詳細はこちらです。
コードのスニペットも用意されていますね。
Unity - Scripting API: Input.GetAxis

このスニペットを参考に、FixedUpdateメソッドを以下のように変更します。

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

変数moveHorizontalとmoveVerticalには、それぞれ水平軸(X軸)と垂直軸(Z軸)方向の入力が設定されます。 入力はキーボードから与えられます。 プレイヤーゲームオブジェクトはリジットボディを通して物理演算エンジンとデータのやり取りを行います。 プレイヤーの入力に従ってリジットボディに力を加え、シーン内のプレイヤーオブジェクトを動かします。

これを実現するためには、プレイヤーゲームオブジェクトにアタッチされているPlayerControllerスクリプトから、同じくプレイヤーゲームオブジェクトにアタッチされているリジットボディコンポーネントにアクセスする必要があります。

NOTE: オブジェクトに対してコンポーネントをアタッチしている、という関係性になっています。 プレイヤー(球体)がオブジェクトで、スクリプトもリジットボディもオブジェクトにアタッチされたコンポーネントです。

では、PlayerControllerに、リジットボディの参照を取得するコードを追加していきましょう。 Unityにはリジットボディを扱うためのRigidbodyクラスが用意されています。 まず、PlayerControllerクラスにRigidbody型のプライベートフィールドを作成します。

この変数はStartメソッドの中で、GetComponentメソッドを使って初期化します。 コードは以下のようになります。 ※実はこのコードにはミスがあります。後ほど修正します。

public class PlayerController : MonoBehaviour
{
    private RigidBody rb;

    void Start ()
    {
        rb = GetComponent<RigidBody>();
    }
   ~ 中略 ~
}

startメソッドはスクリプトがアクティブになる最初のフレームで呼び出されます。 たいていの場合、ゲームの最初のフレームと同一です。 (※どのような場合に異なるのかは現時点ではわかりませんでした)

GetComponentメソッドの詳細は割愛しますが、このメソッドを利用することで、このスクリプトと同じオブジェクトにアタッチされているコンポーネントを取得することができるようです。

NOTE:
コンポーネントを取得する方法はほかにもあるようですが、このチュートリアルでは紹介されていませんでした。他のオブジェクトにアタッチされているコンポーネントを取得する方法も当然あると思われます。現時点では最小の方法だけ把握していれば問題ないでしょう。

さて、これでリジッドボディへの参照を取得することができました。 次に、このリジッドボディに力を加える処理を追加していきます。

まずこちらにあるRigitbodyクラスのドキュメントを見てみましょう。 UnityEngine.Rigidbody - Unity スクリプトリファレンス

ドキュメントのPublic関数にAddForceメソッドがありますね。このメソッドでリジッドボディに力を加えられます。
f:id:enia:20210301102101p:plain

AddForceメソッドのドキュメントはこちらです。
Rigidbody-AddForce - Unity スクリプトリファレンス

AddForceメソッドのシグネチャを見ると、Vector3型のforceと、ForeceMode型のmodeの二つの引数が必要なことが分かります。

public void AddForce (Vector3 force, ForceMode mode= ForceMode.Force);`

Vector3の詳細は割愛しますが、簡単に説明するとVector3は(x, y, z)の3つの数値をまとめたものです。 3D空間での移動や力の値など、軸ごとの値が必要な場合に利用されます。

ForceModeについても割愛しますが、力のタイプを Acceleration、Impulse、VelocityChange に変えることができるようです。公式チュートリアルでも詳細な言及はありませんでした。

では、初期化したRigidbodyオブジェクトを使って力を加える処理を書いてみましょう。 FixedUpdateメソッドのコードを以下のように修正します。

void FixedUpdate ()
{
    float moveHorizontal = Input.GetAxis("Horizontal");
    float moveVertical= Input.GetAxis("Vertical");
    Vector3 movement = new Vector3 (moveHorizontal, 0.0f, moveVertical);
    rb.AddForce(movement);
}

AddForceメソッドの第二引数は省略可能ですので、ここではVector3型の第一引数だけを設定します。 このVector3型の値には「プレイヤーを移動させるための力の大きさ」を設定する必要があります。

x軸方向の力は、Input.GetAxis("Horizontal")で取得でき、既にmoveHorizontal変数に設定されています。
y軸方向の力は常にゼロです。玉は常に接地しているからです。
z軸方向の力は、Input.GetAxis('Vertical")で取得でき、既にmoveVertical変数に設定されています。

つまり、移動の力の大きさは、new Vector3 (moveHorizontal, 0.0f, moveVertical);で表現できます。
これをmovement変数に代入し、AddForceの引数として渡せばOKです。

ボールを動かしてみよう

スクリプトを保存してUnityに戻ります。 プロジェクトビューでPlayerControllerを選択した状態でコンソールタブを開いてみてください。 以下のエラーが表示されています。 f:id:enia:20210301110800p:plain

RegidBodyが見つからない、というエラーが出ていますね。 もう一度ドキュメントを見てみるとクラス名は「RegidBody」ではなく「Regidbody」が正解です。
修正して保存します。今度はエラーが消えました! f:id:enia:20210301111002p:plain

では、プレイモードに変更して実際にボールを動かしてみましょう。 プレイモードへの変更はLEGOチュートリアルで散々やりましたね。
シーンビューの上の▲を押してプレイモードに変更します。 f:id:enia:20210301111916p:plain

矢印キーで上下左右に動かしてみてください。 ゆっくりではありますが、ボールが指定した方向に動いたでしょうか?

なんとなくゲーム開発に近づいてきましたね!
だんだんと面白くなってきました。
今回はここまで!

猫でもわかるUnity入門(第9回 玉転がし作成 その1)

f:id:enia:20210228230354p:plain えにあです。

前回までで、Unityの環境構築と、エディタの使い方を覚えるためのレゴの最初のチュートリアルを行いました。  

しかし、最初のチュートリアルではどうやってゲームを作り始めれば良いかは全く分からないので、もう少し手を動かすチュートリアルをやっていきます。

Unityには、Unity Learnという公式のチュートリアルでゲームの作り方を学べる教材が用意されています。 今回は、一番簡単そうな玉転がしアプリの作り方を学んでいきます。
learn.unity.com

NOTE:
Unity公式の動画は最新バージョンのUnityで作られているわけではないので、実際に試してみると画面が違うことが多々あります。 このブログではversion 2019.4.21f1 Personalでの画面で説明していきます。


目次

イントロダクション

Special Game Objectを集める roll a ballというゲームを作っていきます。
どのようにゲームオブジェクトを作るか、ゲームオブジェクトへのコンポーネントの追加の仕方、位置やプロパティの設定などを学んでいきます。

このゲームではプレイヤーが、ゲームボードの上をボールを転がしていきます。
キーボードを使ってボールを移動させます。
プレイヤーが動かしたボールで、Pickup GameObjectを集めていくようにします。
いくつのオブジェクトをピックアップしたかカウントし、全部集めたらゲームが終了するようにします。

アセットをインポートする必要はありません。
立方体や球などの、Unityが用意する標準のアセットを使います。
まずはゲームと最初のゲームオブジェクトをセットアップしていきます。

プロジェクトを作成しよう

まず、新しいプロジェクトを作成しましょう。 新しいプロジェクトを作成するには、トップメニューで「ファイル」->「新しいプロジェクト」を選択します。

f:id:enia:20210228173409p:plain

すると、ホーム画面が表示されます。
新しいプロジェクトの名前を「Roll a ball」にします。
プロジェクトの保存先ディレクトリを任意の場所に設定します。
2Dプロジェクトと3Dプロジェクトのどちらにするかを選べますが、ここでは3Dプロジェクトにします。
f:id:enia:20210228173521p:plain

「作成」を押して新しいプロジェクトを作成します。

新しいプロジェクトが作成され、空のシーンが表示されました。
f:id:enia:20210228174120p:plain

空のシーンに何かを追加する前に、シーンを保存します。 ヒエラルキービューのSample Sceneの横の「⁝」を右クリックして「シーンを別名で保存」を選択します。 D:\Unity\RollABall\Roll aball\Assets\Scenesの下に、MiniGameという名前で保存します。
f:id:enia:20210228174634p:plain

シーンの名前がMiniGameに変わりました。 f:id:enia:20210228175405p:plain

ゲームボードを作成しよう

次にゲームボード、つまりプレイフィールドを作っていきます。 Unity標準の平面(Plane)を使います。

平面(Plane)を作成するには、トップメニューから「ゲームオブジェクト」->「3Dオブジェクト」->「平面 」を選択します。

f:id:enia:20210228175902p:plain

あるいは、ヒエラルキービューからも作成できます。 f:id:enia:20210228175941p:plain

次に、作成した平面オブジェクトの名前を「Ground」に変更します。 オブジェクトの名前は、オブジェクトを選択するとインスペクターの一番上に表示されています。 現状はPlaneになっていますね。 f:id:enia:20210228180343p:plain

Groundに変更してEnterを押してみましょう。 ヒエラルキービューの名前もGroundに変わったことが分かると思います。 f:id:enia:20210228180532p:plain

次に、インスペクターのTransformメニューをクリックして「リセット」を選択します。 f:id:enia:20210228180812p:plain

これで、このゲームオブジェクトはシーンの(0, 0, 0)座標に配置されます。 (0, 0, 0)はオリジンポイントと呼ばれ、このシーン内の全ての座標は(0,0,0)を基準に計算されます。 座標の値が変わったことを確認しましょう。 f:id:enia:20210228180914p:plain

現在、シーンにはグリッドが表示されていますが、チュートリアルの目的のためにグリッドをオフにします。 公式の動画ではギズモメニューからグリッドをオフにしていますが、場所が変わったようです。 グリッドの表示変更メニューを出します。 f:id:enia:20210228181746p:plain

不透明度を0に変更します。 すると、シーンからグリッドが消えます。 f:id:enia:20210228181936p:plain

次に、平面のサイズを変えてみましょう。 サイズを変えるにはヒエラルキービューの上にある、スケールツールを選択します。 するとシーンビュー内で平面を選択した時に、下の画像のように赤青緑の線が表示されるはずです。
この線を引っ張ると、平面のサイズが変更されます。

なお、平面には厚みがありません。そのため、通常Y方向のスケールは常に1になっています。 しかし、Y軸をマイナス方向に引っ張ってしまうと、平面が上下ひっくり返り、透明に見えてしまうので注意しましょう。
f:id:enia:20210228182401p:plain

スケールの変更は、インスペクターの「拡大/縮小」に直接値を設定することでも変更できます。
f:id:enia:20210228182754p:plain

プレイヤーオブジェクトを作成しよう

今回プレイヤーオブジェクトに使うのは、Unity標準の球体オブジェクトです。
ヒエラルキービューから「+」->「3Dオブジェクト」->「スフィア」を選択しましょう。 f:id:enia:20210228182923p:plain

オブジェクトの名前をPlayerに変更して、位置を(0, 0, 0)に設定しましょう。 f:id:enia:20210228183247p:plain

球オブジェクトが選択された状態で、トップメニューから「編集」->「選択したものを中央に」を選択しましょう。
シーンビューでShift + Fでも構いません。 f:id:enia:20210228183426p:plain

すると、球が半分地面に埋まってしまっているのが分かると思います。 これは、平面も球も(0, 0, 0)の座標に存在するからです。 f:id:enia:20210228183638p:plain

なので、平面より上に来るように球を移動させましょう。 Unity標準の立法体や球オブジェクトは、標準サイズが決まっています。 1×1×1、または1×2×1です。

なので、プレイヤーオブジェクト(球)をY軸方向に0.5ポイント上にずらせば、ちょうど平面上に来ます。 インスペクターで、球のY軸方向の位置を0.5に変更しましょう。
f:id:enia:20210228184040p:plain

シーンビューを見ると、球が平面の上に来たのがわかりますね。 f:id:enia:20210228184635p:plain

ところで、平面には球の影が落ちていますね。
Unityシーンを作ると、デフォルトのスカイボックスとディレクショナルライトが用意されています。
そのため、デフォルトのライティングについて気にする必要はありません。

スカイボックス:
デフォルトの背景のことのようです。

ディレクショナルライト:
太陽からの光を表現するように、単一方向から平行に降り注ぐ光のことのようです。

平面に色をつけよう

さて、このままでは白い平面の上に白い球があるので、見づらいですね。 そこで、平面に色をつけていきましょう。
オブジェクトに色、またはテクスチャをつけるにはマテリアルを利用します。 テクスチャ: テクスチャ (Texture) とは、物の表面に触れた際の質感、感触、外観。

ここでは、マテリアルについて詳しく説明しません。テクスチャも利用しません。 標準のマテリアルを利用して、シーン内のオブジェクトに色をつけるだけです。

マテリアルを格納するためのフォルダを作りましょう。 トップメニューから「アセット」->「作成」->「フォルダ」を選択します。

f:id:enia:20210228185228p:plain

プロジェクトビューに新しいフォルダが表示されるので名前をMaterialsにしましょう。 f:id:enia:20210228185311p:plain

Materialsフォルダが選択されている状態で、トップメニューから「アセット」->「作成」->「マテリアル」を選択します。 プロジェクトビューを見ると、Materialsフォルダの下に新しいマテリアルが作成されているのが分かります。
このマテリアルの名前を「background」に変更しましょう。 f:id:enia:20210228185624p:plain

backgroundマテリアルを選択してインスペクターを見ると、Main Mapsの一番上にアルベドという項目があるのが分かります。 f:id:enia:20210228190304p:plain

アルベド
アルベド(albedo)とは、天体の外部からの入射光に対する、反射光の比である。
0以上、1前後以下(1を>超えることもある)の無次元量であり、0 – 1の数値そのままか、0 % – 100 %の百分率で表す。 よくわかりませんが、色を表す項目のようです。

アルベドの白い四角の部分を押して、色を変更します。
ここでは、RGBを0, 32, 64に変更しましょう。
f:id:enia:20210228190242p:plain

インスペクターの下部にプレビューが表示されています。濃紺ですね。
f:id:enia:20210228190458p:plain

マテリアルを平面に反映させるには、プロジェクトビューでマテリアルを選択して、シーンビューの平面にドラッグアンドドロップするだけです。
すると、平面が先ほど指定した濃紺に変わります。
これでプレイヤー(ボール)が目立つようになりました。 f:id:enia:20210228191257p:plain

ライティングを変更しよう

最後にプレイヤーに対するライティングを変更します。
ヒエラルキーでディレクショナルライトを選択します。
f:id:enia:20210228190922p:plain

インスペクターで、回転のY軸を60に変更します。
f:id:enia:20210228191126p:plain

シーンビューで光の当たり方が変わったのを確認しましょう。 f:id:enia:20210228191213p:plain

これでプレイヤーオブジェクトと、プレイグラウンドの作成は完了です。

今回はここまで!

猫でもわかるUnity入門(第8回 チュートリアル7ファイナル)

f:id:enia:20210228230354p:plain えにあです。

前回はチュートリアル6をやりました。
今回はチュートリアル7(ラスト)を進めていきます。

所要時間
チュートリアル7は8個のチャプターからなっています。
途中で行うビルドには20分程度かかりましたので、30分ほど見ておくと良いです。

(1/8) Build and Publish(ビルドと公開)

公開する前に make it your own by trying some of the LEGO Creative Mods.
※ごめん。意味がわからない。Creative Modsは学習教材か?いくつかやってみたらって感じ?

準備ができたら、このチュートリアルを進めると、あなたが友達にゲームを共有できるように、専用のWebページでゲームを公開できるようになります。

Notes:

  • 上述のCreative Modsのリンクはデフォルトブラウザで開かれます。
  • プロジェクトのビルドにはある程度時間がかかります。

Startを押して始めよう。
f:id:enia:20210228151008p:plain

(2/8) Open the WebGL Publisher(WebGL Publisherを開こう)

このチュートリアルでは、あなたのマイクロゲームプロジェクトをWebGLゲームとしエクスポートします。
そうすると、あなたのゲームは専用のWebPageを持つようになります。

WebGL Publisher ウィンドウを開こう トップメニューから、Public -> WebGL projectを選択しよう

f:id:enia:20210228151117p:plain

(3/8) Get started(始めてみよう)

WebGL Publisher ウィンドウが表示されたはずです。
f:id:enia:20210228151417p:plain

you can set up Unity Editor to publish projects on Unity Play. あなたはプロジェクトをUnity Play上に公開するように、Unityエディタをセットアップできます。(で合ってる?)

準備ができたら、「開始」ボタンを押そう。 f:id:enia:20210228151753p:plain

(4/8) SignIn

SignIn済みだったためか、自動でスキップされた。

(5/8) Build your game(ゲームをビルドしよう)

ゲームを公開する前に、ゲームをビルドする必要があります。 この操作で、あなたのコンピュータ上にプレイ可能なファイルが作られるでしょう。

注意: - このステップは30分ほどかかります。

  • ビルドファイルは、デフォルトフォルダに保存することも、新しいフォルダを作って保存することもできます。
  • もし、すでにビルド済みのファイルを公開したい場合は、すぐにNextを押して次に進みましょう。

「ビルドして公開」を選択しよう。

以下のウィンドウが表示されるので、WebGLに切り替えるを選択しよう。 f:id:enia:20210228152534p:plain

次に、保存先のディレクトリを選択しよう。これはどこでも良いみたいです。

ディレクトリを選択したら、しばらくフリーズし、もう少し待つと以下のようなローディング中の表示が出るぞ。
f:id:enia:20210228152707p:plain

100%になったら、Publisherの方に以下のローディングが出るぞ。
f:id:enia:20210228152826p:plain

20分ほど待って100%になると、以下の警告が出るのでアクセスを許可しよう。
※プライベートの方だけにチェックを入れて許可しました。
f:id:enia:20210228154544p:plain

許可をすると数秒でアップロード完了の表示がでたぞ。
※この時点では完了を押さずに放置したが、完了を押して閉じて良いでしょう。 f:id:enia:20210228154634p:plain

すると、自動的にブラウザのタブが開いて、以下の画面が表示された。
Get Assetを押してよくわからないところに飛ばされたが、恐らくNot Nowでいいはず。 f:id:enia:20210228154842p:plain

えにあの場合、以下のURLでゲームが公開されたようだ。 このURL一意なのかな。URL重複しそうだが。 https://play.unity.com/mg/lego/firstlegomicrogame

(6/8) publish your game

この手順は自動でスキップされた。ビルドすると同時にPulishしているからだろう。

(7/8) Your game is being processed

この手順は自動でスキップされた。

(8/8) Share your game (ゲームをシェアしよう)

ここまで進んだら、いつのまにか8/8まで進んでいた。

もうシェアの準備はほとんどできています。 それをする前に、Unity Playのディレクトリでタイトルや詳細、サムネイルなどを好きに変更しよう。

期待通りに動くかどうか、もう一回テストするのも良いアイデアです。

あなたの度はまだ終わりません:

  • 準備ができたら、他の人が遊べるようにリンクをシェアしよう。
  • もっとModsをゲームに追加したり、他のマイクロゲームを調査することもできます。
  • Unity Essentialsであなたのクリエイターとしての旅を続けましょう。

f:id:enia:20210228155029p:plain

これでチャプター7は終了です。

以上で、LEGOチュートリアルはすべて終了しました! このチュートリアルでは全然オリジナルのゲームを作れるようにはなりませんね!

次は1から作るようなチュートリアルをやりたいと思います。 今回はここまで!

猫でもわかるUnity入門(第7回 チュートリアル6)

f:id:enia:20210228230354p:plain

えにあです。

前回はチュートリアル5をやりました。
今回はチュートリアル6を進めていきます。

所要時間
チュートリアル6は11チャプターからなっています。
10分ほどで終わるでしょう。

(1/11) Customize your game(ゲームをカスタマイズしよう)

今までで、基本的なゲームは完了しました。
次は、スタートポイントの後ろに、ミステリアスアイランドを追加していきましょう。

Strartボタンを押して次に進もう。

f:id:enia:20210228134843p:plain

(2/11) Add an Explode brick(爆発ブロックを追加しよう)

島に到達するには、フェンスを飛び越える必要があります。
現状では、ダブルジャンプを駆使しても飛び越えることはできません。

幸いにも、LEGOのビヘイビアブロックにはフェンスをぶっ壊すためのブロックが存在します。
Explodeブロックを選択してシーンビューにドラッグアンドドロップして次に進もう。

f:id:enia:20210228134906p:plain

'3/11) Connect Explode with the fence (爆発ブロックをフェンスにコネクトしよう)

次に、爆発ブロックをフェンスにコネクトしよう。
Tips: ブロック組み立てをオンにしとくといい感じにつながるよ。

  1. フェンスの上に爆発ブロックをおこう。
  2. クリックしてフェンスにつなげよう。

つながると、画像のようにチェックが入るよ。
Nextを押して次に進もう。
f:id:enia:20210228135549p:plain

(4/11)Add a detonator base(起爆装置(detonator)を追加しよう)

プレイヤーが爆弾を起爆できるようにしよう。

最初に、フェンスから少し離れた安全な位置に、起爆装置にベースを設置しよう。
Altar(祭壇)を選択して、シーンビューにドラッグアンドドロップしよう。

f:id:enia:20210228135644p:plain

(5/11) Add a Touch Trigger(タッチトリガーを追加しよう)

次に、プレイヤーがフェンスを起爆できるように、ビヘイビアブロックを追加しよう。
そう、あなたの古い友達、タッチトリガーブロックです。

Tip: ブロック組み立てをオンにしておくと、コネクトできる場所にいい感じに配置できるよ。

  1. プロジェクトウィンドウからTouch Triggerを選択して、シーンビューにドラッグアンドドロップしよう。

  2. Alter(祭壇)にコネクトしよう。

上手く設置できると、画像のようにチェックが入るよ。
Nextを押して次に進もう。

f:id:enia:20210228140332p:plain

(6/11) Configure the detonator(起爆装置を設定しよう)

タッチトリガーブロックを、フェンスの上にある爆発ブロックを起動するように設定しまよう。

Go deeper:

  • トリガブロックを使って、アクションブロックを起動することができます。離れていても。

  • タッチトリガブロックで、爆発ブロックを起動するようにすると、シーンビュー上でブロック間のつながりが線で表示されるようになります。

  • インスペクターでタッチトリガコンポーネントを見つけます。 ※私の場合、なぜか見つからなったのでチュートリアルの頭からやり直しました。

  • ターゲットプロパティを、Specific Actionsに変更します。

  • Specific Actionsを選択して、開きます。

  • サイズを1に変更します。

  • Select Actionボタンを押して、Fence Explodeを選択します。
    f:id:enia:20210228141742p:plain

f:id:enia:20210228141402p:plain

(7/11) Optional: Adjust the diffculty(任意:難しさを調整しよう)

現在までで、プレイヤーは敵の鳥の攻撃をかわしつつ、フェンスを吹き飛ばしてダブルジャンプで島を渡らなければならなくなりました。

あなたは難易度を少し簡単にしたいかもしれません。いくつかアイデアがあります。

  • プロジェクトウィンドウからプラットフォーム等のオブジェクトを追加して、ジャンプの距離を短くしてみる。

  • シュートブロックの設定を変えて、鳥の危険度を下げる。

  • 自分のアイデアを試す。

自由にゲームを調整してみてね。
完了したら次に進もう。
f:id:enia:20210228142432p:plain

(8/11) Enter Play Mode

変更を保存してテストをする時がきた。
ctrl + sで保存できることを思い出してね。

PlayModeに変更してテストに進もう。
f:id:enia:20210228142641p:plain

(9/11) Test your changes(変更をテストしよう)

普通にゲームを進めるじゃなくて、右に進んで起爆装置を起動しよう。
そのあとダブルジャンプで島に渡ろう。
島を探検して、何を見つけられるかな?

終わったらプレイモードを終了して次に進もう。

何とかダブルジャンプに成功して隣の島に渡れたぞ。
キャプチャーとる前に毒?のブロックを触って一回死んでしまった。 f:id:enia:20210228143456p:plain

(10/11) Customize your game

この島では、さまざまなビヘイビアブロックを見ることができます。

実験! プレイヤー体験やゲーム環境を変更するために、オブジェクトとビヘイビアブロックをつなげてみよう。

想像力を働かせてみよう。

このUnityプロジェクトは以下を含んでます。

  • 様々なビヘイビアブロックが、LEGO Behaviour Bricksフォルダにあります。

  • objects と キャラクターが LEGO Models folderにあります。

これらのアセットを使ってみよう。 プロジェクトウィンドウから、Assets -> LEGO -> Prefabsと移動し、調べてみたいフォルダを選んでみよう。

調べ終わったらNextを押して次に進もう。 f:id:enia:20210228144443p:plain

(11/11) Next steps(次のステップへ)

物理的なレゴのように、このゲームで創造力を鍛えることができます。 このゲームをカスタマイズする方法をもっと知りたければ、LEGO Microgame Createive Mods!を調べてみて!

注意: このリンクはUnity Learn ウェブサイトをデフォルトブラウザで開くよ。

そこで、プレイグラウンドシーン(Playground Scene)について知り、実験することができます。

次の最後のチュートリアルでは、ゲームをビルドして、パブリッシュすることができます。

チャプター6は以上になります。 今回はここまで!

猫でもわかるUnity入門(第6回 チュートリアル5)

f:id:enia:20210228230354p:plain えにあです。

前回はチュートリアル4をやりました。
今回はチュートリアル5を進めていきます。

所要時間
チュートリアル5は15チャプターからなっています。
15分程度で完了するでしょう。

(1/15) Add an Enemy(敵を追加しよう)

このチュートリアルでは、LEGOのビヘイビアブロックを使って敵を追加していきます。
スタートボタンを押してチュートリアルを始めよう。

f:id:enia:20210228120155p:plain

(2/15) Add an enemy character(敵キャラを追加しよう)

敵を作るために最初にやることは、キャラクターを追加することだ。
まずは鳥を追加しよう。
f:id:enia:20210228120222p:plain

Galoを選択してシーンビューにドラッグアンドドロップしよう。
Galoはエディタのした方にある鳥型のキャラクターのことだよ。

(3/15) Optional: Adjust your view(任意:ビューを調整しよう)

もしビューを調整する必要があるなら:
- ビューのアングルを変えるには、Altと左クリックを押したまま、マウスカーソルを動かそう。
- ズームする場合は、マウスのスクロールホイールからトラックパッドを動かそう。 またはAlt+右クリックを押したままマウスを動かすことでもズームできるよ。

次に進む場合はNextを押そう。
f:id:enia:20210228120523p:plain

(4/15) Select the Shoot brick(シュートブロックを選択しよう)

シュートアクションブロックを追加しよう。そうすると、鳥がプレイヤーを攻撃してくるようになるぞ。

シュートアクションブロックを選択してシーンビューにドラッグアンドドロップしよう。
f:id:enia:20210228120852p:plain

(5/15) Connect the Shoot brick(シュートブロックを追加しよう)

次に、シュートブロック鳥にコネクトしよう。それをする前に、シービューの左上に表示されているレゴツールを確認しよう。

  • 1つめのボタンはブロック組み立てのオンオフ
    ※よくわらないけど、どうやら1つめのボタンを赤い状態にしておくと、物理的なレゴと同じように組み立てられる位置に勝手に配置してくれる。これがオフだと、自分で高さを調節したりしないといけない。

  • 2つめのボタンは1つのブロックだけを選択できるようにするかのオンオフ
    ※ちょっとよくわからないけど、レゴを組み合わせた状態で1つの部品として選択するか、1つずつ選択する、ということだろう。

Tips:

  • シュートブロックの方向は、アイコンと穴の位置でわかるよ。
  • ブロックを回転させる必要があるなら、矢印アイコンを使おう。

ビヘイビアブロックをコネクトしよう。

  1. シュートブロックを鳥の上に乗せよう。コネクトできる場所にsnap to showされるでしょう。

  2. コネクトをクリックしてシュートブロックとbirdをつなげよう。
    ※2つめの意味が良くわからん。1つめをやった時点で勝手にチェックマークが入って次に進めるようになった気がするが。
    f:id:enia:20210228121053p:plain

(6/15) Enter Play Mode(プレイモードに変更しよう)

ゲームをテストして、追加した敵を確認しよう。
▲を押しプレイモードに変更しよう。
f:id:enia:20210228122914p:plain

(7/15) Test your changes

テストプレイして、ユーザ体験がどのように変わるか確認しよう。

終わったら▲をもう一回押してテストを終了しよう。

f:id:enia:20210228123242p:plain

(8/15) Add a Look At brick(ルックアットブロックを追加しよう)

鳥は攻撃してくるようになった。でも、もっと正確に攻撃するようにしたい。
照準をよりよく合わせられるように、鳥がプレイヤーの方を向くようにしよう。

ルックアットアクションブロックを選択して、シーンビューにドラッグアンドドロップしよう。
f:id:enia:20210228123518p:plain

(9/15) Connect the Look At brick (ルックアットブロックをコネクトしよう)

次に、ルックアットブロックを鳥にコネクトしよう。

Tips:

  • ブロック組み立てが有効になっている場合、ブロックはコネクトできる場所にsnap to showされるよ。
  • ルックアットブロックの目のアイコンは、常にプレイヤーの方を見ようとするよ。
  • ルックアットブロックを回転させたければ、矢印アイコンを使おう。

Connect the Behaviour Brick

  1. ルックアットブロックを鳥の上に乗せよう。

  2. クリックしてブロックを鳥にコネクトしよう。

  3. Nextを押して次に進もう。

f:id:enia:20210228131459p:plain

(10/15) Modify the Shoot brick(シュートブロックを変更する)

次に、インスペクターを使ってシュートアクションの振る舞いを変えていこう。

シーンビューでシュートアクションブロックを選択して次に進もう。
f:id:enia:20210228132207p:plain

(11/15) Change the Velocity and Accuraty(速度と正確さを変えよう)

次に、シュートアクションコンポーネントの速度と正確さのプロパティを変更しよう。

Go deeper:

  • 速度(Velocity)の値を大きくすると、発射物(projectiles)の速度があがるよ。

  • 正確さ(Accracy)の値を大きくすると、発射物がプレイヤーに当たりやすくなるよ。

  • これらの値を変更するために、値を入力するか、スケールバーを引っ張ろう。

速度と正確さを変えて、次に進もう。
f:id:enia:20210228132354p:plain

(12/15) Enter play Mode(プレイモードに変更しよう)

変更をテストする時間だ。
変更を保存したら、プレイモードに変更しよう。

保存はctrl + sだよ。

f:id:enia:20210228132804p:plain

(13/15) Test your changes

敵の設定変更が、プレイヤー体験にどんな影響を確認してみよう。
確認したら、プレイモードを閉じて次に進もう。

画像のように、鳥の上は安地だ!
f:id:enia:20210228133355p:plain

(14/15) Optional: Adjust the Velocity and Accuracy(速度と正確さを調整しよう)

速度と正確さが正しくなかったら、変更してみよう。

Step reminder:

  1. シーンビューでシュートアクションブロックを選択します。
  2. インスペクターで、シュートアクションコンポーネントを見つけます。
  3. 速度と正確さを調整します。
  4. テストして変更を保存します。

Nextを押して次に進もう。

f:id:enia:20210228133708p:plain

(15/15) Next Steps

このチュートリアルでは、危険な鳥の敵を追加しました。
次は、新しい島を体験して、ゲームをカスタマイズするより多くの方法を学んでいきます。

チュートリアル5は以上です。
今回はここまで!

f:id:enia:20210228133732p:plain