blob: b5f95e30597b372cb63569278ab05c313d477a9a (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
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;
}
}
|