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); } } }