[Unity]初心者向けゾンビゲーム開発5/6 ゾンビリスポーンとスコア

前回でゾンビのアニメーションが完成しました。
これでゲームとして出来上がってきましたが、ゾンビを一度倒して終わりだと簡単過ぎるので今回はゾンビをリスポーンさせ、さらにリスポーンする毎にゾンビのスピードを上げてゲームの難易度を難しくしていきます。
※リスポーン(復活という意味)

さらにスコアも追加して目標を立てられるようにしましょう。


ステージ&操作キャラ

銃から弾丸を発射させる

ゾンビのアニメーション

ゾンビの当たり判定

スコア表示&ゾンビのリスポーン

ゲームオーバー画面


ヒエラルキーの「+」マークから「3Dオブジェクト」→「キューブ」とクリックしていきます。

さらにヒエラルキーの「+」マークから「空のオブジェクトを作成」をクリックします。
これで作られた「gameobject」の名前は「リスポーン地点」に変更します(名前はなんでも良いのでリスポーンする場所とわかるものにしてください)。

さらに先ほど作ったキューブ(画面上では「Cube」)を右クリックして(画像1番目の赤丸)
「複製」をクリックします(画像2番目の赤丸)

すると同じオブジェクトが作られるので複製をあと3回繰り返し、「Cube」を合計5つにします。
そしてそれらを左クリック長押しで「リスポーン地点」の中に入れてください。

できたらこの5つのCubeをそれぞれマップの上空から見て、真ん中、右上、右下、左上、左下に移動します。
これらをゾンビのリスポーン地点として、ゾンビがやられると、
これらのどれかの場所からランダムでリスポーンさせます。

画像では全ての「cube」の高さを15にしています。つまり「位置」のYの数値を15にしているということですね。
あとは画像のような形になれば大丈夫です。

出来たらCubeをクリックして(画像1番目の赤丸)、右側の「Mesh Renderer」のチェックを外します(画像2番目の赤丸)

そして「Box collider」「トリガーにする」にチェックを入れます(画像3番目の赤丸)
これを複製した全ての「Cube」で行ってください。

できましたら前回作成したスクリプト「zombie」を開き、以下のコードをコピーして丸ごと上書きしてください。

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

public class zombe : MonoBehaviour
{

    //アニメーション
    Animator animator;
    //プレイヤー
    public GameObject Playe;
    //スピード
    public float Speed;
    public float acceleration;
    bool Stop = false;
    //攻撃判定
    private float attac;
    //リスポーン
    public int Position = 1;
    public GameObject R1;
    public GameObject R2;
    public GameObject R3;
    public GameObject R4;
    public GameObject R5;
    //スコア
    public Score S_score;
    public int A_score = 100;
    bool score = false;
    // Start is called before the first frame update
    void Start()
    {
        animator = GetComponent<Animator>();
        S_score = GameObject.Find("Text").GetComponent<Score>();
    }

    // Update is called once per frame
    void Update()
    {
        Quaternion lookRotation = Quaternion.LookRotation(Playe.transform.position - transform.position, Vector3.up);

        lookRotation.z = 0;
        lookRotation.x = 0;

        transform.rotation = Quaternion.Lerp(transform.rotation, lookRotation, 0.1f);

        transform.position += transform.forward * Speed * Time.deltaTime;
        if (Stop == true)
        {
            Speed = 0;
        }
        else
        {
            Speed = 3+ acceleration;
        }
        attac = Vector3.Distance(transform.position, Playe.transform.position);

        if (attac < 5f)
        {
            animator.SetBool("Attac", true);
        }
        else
        {
            animator.SetBool("Attac", false);
        }
    }

    void OnTriggerEnter(Collider col)
    {
        if (col.tag == "bullet")
        {
            animator.SetBool("FallingBack", true);
            Stop = true;
            Invoke("Run", 3f);
            if (score == false)
            {
                S_score.AddScore(A_score);
                score = true;
                acceleration += 1;
            }
        }
    }
    void Run()
    {
        Position = Random.Range(1, 5);
        animator.SetBool("FallingBack", false);
        Stop = false;
        score = false;
        if (Position == 1)
        {
            transform.position = R1.transform.position;
        }
        if (Position == 2)
        {
            transform.position = R2.transform.position;
        }
        if (Position == 3)
        {
            transform.position = R3.transform.position;
        }
        if (Position == 4)
        {
            transform.position = R4.transform.position;
        }
        if (Position == 5)
        {
            transform.position = R5.transform.position;
        }
    }
}

今の段階だとこのコードはエラーになると思いますが、一旦そのままで大丈夫です!


スコア

次にスコア機能を作っていきます。

ヒエラルキーの「+」マークから「UI」をクリックし(画像1番目の赤丸)、その中から一番下の「古い機能」→「テキスト」と進んでいきます(画像2番目の赤丸)

すると「Canvas」というものがヒエラルキーで作られるので、それをクリックします(画像1番目の赤丸)

そして右側にある「Canvas Scaier」という項目から「UIスケールモード」の欄を「画像サイズに拡大」にします(画像2番目の赤丸)
この設定にしておかないと、プレイする画面の大きさによってUIの大きさや位置が変化してしまいます。

次に「Canvas」の中にある「Text」をクリックします(画像1番目の赤丸)
これは名前の通り画面に表示される文字なので、右上の数値をいじることで位置と大きさを変更させることができます。
ここの数値をイジって文字をゲーム画面の左上に表示させます(画像2番目の赤丸)

さらに「Text」という項目から表示させる文字を変更できるのでここを「Score」にします(画像2番目の赤丸)
見た目を少し良くするために「フォントスタイル」「斜体」にしておきましょう(画像4番目の赤丸)

さらに「色」という項目から文字の色を変更できるので白色にします(画像5番目の赤丸)

そしてプロジェクトの「+」マークから新しいスクリプトを作成し、名前を「Score」にします。

コードは以下の内容をコピー&ペーストしてください。

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

public class Score : MonoBehaviour
{
    public Text T_Score;
    public int score;
    // Start is called before the first frame update
    void Start()
    {

    }

    // Update is called once per frame
    void Update()
    {
        T_Score.text = "Score:" + score;
    }
    public void AddScore(int addscore)
    {
        score += addscore;
    }
}

スクリプトが完成したら左クリック長押しでヒエラルキーの「Text」に持っていきます(画像1番目の赤丸)

そして「Text」をクリックして右側を見ると「Score(スクリプト)」が追加されているので、そこにある「T_Score」の項目に「ヒエラルキー」「Text」を左クリック長押しで入れます(画像2番目の赤丸)

先ほどまでZombeのスクリプトにはエラーがありましたが、
これでエラーがなくなると思います。

そうしたらヒエラルキーの「Zombei」をクリックし(画像1番目の赤丸)、右側のZombe(スクリプト)を確認します。
するとR1、R2、R3、R4、R5という項目が追加されているのでさっき作ったCubeをそれぞれ左クリック長押しで入れていきます(画像2番目の赤丸)

これでゾンビがやられた時にこの5つのCubeのどれかからゾンビがリスポーンするようになります。

再び「Zombie」をクリックして(画像1番目の赤丸)、Zombieに入れているスクリプト「Zombe」内にある「S_score」にヒエラルキーの「Text」を左クリック長押しで読み込みます(画像2番目の赤丸)

これでOKです。ゲームを実行してゾンビに弾丸を当てる度に左上のScoreが+100され、
ゾンビが速度を上げてリスポーンすればOKです。

次の記事が最後です!


前の記事                                           次の記事

ゾンビの当たり判定                                 ゲームオーバー画面

TOPに戻る

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です