using UnityEngine;
using System.Collections;
public class RandomMove : MonoBehaviour
{
[Header("Movement Settings")]
[Tooltip("移动速度")]
public float moveSpeed = 1f;
[Tooltip("移动范围半径")]
public float moveRange = 5f;
[Header("Objects to Move")]
[Tooltip("需要移动的物体数组")]
public Transform[] moveObjects;
private Vector3[] initialPositions;
private Vector3[] targetPositions;
void Start()
{
InitializeRandomRangeMode();
}
///
/// 初始化随机范围模式
///
private void InitializeRandomRangeMode()
{
if (moveObjects.Length > 0)
{
initialPositions = new Vector3[moveObjects.Length];
targetPositions = new Vector3[moveObjects.Length];
for (int i = 0; i < moveObjects.Length; i++)
{
if (moveObjects[i] != null)
{
// 记录每个物体的初始位置
initialPositions[i] = moveObjects[i].position;
// 为每个物体设置一个随机目标位置
SetNewRandomTarget(i);
}
}
}
}
void Update()
{
UpdateRandomRangeMode();
}
///
/// 更新随机范围模式下的物体移动
///
private void UpdateRandomRangeMode()
{
if (moveObjects.Length > 0 && initialPositions != null && targetPositions != null)
{
for (int i = 0; i < moveObjects.Length; i++)
{
if (moveObjects[i] != null)
{
// 向目标位置移动
moveObjects[i].position = Vector3.MoveTowards(
moveObjects[i].position,
targetPositions[i],
moveSpeed * Time.deltaTime
);
// 如果到达目标位置,设置新的目标位置
if (Vector3.Distance(moveObjects[i].position, targetPositions[i]) < 0.1f)
{
SetNewRandomTarget(i);
}
}
}
}
}
///
/// 为指定索引的物体设置新的随机目标位置
///
/// 物体索引
private void SetNewRandomTarget(int index)
{
targetPositions[index] = initialPositions[index] + new Vector3(
Random.Range(-moveRange, moveRange),
Random.Range(-moveRange, moveRange),
Random.Range(-moveRange, moveRange)
);
}
///
/// 在Scene视图中绘制移动范围的辅助线框
///
void OnDrawGizmosSelected()
{
// 绘制移动范围的线框球体
if (moveObjects.Length > 0)
{
for (int i = 0; i < moveObjects.Length; i++)
{
if (moveObjects[i] != null)
{
Gizmos.color = Color.yellow;
Vector3 center = Application.isPlaying ?
initialPositions[i] : moveObjects[i].position;
Gizmos.DrawWireSphere(center, moveRange);
}
}
}
else
{
// 如果没有指定物体,则在脚本所在位置绘制范围
Gizmos.color = Color.yellow;
Gizmos.DrawWireSphere(transform.position, moveRange);
}
}
}