using UnityEngine;
public class Cube : MonoBehaviour
{
private Vector3[] cubePositions;
private GameObject[] cubes;
private void Start()
{
cubes = GameObject.FindGameObjectsWithTag("Cube");//找到带有标签的游戏对象
cubePositions = new Vector3[cubes.Length];
for (int i = 0; i < cubes.Length; i++)
{
cubePositions[i] = cubes[i].transform.position;
}
}
private void OnMouseDown()//按下鼠标
{
RandomizeCubePositions();//随机化立方体位置
}
private void RandomizeCubePositions()
{
int[] randomIndexes = GetRandomIndexes();//随机指标
for (int i = 0; i < cubes.Length; i++)
{
cubes[i].transform.position = cubePositions[randomIndexes[i]];
}
}
private int[] GetRandomIndexes()
{
int[] indexes = new int[cubes.Length];
for (int i = 0; i < indexes.Length; i++)
{
indexes[i] = i;
}
for (int i = 0; i < indexes.Length; i++)
{
int randomIndex = Random.Range(i, indexes.Length);
int temp = indexes[i];
indexes[i] = indexes[randomIndex];
indexes[randomIndex] = temp;
}
return indexes;
}
}
先记录所有物体的位置,点击后随机重新分配位置
【以下回答由 GPT 生成】
该代码是一个Unity游戏中捕捉到鼠标点击事件后,将五个物体的位置进行随机排列的功能。以下是代码的具体作用解释:
首先,该代码在游戏开始时会获取五个标有"Cube"标签的物体,并将它们的初始位置存储在一个数组中。这样就可以记录下它们初始的位置。
当鼠标按下时,会调用RandomizeCubePositions()方法。
在RandomizeCubePositions()方法中,会调用GetRandomIndexes()方法来获取一个随机的索引数组。
GetRandomIndexes()方法会创建一个与物体数量相同大小的索引数组,并将每个索引的初始值设置为对应的位置。
然后,使用经典的Fisher-Yates随机算法,对索引数组进行洗牌,以实现随机的效果。这样,所得到的索引数组将是一个随机排列。
最后,在RandomizeCubePositions()方法中,会迭代所有物体,并将它们的位置设置为原位置数组中随机索引对应的位置。
总结来说,这段代码的作用是实现在游戏中,当鼠标点击时,将五个物体的位置进行随机排列,从而改变它们在场景中的摆放位置。
【相关推荐】