diff options
Diffstat (limited to 'Assets/Scripts/PlayerTracker.cs')
| -rw-r--r-- | Assets/Scripts/PlayerTracker.cs | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/Assets/Scripts/PlayerTracker.cs b/Assets/Scripts/PlayerTracker.cs new file mode 100644 index 0000000..b5f95e3 --- /dev/null +++ b/Assets/Scripts/PlayerTracker.cs @@ -0,0 +1,67 @@ +using UnityEngine; +using System.Collections.Generic; + +public class PlayerTracker : MonoBehaviour +{ + public Transform centerPos; + + [Header("玩家追踪设置")] + [SerializeField] private List<Transform> 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; + } +}
\ No newline at end of file |
