Skip to content
EffectService

场景 / EffectService

EffectService Class

特效管理器

Effect 通常用于增强游戏画面、呈现视觉效果或传达特定的情感或信息。特效可以是各种形式的视觉效果,如粒子效果、光影效果、爆炸效果、烟雾效果等。MW编辑器在左侧特效栏中提供了大量的粒子特效,您可以任意的拖动特效到场景中查看并使用。

EffectService 中很多静态方法可直接调用,其中:

  • playAtPosition、 playOnGameObject 方法控制粒子特效播放位置。

  • stop 方法控制粒子特效停止播放。

Table of contents

Properties

checkPlayParams: any
检查玩家参数

Methods

getEffectById(playId: number): Promise<Effect> client
根据播放id获取一个特效对象
playAtPosition(assetId: string, position: Vector, params?: Object): number other
在一个位置播放特效
playOnGameObject(assetId: string, target: GameObject, params?: Object): number other
在一个GameObject上播放特效
stop(playId: number): void other
停止一个正在播放的特效
stopAll(): void other
停止所有特效
stopEffectFromHost(source: string, target: Player GameObject): void other
停止目标对象上所有资源 Id 的特效

Properties

checkPlayParams

Static Private checkPlayParams: any

检查玩家参数

Methods

getEffectById

Static getEffectById(playId): Promise<Effect> client

根据播放id获取一个特效对象

Parameters

playId number播放的唯一标识,音效资源 ID,等同于 assetId。区别是 playId 传递的是 number 类型,如:4330;assetId 传字符串类型 "4330" 即可。 range: 字符串长度依据资源 ID 长度而定 type:整数

Returns

Promise<Effect>Particle对象的gameObject
使用示例:创建一个名为EffectExample的脚本,放置在对象栏中,打开脚本,将原本内容修改为如下内容,保存并运行游戏,会在场景中播放一个火焰特效,5秒后获取该特效对象并移动到(200, 0, 200)位置
ts
@Component
export default class EffectExample extends Script {

    protected onStart(): void {
        if (!SystemUtil.isClient()) return;
        const fireAssetId = "4330";
        const playId = EffectService.playAtPosition(fireAssetId, new Vector(0, 0, 200), { loopCount: 0});
        // 5秒后移动该特效到(200, 0, 200)位置
        TimeUtil.delaySecond(5).then(() => {
            EffectService.getEffectById(playId).then((effect) => {
                effect.worldTransform.position = new Vector(200, 0, 200);
            });
        });
    }
}
@Component
export default class EffectExample extends Script {

    protected onStart(): void {
        if (!SystemUtil.isClient()) return;
        const fireAssetId = "4330";
        const playId = EffectService.playAtPosition(fireAssetId, new Vector(0, 0, 200), { loopCount: 0});
        // 5秒后移动该特效到(200, 0, 200)位置
        TimeUtil.delaySecond(5).then(() => {
            EffectService.getEffectById(playId).then((effect) => {
                effect.worldTransform.position = new Vector(200, 0, 200);
            });
        });
    }
}

playAtPosition

Static playAtPosition(assetId, position, params?): number other

在一个位置播放特效

Parameters

assetId string播放的唯一标识,音效资源 ID,等同于 playId。区别是 playId 传递的是 number 类型,如:4330;assetId 传字符串类型 "4330" 即可。 range: 字符串长度依据资源 ID 长度而定
position Vector世界坐标
params? Object播放参数
default: 查看以下数值
params.duration? number-
params.loopCount? number-
params.rotation? Rotation-
params.scale? Vector-

Returns

number本次播放的唯一标识,可用于停止播放,如果返回0,说明参数错误,播放失败
使用示例:创建一个名为EffectExample的脚本,放置在对象栏中,打开脚本,将原本内容修改为如下内容,保存并运行游戏,会在坐标(0, 0, 200)处播放一个火焰特效
ts
@Component
export default class EffectExample extends Script {

    protected onStart(): void {
        if (!SystemUtil.isClient()) return;
        const fireAssetId = "4330";
        const playId = EffectService.playAtPosition(fireAssetId, new mw.Vector(0, 0, 200), { loopCount: 0});
    }
}
@Component
export default class EffectExample extends Script {

    protected onStart(): void {
        if (!SystemUtil.isClient()) return;
        const fireAssetId = "4330";
        const playId = EffectService.playAtPosition(fireAssetId, new mw.Vector(0, 0, 200), { loopCount: 0});
    }
}

playOnGameObject

Static playOnGameObject(assetId, target, params?): number other

在一个GameObject上播放特效

Parameters

