にしのクエスト2

情報処理技術者試験と資格学校講師の日常

20221224103753

Unityで学ぶプログラミング 箱を積み上げるゲーム(5)積み上がっていく

(注意)
この連載は、ある程度ゲームを作ったことある人の
ためのものです。「アタッチ」とか「C#スクリプト
の作成」とか「カメラアングルの変更」とか、その
レベルの話は
省略しています。よろしくお願いしま
す。
  

 

www.nsnq.tech

  
前回の続きです。

前回はブロックが床に落ちるたびに、一個ずつ出てくる
ようになったのですが、ブロックが積み重なるともうブ
ロックは出てこなくなります。これを改善したいと思い
ます。

(1)ブロックをPrefabにしましょう
GeneのオブジェクトにPrefabを突っ込みます。
下のブロックは消してしまいましょう。


(2)フラグを返す対象を増やす
今のところ、床に接触した時だけflagを返しているので
すが。ブロックやそのコピーにも適応させましょう。

    
private void OnCollisionEnter(Collision collision)
    {
        if (collision.gameObject.name=="Field") {
            GC.flag = 0;                   
        }
        if (collision.gameObject.name=="Block") {
            GC.flag = 0;
        }
        if (collision.gameObject.name == "Block(Clone)")
        {
            GC.flag = 0;
        }
    }


ただ、これだとまた無秩序に置けるんですよね・・・
床に落ちたらゲームオーバーにしたいんですけどね。

(3)射出するGeneが左右に動くようにしましょう。
GeneについてるGame CのUpdateに次のプログラムを
追加します。
 //インスタンス用
    public GameObject blk;

    //スコア
    public int Score = 0;

    //フラグ
    public int flag = 0;

    //スタート位置
    Vector3 stPos;

    // Start is called before the first frame update
    void Start()
    {
        //スタート位置を取得
        stPos = transform.position;
    }

    // Update is called once per frame
    void Update()
    {
        if (Input.GetKey(KeyCode.Space)&&flag==0)
        {

            //オブジェクトを生成する
            Instantiate(blk, new Vector3(transform.position.x, transform.position.y - 1, transform.position.z), Quaternion.identity);

            //フラグを立てて
            flag = 1;

            //スコアを加算する
            Score += 1;
        }

        //射出の左右の動き
        transform.position = new Vector3(Mathf.Sin(Time.time) * 4.0f + stPos.x, stPos.y, stPos.z);

    }


あれれ?ブロックが積み上がると射出が引っかかる・・・

というわけで、様々な問題を抱えながら次回です!

質問があればDMやらコメントをお願いします。

それではよきプログラミングライフを!
またね。