上一节中实现了圆形机器人认识周围环境中物体的数量和名称。圆形机器人应该具备巡逻能力,了解环境中物体所在位置后,逐个到达物体前面进行巡逻。在环境中需要从近到远巡逻。到达目标物体时,和目标物体打个招呼。这就需要机器人具备自动感知目标物并且能够到达目标物的能力。
我们以圆形机器人感知大木头为例,在public class AutoKnowObject : MonoBehaviour增加如下内容:
GameObject go;
GameObject will;
void Update()
{
go = this.gameObject;
will = GameObject.Find(“wood_big”);
Debug.Log("Myname is " + go.name);
Debug.Log("goalname is " + will.name);
Debug.Log("go to will is " + A2B(go, will));
AutoMoveToObjects(go, A2B(will, go), (float)0.1, will);
}
//6.两点之间直线矢量
Vector2 A2B(GameObject a, GameObject b)
{
Vector2 a2b;
a2b = (Vector2)a.transform.position - (Vector2)b.transform.position;
return a2b;
}
//7.向目标物移动
void AutoMoveToObjects(GameObject begin,Vector2 a2b,float speed,GameObject goal)
{
GameObject my = begin;
// float num = 1;
my.transform.Translate(a2b*speed*Time.deltaTime,Space.World);
Vector2 dis = A2B(my, goal);
if( dis.sqrMagnitude < 1)
{
my.transform.Translate(a2b*0);
// num = 0;
}
}
初始状态下
圆形机器人逐步向大木头移动
越来越近
逐步靠近
到达目标物大木头处。速度减为0.