CocosCreator 刚体与多边形碰撞器的单向碰撞(向上跳穿过时忽略碰撞)

const{ccclass,property}=cc._decorator;

@ccclass
export default class Player extends cc.Component{
	
	private _rigidBody:cc.RigidBody;
	private _disabledColliders:cc.PhysicsCollider[]=[];
	
	private onLoad():void{
		this._rigidBody=this.node.getComponent(cc.RigidBody);
		this._rigidBody.enabledContactListener=true;//激活接触侦听
	}
	
	private onPreSolve(contact:cc.PhysicsContact,selfCollider:cc.PhysicsCollider,otherCollider:cc.PhysicsCollider):void{
		let index=this._disabledColliders.indexOf(otherCollider);
		if(index>-1){
			//此碰撞器已经被忽略碰撞,则直接忽略碰撞
			contact.disabled=true;
		}else{
			let normal=contact.getWorldManifold().normal.mulSelf(-1);
			if(normal.y<-0.7){
				//加入_disabledColliders列表
				this._disabledColliders.push(otherCollider);
				contact.disabled=true;
			}
		}
	}
	
	private onEndContact(contact:cc.PhysicsContact,selfCollider:cc.PhysicsCollider,otherCollider:cc.PhysicsCollider):void{
		//接触结束,从_disabledColliders列表中移出
		let index=this._disabledColliders.indexOf(otherCollider);
		if(index>-1)this._disabledColliders.splice(index,1);

	}
}

碰撞回调顺序:

...
    Step
    Step
    BeginContact
    PreSolve
    PostSolve
    Step
    PreSolve
    PostSolve
    Step
    PreSolve
    PostSolve
    Step
    EndContact
    Step
    Step
    ...

你可能感兴趣的:(CocosCreator 刚体与多边形碰撞器的单向碰撞(向上跳穿过时忽略碰撞))