ゲームの処理を追加する 私的ゲーム制作メモ 3日目

投稿者: | 2021年7月24日

ということで、Unityでブロック崩しを作る 私的ゲーム制作メモ 2日目に続いて3日目。

以下の動画を参考にブロック崩しにゲームクリアとゲームオーバーの処理を追加してみました。

今回はあまり苦戦すること無く、1時間30分程度でできました。

前回に追加で変更したファイルのソース。

GameManager.cs

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

public class GameManager : MonoBehaviour
{
    public Block[] blocks;
    public GameObject gameOverUI;
    public GameObject gameClearUI;

    private bool isGameClear = false;

    // Start is called before the first frame update
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        if(isGameClear != true)
        {
            if (DestroyAllBlocks())
            {
                // ゲームクリア
                Debug.Log("ゲームクリア");
                gameClearUI.SetActive(true);
                isGameClear = true;
            }
        }
 
    }

    //ブロック全部消えた?
    private bool DestroyAllBlocks()
    {
        foreach(Block b in blocks)
        {
            if(b != null)
            {
                return false;
            }
        }
        return true;
    }

    public void GameOver()
    {
        // ゲームオーバー
        Debug.Log("ゲームオーバー");
        gameOverUI.SetActive(true);

    }

    public void GameRetry()
    {
        SceneManager.LoadScene("game");
    }
}

Ball.cs

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

public class Ball : MonoBehaviour
{
    public float speed = 1.0f;
    private Rigidbody myRigid;
    public GameManager myManager;

    // Start is called before the first frame update
    void Start()
    {
        myRigid = this.GetComponent<Rigidbody>();
        myRigid.AddForce((transform.forward + transform.right) * speed, ForceMode.VelocityChange);
    }

    // Update is called once per frame
    void Update()
    {
        
    }
    private void OnCollisionEnter(Collision collision)
    {
        if(collision.gameObject.tag == "Finish")
        {
            Destroy(this.gameObject);
            myManager.GameOver();
        }
            
    }

}

また、流れで下記動画も見ました。