在 4 个位置实例化 4 个预制件,打乱顺序,Unity Engine C#
Instantiate 4 prefabs at 4 locations, shuffled, Unity Engine C#
我拥有的是在 4 个位置实例化的 4 个平台。我想要的是每次都对平台进行洗牌。到目前为止我的代码:
using UnityEngine;
public class PlatformCreator : MonoBehaviour {
public GameObject[] platforms;
public Transform[] points;
private void Start()
{
for (int i = 0; i < points.Length; i++)
{
Instantiate(platforms[i], points[i].position, Quaternion.identity);
}
}
}
例如,平台现在总是以相同的顺序生成 - 粉色、黄色、蓝色、紫色
我希望它们每次都以不同的顺序生成,例如 - 黄色、蓝色、紫色、粉红色。我试过用 random.range 创建一个 int 索引,但我弄乱了一些东西
您可以将点添加到列表而不是数组,这将帮助您 "shuffle" 值。从 This SO post 中获取随机播放功能,你可以这样做:
public class PlatformCreator : MonoBehaviour {
public GameObject[] platforms;
public List<Transform> points;
private Random rng;
public void Shuffle<T>(this IList<T> list)
{
int n = list.Count;
while (n > 1) {
n--;
int k = rng.Next(n + 1);
T value = list[k];
list[k] = list[n];
list[n] = value;
}
}
private void Start()
{
rng = new Random();
points.Shuffle();
for (int i = 0; i < points.Count; i++)
{
Instantiate(platforms[i], points[i].position, Quaternion.identity);
}
}
}
我拥有的是在 4 个位置实例化的 4 个平台。我想要的是每次都对平台进行洗牌。到目前为止我的代码:
using UnityEngine;
public class PlatformCreator : MonoBehaviour {
public GameObject[] platforms;
public Transform[] points;
private void Start()
{
for (int i = 0; i < points.Length; i++)
{
Instantiate(platforms[i], points[i].position, Quaternion.identity);
}
}
}
例如,平台现在总是以相同的顺序生成 - 粉色、黄色、蓝色、紫色
我希望它们每次都以不同的顺序生成,例如 - 黄色、蓝色、紫色、粉红色。我试过用 random.range 创建一个 int 索引,但我弄乱了一些东西
您可以将点添加到列表而不是数组,这将帮助您 "shuffle" 值。从 This SO post 中获取随机播放功能,你可以这样做:
public class PlatformCreator : MonoBehaviour {
public GameObject[] platforms;
public List<Transform> points;
private Random rng;
public void Shuffle<T>(this IList<T> list)
{
int n = list.Count;
while (n > 1) {
n--;
int k = rng.Next(n + 1);
T value = list[k];
list[k] = list[n];
list[n] = value;
}
}
private void Start()
{
rng = new Random();
points.Shuffle();
for (int i = 0; i < points.Count; i++)
{
Instantiate(platforms[i], points[i].position, Quaternion.identity);
}
}
}