assetId string播放的唯一标识,音效资源 ID,等同于 playId。区别是 playId 传递的是 number 类型,如:4330;assetId 传字符串类型 "4330" 即可。 range: 字符串长度依据资源 ID 长度而定
target GameObject目标GameObject
params? Object播放参数,slotType-挂点类型(默认null),loopCount-循环次数(默认1),duration-播放时长(单位:秒,默认0,设置此字段将忽略loopCount),position-坐标偏移(默认Vector.zero),rotation-旋转偏移(默认Rotation.zero),scale-缩放(Vector.one) default: undefined
params.duration? number-
params.loopCount? number-
params.position? Vector-
params.rotation? Rotation-
params.scale? Vector-
params.slotType? HumanoidSlotType-

Returns

number本次播放的唯一标识,可用于停止播放,如果返回0,说明参数错误,播放失败
使用示例:创建一个名为EffectExample的脚本,放置在对象栏中,打开脚本,将原本内容修改为如下内容,保存并运行游戏,会在所有玩家的身上播放一个火焰特效
ts
@Component
export default class EffectExample extends Script {

    protected onStart(): void {
        if (!SystemUtil.isClient()) return;
        const fireAssetId = "4330";
        mw.Player.getAllPlayers().forEach((player) => {
            const playId = EffectService.playOnGameObject(fireAssetId, player.character, { loopCount: 0});
        })
    }
}
@Component
export default class EffectExample extends Script {

    protected onStart(): void {
        if (!SystemUtil.isClient()) return;
        const fireAssetId = "4330";
        mw.Player.getAllPlayers().forEach((player) => {
            const playId = EffectService.playOnGameObject(fireAssetId, player.character, { loopCount: 0});
        })
    }
}

stop

Static stop(playId): void other

停止一个正在播放的特效

Parameters

playId number播放的唯一标识,音效资源 ID,等同于 assetId。区别是 playId 传递的是 number 类型,如:4330;assetId 传字符串类型 "4330" 即可。 range: 字符串长度依据资源 ID 长度而定 type:整数
使用示例: 创建一个名为EffectExample的脚本,放置在对象栏中,打开脚本,将原本内容修改为如下内容,保存并运行游戏,会在场景中播放一个火焰特效,5秒后停止特效
ts
@Component
export default class EffectExample extends Script {

    protected onStart(): void {
        if (!SystemUtil.isClient()) return;
        const fireAssetId = "4330";
        const playId = EffectService.playAtPosition(fireAssetId, new mw.Vector(0, 0, 200), { loopCount: 0});
        // 5秒后停止特效
        TimeUtil.delaySecond(5).then(() => {
            EffectService.stop(playId);
        })
    }
}
@Component
export default class EffectExample extends Script {

    protected onStart(): void {
        if (!SystemUtil.isClient()) return;
        const fireAssetId = "4330";
        const playId = EffectService.playAtPosition(fireAssetId, new mw.Vector(0, 0, 200), { loopCount: 0});
        // 5秒后停止特效
        TimeUtil.delaySecond(5).then(() => {
            EffectService.stop(playId);
        })
    }
}

stopAll

Static stopAll(): void other

停止所有特效

使用示例:创建一个名为EffectExample的脚本,放置在对象栏中,打开脚本,将原本内容修改为如下内容,保存并运行游戏,会在场景中播放三个火焰特效,5秒后停止所有特效
ts
@Component
export default class EffectExample extends Script {

    protected onStart(): void {
        if (!SystemUtil.isClient()) return;
        const fireAssetId = "4330";
        const playId1 = EffectService.playAtPosition(fireAssetId, new mw.Vector(0, 0, 200), { loopCount: 0});
        const playId2 = EffectService.playAtPosition(fireAssetId, new mw.Vector(200, 0, 200), { loopCount: 0});
        const playId3 = EffectService.playAtPosition(fireAssetId, new mw.Vector(400, 0, 200), { loopCount: 0});
        // 5秒后停止所有特效
        TimeUtil.delaySecond(5).then(() => {
            EffectService.stopAll();
        })
    }
}
@Component
export default class EffectExample extends Script {

    protected onStart(): void {
        if (!SystemUtil.isClient()) return;
        const fireAssetId = "4330";
        const playId1 = EffectService.playAtPosition(fireAssetId, new mw.Vector(0, 0, 200), { loopCount: 0});
        const playId2 = EffectService.playAtPosition(fireAssetId, new mw.Vector(200, 0, 200), { loopCount: 0});
        const playId3 = EffectService.playAtPosition(fireAssetId, new mw.Vector(400, 0, 200), { loopCount: 0});
        // 5秒后停止所有特效
        TimeUtil.delaySecond(5).then(() => {
            EffectService.stopAll();
        })
    }
}

stopEffectFromHost

Static stopEffectFromHost(source, target): void other

停止目标对象上所有资源 Id 的特效

Parameters

source string特效源,playEffect 的第一个参数。range:
target Player GameObject目标对象(Player或NPC或GameObject)