| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- 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;
- }
- }
|