本帖最后由 许你春秋 于 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);
})
}
}
|