场景 / 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 |
---|
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,说明参数错误,播放失败 |
---|
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,说明参数错误,播放失败 |
---|
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:整数 |
---|
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) |