在LayaAir3.3中使用2D物理射线检测

1、获取对应场景下的Physics2DWorldManager

在Laya3.3版本中,2D物理和场景关联,这里我们可以通过场景名称获取对应的Physics2DWorldManager,我封装的一个方法: 

/**
* 根据场景名获取物理世界管理器
* @param name 
* @returns 
*/
public getPhysics2DWorldManagerBySceneName(name: string): Physics2DWorldManager {
    let map = Laya.Physics2D.I._factory.worldMap;
    for (let val of map.values()) {
        if ((val as any)._scene.name == name) {
            return val;
        }
    }
    return null;
}

2、使用RayCast方法进行射线检测

接口内容如下:       

/**
* @zh 查询物理世界中对射线路径上的所有形状,可以获取最近点、任意点、还是 n 点。射线投射会忽略包含起点的形状。
* @param startPos 射线开始位置
* @param endPos 射线结束位置
* @en Query the physical world for all shapes on a ray path, either the closest point, any point, or n points. Ray casting ignores shapes that contain the starting point.
* @param startPos ray start position
* @param endPos ray end position
*/
RayCast(res: Physics2DHitResult[], startPos: Vector2, endPos: Vector2): void;

使用示例:          

let res: Laya.Physics2DHitResult[] = [];
let phy2DWorldMgr = PhysicsMgr.ins.getPhysics2DWorldManagerBySceneName("MainScene");
let startV2 = new Vector2(0,0);
let endV2 = new Vector2(500,500);

phy2DWorldMgr.RayCast(res, startV2, endV2);

注意:最后得到的res中需要注意的是,碰撞点信息并不是按远近顺序排列的,所以如果需要获得最近碰撞点或者有序数组就要自己二次处理一下。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值