Unity:如何使角色吸附物体

代码:

void Update()
    {
    
    
        if (isMove)
        {
    
    
            Debug.Log(go);
            transform.position = Vector2.MoveTowards(transform.position, go.transform.position, Time.deltaTime*DrawSpeed);
        }
    }

private void drawObject()
    {
    
    
        Collider2D[] colliders = Physics2D.OverlapCircleAll(rb.position, 10.0f, 1<<7);
        foreach(var item in colliders)
        {
    
    
            item.GetComponent<CollectionController>().isMove = true;
        }
    }

原理:
物体吸附:
人物:先以人物为圆心并给定半径,对范围内的碰撞物进行检测
然后遍历,如果是收集物则设置该物品能够移动

物品:判断物品能否移动,设置移动速度
如果收集物碰到的是玩家则销毁

知识点:

  1. 获取对象
GameObject.Find()

通过场景里面的对象名字获取
通过场景里面的对象路径获取

GameObject root = GameObject.Find("GameObject");
GameObject xxxx =  root.transform.Find("xxxx").gameObject;
xxx.SetActive(true);

无论xxx对象是否active=true都是可以直接找到对象的
关于setActive

GameObject.FindGameObjectWithTag()

通过标签寻找对象

  1. Physics2D.OverlapCircleAll
    使用示例:
Collider2D[] colliders = Physics2D.OverlapCircleAll(rb.position, 10.0f, 1<<7);

第一个参数:圆形的中心点
第二个参数:圆形的半径
第三个参数:筛选器,用于检查仅在指定层上的对象
返回值:碰撞体对象的数组
关于第三个参数的使用示例:
LayerMask.GetMask(“Default”)=1=0001
LayerMask.GetMask(“Default”,“UI”)=33=0010 0001
Default的层次序号为1(2的0次方),UI的层次序号为32(2的5次方),上面的0001和0010 0001为二进制,其中1表示激活,例如Default再0次方上激活,则Unity中的编号为0
详细解释:
Unity - LayerMask简析
unity 中的LayerMask用法

  1. foreach(var item in array){}
    遍历数组

  2. Vector2.MoveTowards
    使用示例:

transform.position = Vector2.MoveTowards(transform.position, go.transform.position, Time.deltaTime*DrawSpeed);

第一个参数:移动初始点
第二个参数:移动目标点
第三个参数:最大移动距离
上述代码中:Time.deltaTime为渲染每帧得到的时间,相乘则等于每帧移动的距离

参考资料:
Vector2.MoveTowards
Unity C#脚本控制平移动作——MoveTowards()方法的使用

猜你喜欢

转载自blog.csdn.net/m0_53438035/article/details/123719128