unity获取所有子物体位置,再把获取到的位置重新随机分配给子物体(不含父物体)
csharp
/// <summary>
/// 给所有子物体随机分配位置
/// </summary>
void RandomLocation()
{
// 获取当前物体下的所有子物体
Transform[] childTransforms = GetComponentsInChildren<Transform>(true);
// 获取子物体位置并保存到列表
Vector3[] childPositions = new Vector3[childTransforms.Length - 1];
for (int i = 1; i < childTransforms.Length; i++)//排除自身物体
{
childPositions[i - 1] = childTransforms[i].localPosition;
}
// 随机分配位置
Shuffle(childPositions);
将位置分配给子物体
for (int i = 0; i < childPositions.Length; i++)
{
transform.GetChild(i).localPosition = childPositions[i];
}
}
/// <summary>
/// 随机分配位置
/// </summary>
void Shuffle(Vector3[] array)
{
// Fisher-Yates 洗牌算法
for (int i = array.Length - 1; i > 0; i--)
{
int j = Random.Range(0, i + 1);
Vector3 temp = array[i];
array[i] = array[j];
array[j] = temp;
}
}