コイン集めゲームを作ってみよう!

3Dコイン集めゲームを作ろう

③スクリプトを追加しよう

続いてこのシーンにスクリプトを用意します。
まずはCollectCoinScriptを追加します。


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

public class CollectCoinScript : MonoBehaviour
{
    public int coinCount;

    private void OnTriggerEnter(Collider other)
    {
        if (other.gameObject.CompareTag("Coin"))
        {
            coinCount++;
            Destroy(other.gameObject);
            Debug.Log(coinCount);
        }
    }
}

コードを記述出来たら、このスクリプトをプレイヤーにアタッチします。
プレイヤーは『PlayerArmature』です。

続いて、コインPrefabを適当に作成(Rigidbody,Collider(Is Triggerに設定)がついていればOk)し、ゲームが始まったら指定した座標空間内で10枚程生成するようにスクリプトを追加します。

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

public class GenerateCoin : MonoBehaviour
{
    public GameObject coinPrefab;
    public int generateCoinCount;

    public float minX = -10f;
    public float maxX = 10f;
    public float minY = 0.5f;
    public float maxY = 1f;
    public float minZ = 0f;
    public float maxZ = 10f;

    void Start()
    {
        GenerateCoins();
    }

    private void GenerateCoins()
    {
        for (int i = 0; i < generateCoinCount; i++)
        {
            Vector3 randomPosition = new Vector3(
                Random.Range(minX, maxX),
                Random.Range(minY, maxY),
                Random.Range(minZ, maxZ)
            );

            // ランダムな位置にcoinPrefabを生成する
            Instantiate(coinPrefab, randomPosition, Quaternion.identity);
        }
    }
}

このスクリプトが描けたら、空のオブジェクトを作成し、そこにこのスクリプト(GenerateCoin)をアタッチしてください。各項目にドラッグ&ドロップし、値を入れます。

この状態でゲームを実行してみると、軌道と同時に10枚のコイン(円形の物体)が生成されました。
近づいて当たってみるとDebug.Logによりカウント数が増えていきます。

これで10枚のコインを指定した座標内で生成することが出来ました!
次はカウントダウンタイマーを作っていきたいと思います。


④タイマー表記を追加しよう

10枚コインを取るまでにかかった時間を表示するか、カウントダウンタイマーにするかは、開発によって異なります。今回はどちらを使っても構いませんが、カウントダウンタイマー表を使っていきたいと思います。

『CountDownTimer』スクリプトを作成し、以下のコードを追加します。
追加が出来たら先ほど作成した空のオブジェクトにスクリプトをアタッチしてください。


using UnityEngine;
using UnityEngine.UI;

public class CountDownTimer : MonoBehaviour
{
    public float totalTime = 10.0f; //初期値設定
    private float currentTime;// 現在の残り時間
    private bool isCounting = false;

    public Text countdownText;
    public GameObject gameOverPanel;
    public GameObject clearPanel;
    public CollectCoinScript collectCoinScript;

    private void Start()
    {
        gameOverPanel.SetActive(false);
        clearPanel.SetActive(false);
        currentTime = totalTime;
        UpdateUI();
    }

    private void Update()
    {
        if(isCounting == false){
            currentTime -= Time.deltaTime;
        }
        if (currentTime <= 0)
        {
            currentTime = 0;
            isCounting = true;
            GameOver();
        }
        else if(collectCoinScript.coinCount >=10){
            Clear();
            isCounting = true;
        }
        UpdateUI();
    }

    private void UpdateUI()
    {
        int minutes = Mathf.FloorToInt(currentTime / 60);
        int seconds = Mathf.FloorToInt(currentTime % 60);
        float milliseconds = (currentTime * 100) % 100;
        countdownText.text = string.Format("{0:00}:{1:00}.{2:00}", minutes, seconds, milliseconds);
    }

    private void GameOver()
    {
        gameOverPanel.SetActive(true);
    }

    private void Clear(){
        clearPanel.SetActive(true);
    }
}

追加でTextオブジェクト、GameOver、Clear用のパネルを2つ用意し、コンポーネントの空欄にアタッチしてください。
Panelデザインについてはとりあえず表示されればいいので、適当で大丈夫です。

ゲームを実行してみてください。
カウントダウンテキストが表示され、カウントタイマーが表示されるようになったと思います。
10秒以内に全てのコインを取ると、ClearPanelが表示されます。
10秒以内にコインを集めきれなかった場合はGameOverPanelが表示されます。

最後にクリアパネルとゲームオーバーパネルの中身を編集して今回の製作は終了となります!
次のページでは、画面遷移を行って行きたいと思います。

次へ


ページ: 1 2 3