diff options
| author | 魏曹先生 <1992414357@qq.com> | 2026-01-31 13:05:30 +0800 |
|---|---|---|
| committer | 魏曹先生 <1992414357@qq.com> | 2026-01-31 13:05:30 +0800 |
| commit | d08e5a8128025b19c34b07b5e754749a0c3b6844 (patch) | |
| tree | 0c63543674532440dc2ce5b317f8005b9aa6031b /Assets/Scripts/PlayerTracker.cs | |
| parent | 64e326ff1720ceb5e4bdcb9a763f62de8ffbee4f (diff) | |
实现相机
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 |
