using System.Collections; using System.Collections.Generic; using UnityEngine; /* 记录器-保存和记录树的区域 */ public class TreeAreaRecorder : MonoBehaviour { bool inited = false; public TreeAreaRecorder InitAndGet() { if (inited) return this; areaInfos = new AreaInfo[this.transform.childCount]; int i = 0; foreach (Transform child in this.transform) { //顺便记录子物体关键信息 AreaInfo areaInfo = new AreaInfo(); areaInfo.transform = child.transform; areaInfo.position = areaInfo.transform.position; Vector3 lossyScale = child.transform.lossyScale; areaInfo.radius = Mathf.Max(Mathf.Abs(lossyScale.x), Mathf.Abs(lossyScale.z)) / 2; areaInfo.height = lossyScale.y / 2; areaInfos[i] = areaInfo; i++; } return this; } public class AreaInfo { public Transform transform; public Vector3 position; public float radius; public float height; public float teamCompareValue; public float distanceInHorizontal(Vector3 pos) { return Mathf.Sqrt(Mathf.Pow(position.x - pos.x, 2) + Mathf.Pow(position.z - pos.z, 2)); } public object occupy; //被占用(例如鸟着落) } private AreaInfo[] areaInfos; public int areaInfoLen { get { return areaInfos.Length; } } public AreaInfo getValidAreaInfo(int childIndex) { return areaInfos[childIndex]; } public AreaInfo[] copyAreaInfos(int len) { AreaInfo[] list = new AreaInfo[len]; System.Array.Copy(areaInfos, list, len); return list; } public AreaInfo[] getAreaInfos() { return areaInfos; } }