こどもから目指すゲーム開発者 #12(終)『Unityでゴールを作る』

こんにちは。KTです。

今回は下のようにゴールを作ります。

・さわるとゴール

ゴールを作る

まずは「こどもから目指すゲーム開発者 #8『Unityで地形を作る』」でやったように山などを作りたいと思います。

落ちたりしないように壁と天井も作りました。

ゴールの絵は何でもいいのですが下のクリスタルのようなものを使います。

・Goal.png

ゴールの絵をAssetsのImagesフォルダに入れてください。

そして、下の図のようにImagesのGoalをゲーム画面に引っ張って置いてください。

続いて、HierarckyにGoalオブジェクトが追加されたのでクリックして選択してください。
そのあと、画面右側のInspectorのAdd ComponentをクリックしてPhysics 2D>Box Collider 2Dを選択してください。

そして、下のようにIs Triggerにチェックを入れてください。
Is Triggerにチェックを入れるとチェックを入れたCollider(この場合はクリスタル)に触れた時にだけ流れるプログラムを記述することができます。
Trigger:トリガー、引き金。プログラム開始の起点のようなニュアンス。

次にゴールした時のメッセージを追加します。

下の図のようにHierarchyで右クリックしてUI>Textを選択してください。

CanvasとTextのオブジェクトができたと思うのでTextオブジェクトを右クリックしてRenameで「TextClear」に名前を変更してください。

次にHierarchyのCanvasオブジェクトを選択してInspectorを下の図の赤枠のように設定してください。
InspectorのRender Modeを「Screen Space – Camera」に変更するとRender Cameraという項目が増えます。
そこで、HierarchyのMain CameraをクリックしたままRender Cameraの設定部分(赤矢印)まで引っ張ってください。
あとはOder in Layerを「1」にしてください。

次にHierarchyのTextClearオブジェクトを選択してInspectorを下の図の赤枠のように設定してください。
Textには「CLEAR!!」と入力してください。
clear:クリア、明るい、澄み切った等。

Colorは色をクリックしてください。
すると下の図のような画面が出てきますので例えば黄色にするのであれば赤丸のところをクリックしてください。

下のように表示されているでしょうか?

最初からCLEAR!!が表示されてはいけないので下の図の赤枠のチェックを外してください。

次にゴールにふれたときにCLEAR!!を表示したいのでPlayerスクリプトにプログラミングします。

PlayerスクリプトをダブルクリックしてVisualStudioを立ち上げてください。

プログラムを書きます。

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

public class Player : MonoBehaviour
{
    // RigidBody2Dが入るrbodyという記号を用意します。
    Rigidbody2D rbody;

    // TextClearを入れる記号です。
    public GameObject textClear;

    // Start is called before the first frame update 最初だけカッコ内のプログラムが流れます。
    void Start()
    {
        // プレイヤーキャラクターに設定したRigidBody2Dをrbodyに入れます。
        rbody = GetComponent<Rigidbody2D>();
    }

    // Update is called once per frame 1フレームごとにカッコ内のプログラムが流れます。
    void Update()
    {
        // floatは後述の記号は数値しか入れられない意味。xに←キーが押されたら-1、→キーが押されたら1、何も押されてない場合は0が代入されます。
        float x = Input.GetAxisRaw("Horizontal");

        // float xのxです。キーが押されていない場合、カッコ内のプログラムが動きます。
        if (x == 0)
        {
            // キャラクターのx軸方向に0のスピードを加えます。(停止)
            rbody.velocity = new Vector2(0, rbody.velocity.y);
        }

        // float xのxです。←キーが押された場合、カッコ内のプログラムが動きます。
        if (x == -1)
        {
            // キャラクターのx軸方向に-5のスピードを加えます。(左に移動)
            rbody.velocity = new Vector2(-5, rbody.velocity.y);
            // キャラクターの絵を左向きにします。
            transform.localScale = new Vector2(-1, 1);
        }

        // float xのxです。→キーが押された場合、カッコ内のプログラムが動きます。
        if (x == 1)
        {
            // キャラクターのx軸方向に5のスピードを加えます。(右に移動)
            rbody.velocity = new Vector2(5, rbody.velocity.y);
            // キャラクターの絵を右向きにします。
            transform.localScale = new Vector2(1, 1);
        }

        // スペースが押されてy軸方向にキャラクターが動いていない場合、y軸方向にプラスの力を加えます。
        if (Input.GetKeyDown("space") && rbody.velocity.y == 0)
        {
            rbody.AddForce(Vector2.up * 400);
        }
    }

    // Is Triggerにチェックを入れたColliderにプレイヤーが触れるとプログラムが流れます。
    void OnTriggerEnter2D(Collider2D col)
    {
        // TextClearを表示させます。
        textClear.SetActive(true);
    }
}

今回追加したのは10~11行目と58~63行目です。

プログラムをコピーして上書きしてください。

public GameObject textClear;
GameObjectが入るtextClearという記号です。
GameObjectとはHierarchyのオブジェクトのことです。
ここにはプログラム上ではなくUnityのInspectorでTextClearオブジェクトを設定します。

void OnTriggerEnter2D(Collider2D col)
{
textClear.SetActive(true);
}

プレイヤーがIs Triggerにチェックを入れたオブジェクト(今回はクリスタル)に触れると{}内のプログラムが流れます。
textClear.SetActive(true);はTextClearの表示チェックを外したものがチェックされて表示されるようになります。

プログラムを書いたら忘れず保存をしてください。

最後にUnityに戻り、HierarchyのPlayerオブジェクトを選択してください。
InspectorのPlayer(Script)にtextClearという項目が追加されています。
下の図のようにHierarchyのTextClearをクリックしながらPlayer(Script)のtextClearまで引っ張って入れてください。

ここまで出来ましたらゲームを実行してみましょう。

プレイヤーキャラクターがクリスタルに触れたらCLEAR!!が表示されました。

あとがき

以上でゲーム開発の一通りの説明は終わりです。難しかったでしょうか?(;’∀’)

もちろん、音楽やボタンを追加したりマップを広くしたり敵やアイテムの追加など、想像すればキリがないほどにゲームを楽しくする要素は思いつきます。

そうした場合、インターネットや書籍で調べてみて自分でどうしたらいいか考えるのも楽しく、また、正解はないので色々なやり方を知ることができます。

これこそがプログラミング的思考になります。

この記事を読んでいただいた方々が大きな想像を膨らませ、それを実現できるようになることを祈ってこの企画の締めとさせていただきます。

長い間お付き合いありがとうございました。

次回の企画でお会いしましょう!

タイトルとURLをコピーしました