Unity:如何使角色吸附物体

本文介绍了Unity中物体吸附的实现原理,包括角色以自身为中心检测周围收集物并使其可移动,以及收集物根据设定移动速度靠近角色的代码实现。涉及到的关键技术包括GameObject的查找、OverlapCircleAll方法的使用以及Vector2.MoveTowards函数的应用。此外,还讲解了如何通过标签和LayerMask筛选特定对象。
该文章已生成可运行项目,

代码:

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()方法的使用

本文章已经生成可运行项目
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值