unityで、ランダムにボールが落ちてきて、 バーに当たったらボールは消える、 当たらなければボールは下で落ちていくっていう ランダムボール落下ゲームを作っていきたいと思います。

今回の主な学習のテーマは「プレハブ化」です。

今回のように、ボールが何回も落ちてくる、みたいな同じ動作を繰り返す時には 1つだけメインとなるテンプレートを作っておいて、 それをプログラムで毎回呼び出してあげることで 何回もリピートしてくれるので便利です。

コード

▼BallScript

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

public class BallScript : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        
    }

    //1)ボールが当たった時
    private void OnCollisionEnter2D(Collision2D collision)
    {
        Destroy(gameObject);
    }
}

▼BarScript

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

public class BarScript : MonoBehaviour
{
    //3)スピードの数値を入れる変数を用意
    public float spd;

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

    // Update is called once per frame
    void Update()
    {
        //1)左右の入力を取得(左が押されたのか、右が押されたのか)
        float myX = Input.GetAxis("Horizontal");

        //2)移動の呪文
        //transform.position += new Vector3(x,y,z);
        //transform.position += new Vector3(myX, 0, 0) * Time.deltaTime;
        transform.position += new Vector3(myX * spd, 0, 0) * Time.deltaTime; //4)スピードをかける
    }
}

▼BallPrefabScript

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

public class BallPrefabScript : MonoBehaviour
{
    //1)(インスペクターから)ボールを取得するための変数を用意
    public GameObject balls;

    // Start is called before the first frame update
    void Start()
    {
        //2)ボールを1個生成してみる
        //Instantiate(何を, 位置, 回転);
        //Instantiate(balls, transform.position, transform.rotation);

        //4)繰り返し処理
        //InvokeRepeating("実行する関数名", 開始時間, 間隔);
        InvokeRepeating("FallingBall",0f, 2f);
    }

    // Update is called once per frame
    void Update()
    {
        
    }

    //3)ボール落下の関数
    void FallingBall()
    {
        Instantiate(balls, 
            new Vector3(Random.Range(-11f,11f),transform.position.y,transform.position.z), 
            transform.rotation);
    }
}

    コメントを残す