ということで、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();
}
}
}
また、流れで下記動画も見ました。