using System.Collections; using System.Collections.Generic; using UnityEngine; /// /// 程序开始时创建水面效果 同时管理水边界点位 便于精确的计算物体距离水源的距离 /// public class WaterManager : MonoBehaviour { public Transform borderPointParent;//计算距离用的边界点 public float scale; private List allPointPos = new List(); GameObject water; // Start is called before the first frame update void Start() { borderPointParent = this.transform.Find("BorderPoins"); for (int i = 0; i < borderPointParent.childCount; i++) { allPointPos.Add(borderPointParent.GetChild(i).transform.position);//获取所有的点位 } water = ResourcesCreater.InstantiatePrefab("WaterPrefab", this.transform); water.transform.localPosition = Vector3.zero; SetScale(scale); } /// /// 改变水面大小 /// /// public void SetScale(float scale) { if (scale > 0) { if (water) water.transform.localScale = new Vector3(scale, 1, scale); else this.scale = scale; } } /// /// 获取距离湖中心的大概距离 /// /// public float GetDistanceFromWater(Vector3 worldPos) { return Vector3.Distance(worldPos, this.transform.position); } /// /// 获取距离湖边界的最近距离 /// /// public float GetNearestPointDistance(Vector3 worldPos) { //float sqrdistance = float.MaxValue; //for (int i = 0; i < allPointPos.Count; i++)//遍历寻找距离最近的点 //{ // float currentPointSqrDis = (allPointPos[i] - worldPos).sqrMagnitude; // if (currentPointSqrDis < sqrdistance) // sqrdistance = currentPointSqrDis; //} //Debug.Log(Mathf.Sqrt(sqrdistance)); //return Mathf.Sqrt(sqrdistance); Vector3 nearPointPos = ArrayHelper.Min(allPointPos.ToArray(), (p) => (p - worldPos).sqrMagnitude); float nearDis = Vector3.Distance(nearPointPos, worldPos); Debug.Log(nearDis); return nearDis; } }