图示:
实现:
///<summary> ///雷达 ///</summary> public class Radar : MonoBehaviour { //找扫描范围 public float scanDistance; //同伴标示 public string companionTag = "Companion"; public GameObject[] GetCompanion() { //查找扫描范围内所有的同伴并返回 var arr = GameObject.FindGameObjectsWithTag(companionTag); return Array.FindAll(arr, p => Vector3.Distance(p.transform.position, transform.position) < scanDistance); } }
///<summary> ///聚集 ///</summary> public class SteeringForCollect : Steering { //雷达 private Radar radar; public float nearDistance; public override void Init() { base.Init(); radar = GetComponent<Radar>(); } public override Vector3 ComputerFinalForce() { var center = Vector3.zero; var companions = radar.GetCompanion(); //算出范围内所有同伴相对中心点 for (int i = 0; i < companions.Length; i++) { center += companions[i].transform.position; } center /= companions.Length; if (Vector3.Distance(center, transform.position) > nearDistance) { exceptForce = (center - transform.position).normalized * speed; return (exceptForce - vehicle.currentForce) * weight; } return Vector3.zero; } }
