using UnityEngine; using System.Collections.Generic; public class PlayerTracker : MonoBehaviour { public Transform centerPos; [Header("玩家追踪设置")] [SerializeField] private List playerTransforms = new(); [SerializeField] private float maxDistance; public float Distance => maxDistance; [Header("距离限制")] [Tooltip("最远玩家的距离")] public float MaxDistance = 10f; [ContextMenu("收集玩家")] public void CollectPlayers() { playerTransforms.Clear(); GameObject[] playerObjects = GameObject.FindGameObjectsWithTag("Player"); foreach (GameObject player in playerObjects) { Transform playerTransform = player.transform; if (playerTransform != null && !playerTransforms.Contains(playerTransform)) { playerTransforms.Add(playerTransform); } } } private void Update() { if (playerTransforms.Count == 0) return; Vector3 center = Vector3.zero; foreach (Transform player in playerTransforms) { if (player != null) { center += player.position; } } center /= playerTransforms.Count; centerPos.position = center; maxDistance = 0f; foreach (Transform player in playerTransforms) { if (player != null) { float distance = Vector3.Distance(center, player.position); if (distance > maxDistance) { maxDistance = distance; } } } if (maxDistance > MaxDistance) maxDistance = MaxDistance; } }