通过设置世界坐标无法触发PolygonCollider2D碰撞

现在场景是这样,我有在Canvas上有两个节点,part1,和part2,part1带有BoxCollider2D,RigidBody2D Type为Dynamic但是Gravity Scale设置为0来保证不会下坠,part2带有PolygonCollider和RigidBody2D Type为Kinematic
碰撞
我写了一段代码通过每帧设置世界坐标的方式来使part2跟随鼠标移动,以下是代码:
import { Input } from ‘cc’;

import { PolygonCollider2D } from ‘cc’;

import { Contact2DType } from ‘cc’;

import { Vec3 } from ‘cc’;

import { input } from ‘cc’;

import { _decorator, Component, Node,Collider2D,IPhysics2DContact } from ‘cc’;

const { ccclass, property } = _decorator;

@ccclass(‘MouseFollowTest’)

export class MouseFollowTest extends Component {

start() {

    input.on(Input.EventType.MOUSE_MOVE,(event)=>{

        let pos = event.getUILocation();

        this.node.setWorldPosition(new Vec3(pos.x,pos.y,0))

    })

    let collider:PolygonCollider2D =this.getComponent<PolygonCollider2D>(PolygonCollider2D);

    collider.on(Contact2DType.BEGIN_CONTACT,this.onBeginContact,this);

}

update(deltaTime: number) {

   

}

onBeginContact (selfCollider: Collider2D, otherCollider: Collider2D, contact: IPhysics2DContact | null) {

    // 只在两个碰撞体开始接触时被调用一次

    console.log('onBeginContact selfCollider:',selfCollider);

    console.log("onBeginContact otherCollider:",otherCollider);

}

}
实际测试发现.无论part2如何移动都不会触发onBeginContact
但是如果我将初始速度设置为(-1,0)这样part2会自动向左移动,这样碰到part1时是能触发onBeginContact 的
这个碰撞是有什么说法吗?真的直接设置坐标不进入物理检测吗?那这样要是有个鼠标拾取肥皂擦拭物体表面,在接触到的位置留下泡沫这种功能不是根本做不到了?

顶下…

试了下,双方碰撞器如果都不是sensor的话,会有碰撞效果,而且会触发onBeginContact
但是这和我预期的功能有出入,我想要的是判断碰撞器是否相交,而不想其产生碰撞,这个需求应该如何做呢?如果用Unity的话会有OnCollideEnter和OnTriggerEnter两种,后者就是为了解决我说的这种需求的回调,CocosCreator有没有类似功能呢?看文档的话目前还没看到

只要触发不要物理效果的话,不需要添加刚体

两个物体都不加刚体吗?

试了下,两个物体没有刚体,不会有回调,而且目前我的问题是可以接受有刚体,但是setWorldPostion造成的相交不会触发碰撞回调,该怎么办

一个碰撞器一个触发器,这样就不会碰撞且有触发回调

问下做这个碰撞你之前的移动方式是怎样的?设置速度?施加力?还是像我一样每帧设置世界坐标?

我这边的需求就是施加力的方式

难怪,看起来要用碰撞的话得在移动上想点办法了

设置世界坐标应该也没问题吧,你设置之后调用一下同步到物理世界

什么方法可以同步到物理世界?
单单调用setWorldPosition不够吗?

image

再问下这个syncPhysicsToScene 方法要怎样调用啊?我在手册里搜索找不到这个方法的任何信息,百度里也搜不到cocos creator 的 syncPhysicsToScene 相关信息,甚至社区里搜这个syncPhysicsToScene,一个结果也没有

_cocos_physics_2d_spec_i_physics_world__IPhysicsWorld这个接口我在cc.d.ts里找到了,但是查找实现却没有找到任何实现这是怎么回事?

PhysicsSystem2D.instance.physicsWorld.syncPhysicsToScene();

1赞