[开发者心得] [知其然]把载具开到天上去

[复制链接]
998 |0
许你春秋 发表于 2023-11-3 17:33:31 | 显示全部楼层 |阅读模式
本帖最后由 许你春秋 于 2023-11-3 17:33 编辑




核心思路:
编辑器中的载具是通过一系列复杂的物理模拟来实现的,目前没有太好的办法可以让载具通过某种物理力,使其离开”路面“持续的悬浮在半空。我们换一个思路,既然无法对载具进行有效操作,那么是否可以在“路面”上做文章呢。
由此继续推进,可以在载具当前位置生成一块新的“路面”,通过控制“路面”的角度来实现载具的“上升”“平移”“下降”。



脚本逻辑:




@Component
export default class NewScript extends Script {

    RoadAngle:number

    /** 当脚本被实例后,会在第一帧更新前调用此函数 */
    protected async onStart(): Promise<void> {

        let vehicle = await mw.GameObject.asyncFindGameObjectById("0C17B423") as mw.AdvancedVehicle; //获取到场景中的载具

        /**
         * 接收路面生成事件,通过在载具正前方动态生成新的路面,使载具升空
         */
        Event.addClientListener("SpawnNewRoad", (player, val: number) => {
            /**
             * 判断路面角度
             * 事件参数是序列的0,1,2,所以下面通过索引的方式来获取路面的角度值,该方法并不通用,可以用switch来进行判断
             */
            let angles = [6,0,-6];
            this.RoadAngle = angles[val];

            /**
             * 每间隔500毫秒生成一块路面
             * 逻辑中只写了生成逻辑,没有写停止生成逻辑
             */
            let RoadFun = setInterval(() => {
                let vehiclePosition = vehicle.worldTransform.position
                let vehicleRotation = vehicle.worldTransform.rotation;

                let NewRoad = mw.GameObject.spawn("197386", {
                    replicates: true,
                    transform: new Transform(new Vector(vehiclePosition.x, vehiclePosition.y, vehiclePosition.z - 20),
                                            new Rotation(0, this.RoadAngle, vehicleRotation.z),
                                            new Vector(15, 8, 0.2))
                })
                NewRoad.setVisibility(PropertyStatus.Off) //隐藏路面显示
                setTimeout(() => {NewRoad.destroy();}, 500); //销毁生成的路面
            }, 500);
        })
    }
}




回复

使用道具 举报

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