图示:
实现:
///<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;
}
}