using System.Collections; using System.Collections.Generic; using UnityEngine; public class GetKuangparent : MonoBehaviour { public GameObject myCamera; // 参考相机 public GameObject ding; public List objectsToManage; // 需要管理的物体列表 public float minDistance; // 最小显示距离 public float maxDistance; // 最大显示距离 public float fanWei; void Start() { Debug.Log("ding.transform.childCount:" + ding.transform.childCount); for (int i = 0; i < ding.transform.childCount; i++) { objectsToManage.Add(ding.transform.GetChild(i).gameObject); } } void Update() { if (myCamera != null) { foreach (GameObject obj in objectsToManage) { CheckDistance(obj); } } } // void CheckDistance(GameObject obj) // { // Vector3 cameraPosition = myCamera.transform.position; // Vector3 myPosition = obj.transform.position; // // 设置默认范围 // float rangeX = fanWei; // float rangeZ = fanWei; // // 如果物体名称是 BigPlaneManager,增加检查范围 // if (obj.name == "BigPlaneManager") // { // rangeX = fanWei*3; // 增加 X 方向的范围 // rangeZ = fanWei*3; // 增加 Z 方向的范围 // } // bool isWithinRange = Mathf.Abs(myPosition.x - cameraPosition.x) <= rangeX && Mathf.Abs(myPosition.z - cameraPosition.z) <= rangeZ; // // 只在范围内时激活物体 // obj.SetActive(isWithinRange); // } void CheckDistance(GameObject obj) { Vector3 cameraPosition = myCamera.transform.position; Vector3 myPosition = obj.transform.position; float distance = Vector3.Distance(cameraPosition, myPosition); // 同时设置最小和最大距离的特殊处理 float effectiveMin = minDistance; float effectiveMax = maxDistance; if (obj.name == "BigPlaneManager") { effectiveMin = 0f; // 最小距离设为0 } bool inRange = distance >= effectiveMin && distance <= effectiveMax; if (obj != null && obj.activeSelf != inRange) { obj.SetActive(inRange); if(inRange) { StartCoroutine(GetData.Instance.PostRequest()); } } } }