代码:
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;
}
}
原理:
物体吸附:
人物:先以人物为圆心并给定半径,对范围内的碰撞物进行检测
然后遍历,如果是收集物则设置该物品能够移动
物品:判断物品能否移动,设置移动速度
如果收集物碰到的是玩家则销毁
知识点:
- 获取对象
GameObject.Find()
通过场景里面的对象名字获取
通过场景里面的对象路径获取
GameObject root = GameObject.Find("GameObject");
GameObject xxxx = root.transform.Find("xxxx").gameObject;
xxx.SetActive(true);
无论xxx对象是否active=true都是可以直接找到对象的
关于setActive
GameObject.FindGameObjectWithTag()
通过标签寻找对象
- 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用法
-
foreach(var item in array){}
遍历数组 -
Vector2.MoveTowards
使用示例:
transform.position = Vector2.MoveTowards(transform.position, go.transform.position, Time.deltaTime*DrawSpeed);
第一个参数:移动初始点
第二个参数:移动目标点
第三个参数:最大移动距离
上述代码中:Time.deltaTime为渲染每帧得到的时间,相乘则等于每帧移动的距离
参考资料:
Vector2.MoveTowards
Unity C#脚本控制平移动作——MoveTowards()方法的使用