iT邦幫忙

2025 iThome 鐵人賽

DAY 8
0

好的今天來到了第8天,如題,今天我們來產生方塊
先創建一個empty叫做CubeSpawner,然後給它加一個叫做SpawnCube的Script
接著在裡面貼上下面這些程式碼

using UnityEngine;
using System.Collections.Generic;

public class Spawn_Cube : MonoBehaviour
{
    // Start is called once before the first execution of Update after the MonoBehaviour is created
    public GameObject []prefab_list;
    private List<GameObject> bag = new List<GameObject>();
    void Start()
    {
        SpawnNext();
    }
    void Update()
    {
        
        
    }
    void SpawnNext()
    {
        if (bag.Count == 0)
        {
            shuffle(bag);
        }
        GameObject next_cube = bag[0];
        Instantiate(next_cube,this.transform.position, Quaternion.identity);
        bag.RemoveAt(0);

        
    }
    void shuffle(List<GameObject> bag) 
    {
        List<int> put_order= new List<int>{0,1,2,3,4,5,6};
        //
        for(int i = 0; i < prefab_list.Length; i++)
        {
            int r = Random.Range(i, prefab_list.Length);
            (put_order[r], put_order[i]) = (put_order[i], put_order[r]);

        }
        for(int i = 0; i < put_order.Count; i++)
        {
            int ID = put_order[i];
            bag.Add(prefab_list[ID]);
        }
    }
    
}

然後回到Unity把之前做好的Prefab丟到prefab_list裡面
不出意外的話應該就可以看到它隨機產生一個物件正在下落了。

我們先來講程式架構,俄羅斯方塊為了避免有時候很衰拿到的方塊形狀都不好,所以在產生方塊的時候是用一種叫做7-bag的方法,它會先把7種形狀以隨機順序丟到一個清單裡面,然後每次生成的時候再抓第一個。
當清單空了的時候再重新以隨機順序的物件裝滿。

理解了之後我們就直接來看程式吧。

public GameObject []prefab_list;
private List<GameObject> bag = new List<GameObject>();

prefab_list是一個存了所有prefab的清單,之後要生成的時候就會從這邊抓物件出來。
bag也是一個清單,它是用來存我們打亂的物件的清單。

SpawnNext函式會判斷如果bag是空的,就呼叫shuffle函式來讓bag重新裝滿物件,否則就一直拿bag中的第一個(list的順序從0開始)出來生成。
裡面有一些我們沒看過的程式,我們一個個來看。
首先是Instantiate(next_cube,this.transform.position, Quaternion.identity);
這個會創建出一個next_cube這個物件的複製,第二個代表它的位置,第三個則是旋轉。

再來是bag.RemoveAt(0);
就是很單純的把bag的第0個給Remove而已。

接著看到shuffle函式,put_order是要放置的順序,我們在第一個for迴圈裏面把它打亂。
接著再第2個for迴圈我們再一個個把物件依照順序丟進bag裡面。

(我決定以後程式解釋直接用註解好了,不然再後面解釋好像效率有點低又麻煩:()


上一篇
Day-07 做出各種不同樣式的方塊
系列文
30天做中學unity遊戲設計8
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言