Unity二维平面上物体的移动(十八)

本文介绍了一个圆形机器人如何通过扫描环境中所有物体并逐一访问它们的方法。机器人能够识别物体数量及名称,并按顺序到达每个物体前。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

上一节中实现了圆形机器人到达指定目标物体时,和目标物体打个招呼。实际情况是一个环境中会有很多物体,在出发前做一次整体扫描,了解环境中的整体物体数量和物体名称。我们随机做一下巡检,让物体在出发后按照扫描出来的顺序进行分析,逐一到达各个物体前。
下图圆形机器人位于环境中间偏左的位置。
在这里插入图片描述
从左侧列表中查看有14个物体是有效的,除去圆形机器人本身,需要扫描13个物体,并逐一到达他们跟前。
上代码菜,
public class AutoKnowObject : MonoBehaviour
{
GameObject my;
GameObject will;
GameObject[] GameObjectAll;
// Start is called before the first frame update
float ObjectsNum = 0;//全物体数量
float goalNum = 1;//目标物体数量
void Start()
{

    //找出所有物体对象
    GameObjectAll = AutoKnowObjectsAll();
    //Debug.Log(MyObjectName().name);

}

// Update is called once per frame
void Update()
{
//移至各个物体处
  //  foreach (GameObject go in GameObjectAll)
  //{
        //Debug.Log("GameObject name is " + go.name);
        // Debug.Log(go.name + "'s position is " + AutoKnowObjectsPosion(go));
        // will = GameObject.Find("Square");
    my = MyObjectName();
    Debug.Log("myObject name is " + my.name + " and my position is " + AutoKnowObjectsPosion(my));

    //will = go;
    if ((int)ObjectsNum < AutoKnowObjectsNum())
    {
        will = GameObjectAll[(int)ObjectsNum];
    Debug.Log("willObject name is " + will.name +" and its position is " + AutoKnowObjectsPosion(will));
   
        if (my.name != will.name)
        {
            Debug.Log("goalObject name is " + will.name + " and " + will.name + " 's position is " + AutoKnowObjectsPosion(will));
            Debug.Log("Now goal numbers is " + goalNum + "个");

            AutoMoveToObjects(my, (float)0.5, will);
            if (A2B(my, will).sqrMagnitude < 1)//到达目标物位置处
            {
                Debug.Log(my.name + " comes to " + will.name + " 's position.");

                ObjectsNum = ObjectsNum + 1;
                goalNum += 1;
                Debug.Log("Now new goal numbers is " + goalNum + "个");

            }
        }
        else
        {

            ObjectsNum = ObjectsNum + 1;

        }
    }
    else {
        Debug.Log("myObject name is " + my.name + " and my search is finished. " );

    }

    // }
}

//4-1.寻找所有物体
GameObject[] AutoKnowObjectsAll()
{
// float ObjectsNum = 0;
//寻找区域内的对象
GameObject[] bodies = FindObjectsOfType(typeof(GameObject)) as GameObject[];
return bodies;
}
//4-2 寻找所有物体数量
int AutoKnowObjectsNum()
{
// float ObjectsNum = 0;
//寻找区域内的对象
GameObject[] bodies = FindObjectsOfType(typeof(GameObject)) as GameObject[];
return bodies.Length;
}

}
机器人逐一到达各物体处,
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

完成巡逻任务如下图所示。
在这里插入图片描述
简单总结一下,本节是对圆形机器人巡检的情况做了实现。各个物体暂时均不具备刚体属性,如果各物体具备了刚体属性,同时中间如果设置障碍物的话,则不能直接走直线到达障碍物跟前,需要寻路算法。在寻路算法的基础上,可以产生最优路径解。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值