cocos creater 3.x中Box2D linearVelocity的单位是m/s

官方文档里明明说的,在游戏逻辑中都是使用的世界单位

但是我们在 2D 游戏运算中一般使用 世界坐标系中的单位(简称世界单位)来作为长度单位制,所以我们需要一个比率来进行物理单位到世界单位上的相互转换。

一般情况下我们把这个比率设置为 32,这个值可以通过 PHYSICS_2D_PTM_RATIO 获取,并且这个值是只读的。通常用户是不需要关心这个值的,物理系统内部会自动对物理单位与世界单位进行转换,用户访问和设置的都是进行 2d 游戏开发中所熟悉的世界单位。

但是刚体的速度确实物理系统中的单位,下面设置刚体速度为1,表示1m/s,在1秒时间内,在屏幕中移动32像素单位,
按照文档所说,当速度设置为32时,1秒才能移动32像素单位,如果设置把刚体速度设置为32,在1秒时间内,刚体移动的距离已经超出屏幕了。

this.rb.linearVelocity = v2(1,0)
// 一秒后暂停运动
this.schedule(function() {
      this.rb.linearVelocity = v2(0,0);
}, 1);

下面是测试画面:

物理系统内部会自动对物理单位与世界单位进行转换,

算出来还是不行。。哎

楼主,知道这单位到底是什么了吗。一秒的距离完全不是这个,我算,向上平抛小球,给个初速度。计算的出来能平抛的最大高度,与实际完全不一样。草了,

单位不好说,就是1m=32像素,你可以这样理解,速度1m/s,1秒运行1米,则在屏幕中就是运行了32像素。

按照真实世界的单位计算出的结果乘32就是屏幕中运行的像素距离

兄弟,我测出来了, 你说的没错,不过有点绕,这个单位就是m/s 。vec(0,10),就是10m/s。320个物理单位。这个狗吧文档让我以为所有都是以物理单位。我是说一秒跑的都不止10物理单位

代码验证“1m/s是32px/s”,mass默认为1.

【CocosCreator3.x】物理速度和像素转换

import { _decorator, Component, Node, RigidBody2D, Vec2 } from 'cc';
const { ccclass, property, requireComponent } = _decorator;

/**
 * 物理示例
 */
@ccclass('PyhsicsExample')
export class PyhsicsExample extends Component {
    /** 本身节点 */
    @property(Node)
    selfNode: Node;

    @property(RigidBody2D)
    rigidBody: RigidBody2D;

    start() {
        // 开始时间
        let startTime = new Date();
        // 输出初始位置
        console.log(JSON.stringify({startPosition: this.selfNode.getPosition()}));
        // 间隔输出
        setInterval(() => {
            // 输出当前位置
            console.log(JSON.stringify({duration:  new Date().getTime() - startTime.getTime(), curPosition: this.selfNode.getPosition()}));
            // 直接设置线性速度
            this.rigidBody.linearVelocity = new Vec2(0,1);
        }, 1000);
    }
}

效果截图:
image

1赞