Cou氏の徒然日記(2022)

ほのぼの日記ブログです。

Unityで遊ぼう [ブロック崩し編 その5:キーを押したらボールが出るようにする]

前回の続き。

今までは全オブジェクトの初期化をStart関数で実施していたため、ゲーム画面に遷移したらすぐにボールが出て始まっていました。

ただ、いきなり始まるのも何なので、特定のキーを押したらボールが出るようにします。

 

[BreakBlocksGame.cs]

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

public class BreakBlocksGame : MonoBehaviour
{
    public GameObject playerPrefab;
    public GameObject gameBoardPrefab;
    public GameObject ballPrefab;
    public GameObject block1Prefab;
    public GameObject block2Prefab;
    public int level = 1;

    // Start is called before the first frame update
    void Start()
    {
        // ボードを配置 //
        GameObject gameBoard = GameObject.Instantiate(gameBoardPrefab);
         // プレイヤーオブジェクトの配置 //
        GameObject player = GameObject.Instantiate(playerPrefab);
        player.transform.position = new Vector3(0, 3, -40);
        // ボールオブジェクトの配置
        // GameObject ball = GameObject.Instantiate(ballPrefab);
        // ball.transform.position = new Vector3(30, 2, -10);
        // ブロックを配置 (関数で実施) //
        ArrangeBlocks();
    }

    // Update is called once per frame
    void Update()
    {
        if (Input.GetKey(KeyCode.Space))
        {
            // ボールオブジェクトの配置
            GameObject ball = GameObject.Instantiate(ballPrefab);
            ball.transform.position = new Vector3(30, 2, -10);
        }
    }
}

Spaceキーを押したら、ボールが出るようにしてみました。

 

ということで、

よし、さっそくテスト!

 


ブロック崩し テスト6

 

Spaceをちょっと押したら、球が大噴射。

そらこうなりますわな(笑)

f:id:coublood:20210119200213p:plain

 

Update関数はフレーム単位で呼ばれる関数。

ボールを1つに制限するような制御を何もしていないから、当然えらいことになりますわ。

 

ボールオブジェクトの生成を制御するフラグと判定処理を追加。

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

public class BreakBlocksGame : MonoBehaviour
{
    public GameObject playerPrefab;
    public GameObject gameBoardPrefab;
    public GameObject ballPrefab;
    public GameObject block1Prefab;
    public GameObject block2Prefab;
    public int level = 1;

    // ボールの生成を制御するフラグ //
    private bool ballExistFlag = false;

    // 中略 //

    // Update is called once per frame
    void Update()
    {
        if (Input.GetKey(KeyCode.Space))
        {
            // Spaceキーが押されたら //
            if (!ballExistFlag){
                // ボールが存在しない場合、ボールオブジェクトの配置
                GameObject ball = GameObject.Instantiate(ballPrefab);
                ball.transform.position = new Vector3(30, 2, -10);
                ballExistFlag = true; // フラグをONに設定 //
            } 
        }
    }
}

 


ブロック崩し テスト7

 

続きます。 

coublood.hatenablog.com