summaryrefslogtreecommitdiff
path: root/Assets/Scripts/PlayerTracker.cs
diff options
context:
space:
mode:
author魏曹先生 <1992414357@qq.com>2026-01-31 13:05:30 +0800
committer魏曹先生 <1992414357@qq.com>2026-01-31 13:05:30 +0800
commitd08e5a8128025b19c34b07b5e754749a0c3b6844 (patch)
tree0c63543674532440dc2ce5b317f8005b9aa6031b /Assets/Scripts/PlayerTracker.cs
parent64e326ff1720ceb5e4bdcb9a763f62de8ffbee4f (diff)
实现相机
Diffstat (limited to 'Assets/Scripts/PlayerTracker.cs')
-rw-r--r--Assets/Scripts/PlayerTracker.cs67
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