今天要讓蘋果自己隨機分布在地圖上面,生成座標不要一個一個設置,數量也可以自己決定。
所以要借用Random和迴圈來幫忙。
事實上,仍然要給Instantiate一個座標,只是座標的參數使用隨機變數。
//宣告
public static float Range(float minInclusive, float maxInclusive);
//實際用法
Random.Range(x1, x2) //直接取代 float 浮點數的地方
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class InstantiateApple : MonoBehaviour
{
[Header("物件/父物件")]
//宣告要生成的物件
public GameObject apple;
//宣告生成物件的父物件
public Transform appleClass;
[Space(10)]
[Header("蘋果數量/隨機生成區域")]
public int AmountOfApple;
public float x1, x2, y1, y2; //隨機生成座標的range
void Start()
{
SpawnApple();
}
private void SpawnApple()
{ //用迴圈反覆執行
for (int i = AmountOfApple; i >= 0; i--)
Instantiate(apple, new Vector3(Random.Range(x1, x2), Random.Range(y1, y2),0.0f), Quaternion.identity,appleClass);
//立即生成物件(物件,位置,角度,父物件);
}
}
小補充:unity引擎內變數整理的方法
[Header("")] //可以在變數間寫上標題
[Space()] //可以在變數之間留空格 //標題不能
改好腳本之後輸入要生成的範圍座標區間。
蘋果數量15個,範圍隨便抓兩個點,執行後蘋果會在這兩個點構成的方形中隨機生成。
也可以直接抓到大地圖,如果蘋果卡在牆壁或障礙物,可以利用碰撞偵測清除。
不過這裡有個小問題
蘋果會比決定的15個多1個,地圖上總共有16個蘋果,多原本的蘋果物件。
解決上述問題的方法就是把蘋果設置呈預製體。
預製體可以不用一開始就生成物件,但是檔案內容包含物件所需要的東西,直到程式使用Instantiate()將預製體實例化,才會將該物件生成於場景中。
也就是說,在Instantiate()之前,蘋果都是不存在場景中的。
很適合拿來做子彈,可以經歷事件才生成,碰撞後破壞。
1.製作預製體,將物件拖曳至資料夾Asset(可以自訂)
2.在階層中會看到藍色物件,表示為預製體物件
3.導入腳本
可以將階層中的預製體刪掉,然後從資料夾Asset中將預製體物件拖曳至腳本物件
4.執行結果
場景中已無蘋果
隨機生成數量正確的蘋果