[开发者心得] 上下坡增减速度效果

[复制链接]
1206 |0
山山山 发表于 2023-10-8 10:02:32 | 显示全部楼层 |阅读模式
众所周知,上坡客服重力做功,重力势能增加,费力;下坡重力做正功,重力势能减少,省力(又回到初中物理(lll¬ω¬)),所以上坡跑的慢,下坡跑得快也很合理。


先上效果



实现原理
一共需要的向量只有两个:①角色前向的方向向量forwardVector,②角色垂直向下发射一条打到地面的射线,射线与地面交点的法线方向normalVector。
这两个向量点乘后的结果就可以获得角色和斜坡之间的夹角。
如果角色平行与斜坡站立,那么夹角就是90度。如果角色面向斜坡站立,夹角会大于90度;反之则小于90度。
20231008-095439.jpg


在update中计算这个夹角,并根据夹角的大小设置玩家的移动速度增益即可。

    protected onUpdate(dt: number): void {
        const startLoc = this.char.worldLocation;
        const hitPoints = Gameplay.lineTrace(startLoc, startLoc.clone().add(Vector.down.multiply(200)), false, true, [], false, this.char);
        if (hitPoints.length > 0) {
            const hitPoint = hitPoints[0];
            const slopeNormal = hitPoint.impactNormal;
            const anglecos = Vector.dot(this.char.forwardVector, slopeNormal);
            let angle = 90 - Math.acos(anglecos) * 180 / Math.PI;
            let param = 1;
            param = 1 + 2 * (angle / 90);
            this.char.maxWalkSpeed = 600 * param;
        }
    }




示例项目
airplane.rar (63.2 KB, 下载次数: 53)
回复

使用道具 举报

热门版块
快速回复 返回顶部 返回列表