unity物体列表随机遍历
时间: 2023-05-12 22:04:55 浏览: 141
您好,以下是一个随机遍历Unity物体列表的示例代码:
```
using System.Collections.Generic;
using UnityEngine;
public class ObjectListRandomizer : MonoBehaviour
{
public List<GameObject> objectList;
private void Start()
{
ShuffleList(objectList);
foreach (GameObject obj in objectList)
{
Debug.Log(obj.name);
}
}
private void ShuffleList<T>(List<T> list)
{
for (int i = 0; i < list.Count; i++)
{
T temp = list[i];
int randomIndex = Random.Range(i, list.Count);
list[i] = list[randomIndex];
list[randomIndex] = temp;
}
}
}
```
这个脚本将会随机遍历一个包含GameObject的列表,并且输出每个GameObject的名称。
相关问题
Unity物体数组随机互换位置
可以使用C#中的Random类和交换数组元素的方法来实现Unity物体数组的随机互换位置。以下是一个简单的示例代码:
```csharp
using UnityEngine;
public class ObjectRandomizer : MonoBehaviour
{
public GameObject[] objectsToRandomize;
void Start()
{
int objectCount = objectsToRandomize.Length;
// 遍历数组,将每个元素随机与另一个元素交换位置
for (int i = 0; i < objectCount; i++)
{
int randomIndex = Random.Range(i, objectCount);
// 交换两个元素的位置
GameObject temp = objectsToRandomize[i];
objectsToRandomize[i] = objectsToRandomize[randomIndex];
objectsToRandomize[randomIndex] = temp;
}
}
}
```
上述代码首先获取物体数组的长度,然后遍历数组,每次将当前元素随机与另一个元素交换位置。在交换位置时,我们使用一个临时变量来暂存一个元素的值,以便于交换。
将以上代码作为脚本添加到Unity场景中的一个空物体上,然后将需要随机互换位置的物体添加到objectsToRandomize数组中即可。
unity物体自身随机旋转
可以使用C#脚本来实现Unity物体自身随机旋转。以下是示例代码:
```csharp
using UnityEngine;
public class RandomRotation : MonoBehaviour
{
public float rotationSpeed = 10.0f; // 旋转速度
// Start is called before the first frame update
void Start()
{
// 随机生成初始旋转角度
transform.rotation = Random.rotation;
}
// Update is called once per frame
void Update()
{
// 在物体自身坐标系下,随机生成旋转轴向量和旋转角度
Vector3 rotationAxis = Random.insideUnitSphere;
float rotationAngle = Random.Range(-1.0f, 1.0f) * rotationSpeed * Time.deltaTime;
// 将旋转轴向量转换到世界坐标系下
rotationAxis = transform.TransformDirection(rotationAxis);
// 绕旋转轴旋转
transform.Rotate(rotationAxis, rotationAngle);
}
}
```
在上述代码中,`Start()`方法会在物体开始运行时被调用,用于随机生成初始旋转角度。`Update()`方法会在每一帧被调用,用于随机生成旋转轴向量和旋转角度,并将物体绕该轴旋转。`Random.insideUnitSphere`用于生成单位球内的随机向量,`Random.Range(-1.0f, 1.0f)`用于生成-1到1之间的随机数,`Time.deltaTime`用于控制旋转速度。