场景 / SoundService
SoundService Class
音效管理器
Table of contents
Properties
onPlaySoundComplete: Action1<string number> |
|---|
| 播放声音完成的委托(2D声音是string代表assetId, 3D声音是playId代表播放id) |
Accessors
BGMVolumeScale(): number client |
|---|
| BGM音量 |
volumeScale(): number client |
| 音效的音量 |
Methods
get3DSoundById(playId: number): Promise<Sound> client |
|---|
| 根据播放 id 获取一个 3DSound |
play3DSound(assetId: string, target: string GameObject Vector, loopCount?: number, volume?: number, params?: Object): number other |
| 在目标播放3D音效 |
playBGM(assetId: string, volume?: number): void other |
| 播放背景音乐 |
playSound(assetId: string, loopCount?: number, volume?: number): string other |
| 根据资源Id播放声音 |
stop3DSound(playId: number): void other |
| 停止3D声音 |
stopAll3DSound(): void other |
| 停止一切3D声音 |
stopAllSound(): void other |
| 停止除BGM以外的一切2D声音 |
stopBGM(): void other |
| 停止背景音乐 |
stopSound(assetId: string): void other |
| 根据资源Id停止声音 |
Properties
onPlaySoundComplete
▪ Static Readonly onPlaySoundComplete: Action1<string number>
播放声音完成的委托(2D声音是string代表assetId, 3D声音是playId代表播放id)
使用示例:创建一个名为SoundExample的脚本,放置在对象栏中,打开脚本,将原本内容修改为如下内容,保存并运行游戏,会播放一个爆炸音效,播放完成后玩家头顶会生成一个火焰特效ts
@Component
export default class SoundExample extends Script {
protected onStart(): void {
if (!SystemUtil.isClient()) return;
this.test();
}
private async test(): `Promise`<`void`\> {
const player = await Player.asyncGetLocalPlayer();
const boomSoundAssetId = "13896";
//在玩家当前坐标处播放爆炸音效
const playId = SoundService.play3DSound(boomSoundAssetId, player.character.worldLocation);
//音效播放完成回调
SoundService.onPlaySoundComplete.add((resId) => {
if (resId == playId) {
//打印声音播放完成
console.log("Play sound complete.")
}
});
}
}@Component
export default class SoundExample extends Script {
protected onStart(): void {
if (!SystemUtil.isClient()) return;
this.test();
}
private async test(): `Promise`<`void`\> {
const player = await Player.asyncGetLocalPlayer();
const boomSoundAssetId = "13896";
//在玩家当前坐标处播放爆炸音效
const playId = SoundService.play3DSound(boomSoundAssetId, player.character.worldLocation);
//音效播放完成回调
SoundService.onPlaySoundComplete.add((resId) => {
if (resId == playId) {
//打印声音播放完成
console.log("Play sound complete.")
}
});
}
}Accessors
BGMVolumeScale
• | • | ||||
|---|---|---|---|---|---|
BGM音量 Precautions 取值范围0-1 Returns
| BGM音量 Precautions 取值范围0-1 Parameters
|
volumeScale
• | • | ||||
|---|---|---|---|---|---|
音效的音量 Precautions 取值范围0-1 Returns
| 音效的音量 Precautions 取值范围0-1 Parameters
|
Methods
get3DSoundById
• Static get3DSoundById(playId): Promise<Sound> client
根据播放 id 获取一个 3DSound
Parameters
playId number | 播放的唯一标识,音效资源 ID,等同于 assetId。区别是 playId 传递的是 number 类型,如:4330;assetId 传字符串类型 "4330" 即可。 range: 字符串长度依据资源 ID 长度而定 type:整数 |
|---|
Returns
Promise<Sound> | Sound 对象的 gameObject |
|---|
ts
@Component
export default class SoundExample extends mw.Script {
protected onStart(): void {
if (!SystemUtil.isClient()) return;
this.test();
}
private async test(): `Promise`<`void`\> {
const player = await mw.asyncGetLocalPlayer();
const bgmSoundAssetId = "12721";
const cubeId = "197386";
mw.GameObject.asyncSpawn({ guid: cubeId }).then(obj => {
obj.worldLocation = new mw.Vector(0, 0, 0);
})
let playId = SoundService.play3DSound(bgmSoundAssetId, new mw.Vector(0, 0, 0), 0);
InputUtil.onKeyDown(Keys.F, () => {
SoundService.get3DSoundById(playId).then(obj => {
obj.worldLocation = player.character.worldLocation;
})
})
}
}@Component
export default class SoundExample extends mw.Script {
protected onStart(): void {
if (!SystemUtil.isClient()) return;
this.test();
}
private async test(): `Promise`<`void`\> {
const player = await mw.asyncGetLocalPlayer();
const bgmSoundAssetId = "12721";
const cubeId = "197386";
mw.GameObject.asyncSpawn({ guid: cubeId }).then(obj => {
obj.worldLocation = new mw.Vector(0, 0, 0);
})
let playId = SoundService.play3DSound(bgmSoundAssetId, new mw.Vector(0, 0, 0), 0);
InputUtil.onKeyDown(Keys.F, () => {
SoundService.get3DSoundById(playId).then(obj => {
obj.worldLocation = player.character.worldLocation;
})
})
}
}play3DSound
• Static play3DSound(assetId, target, loopCount?, volume?, params?): number other
在目标播放3D音效
Parameters
assetId string | 播放的唯一标识,音效资源 ID,等同于 playId。区别是 playId 传递的是 number 类型,如:4330;assetId 传字符串类型 "4330" 即可。 range: 字符串长度依据资源 ID 长度而定 |
|---|---|
target string GameObject Vector | 播放目标 (GameObject的GUID GameObject 世界坐标) |
loopCount? number | 循环次数,当=0时,为无限播放 default: 1 range:不做限制 type:整数 |
volume? number | 音量 default: 1 range:不做限制 type:整数 |
params? Object | 播放参数: { radius: 内部半径(default 200), falloffDistance: 衰减距离,不包含内部半径(default 600) } default: undefined |
params.falloffDistance? number | - |
params.radius? number | - |
Returns
number | 播放ID,播放声音的唯一标识,可用于停止声音 |
|---|
ts
@Component
export default class SoundExample extends mw.Script {
protected onStart(): void {
if (!SystemUtil.isClient()) return;
this.test();
}
private async test(): `Promise`<`void`\> {
const bgmSoundAssetId = "12721";
const cubeId = "197386";
mw.GameObject.asyncSpawn({ guid: cubeId }).then(obj => {
obj.worldLocation = new mw.Vector(0, 0, 0);
})
let isPlay = false;
let playId = 0;
InputUtil.onKeyDown(Keys.F, () => {
if (isPlay) {
SoundService.stop3DSound(playId);
} else {
playId = SoundService.play3DSound(bgmSoundAssetId, new mw.Vector(0, 0, 0), 0);
}
isPlay = !isPlay;
})
}
}@Component
export default class SoundExample extends mw.Script {
protected onStart(): void {
if (!SystemUtil.isClient()) return;
this.test();
}
private async test(): `Promise`<`void`\> {
const bgmSoundAssetId = "12721";
const cubeId = "197386";
mw.GameObject.asyncSpawn({ guid: cubeId }).then(obj => {
obj.worldLocation = new mw.Vector(0, 0, 0);
})
let isPlay = false;
let playId = 0;
InputUtil.onKeyDown(Keys.F, () => {
if (isPlay) {
SoundService.stop3DSound(playId);
} else {
playId = SoundService.play3DSound(bgmSoundAssetId, new mw.Vector(0, 0, 0), 0);
}
isPlay = !isPlay;
})
}
}playBGM
• Static playBGM(assetId, volume?): void other
播放背景音乐
Parameters
assetId string | 播放的唯一标识,音效资源 ID,等同于 playId。区别是 playId 传递的是 number 类型,如:4330;assetId 传字符串类型 "4330" 即可。 range: 字符串长度依据资源 ID 长度而定 |
|---|---|
volume? number | 音量 default: 1 range:不做限制 type:整数 |
ts
@Component
export default class SoundExample extends mw.Script {
protected onStart(): void {
if (!SystemUtil.isClient()) return;
this.test();
}
private async test(): `Promise`<`void`\> {
const bgmSoundAssetId = "12721";
SoundService.playBGM(bgmSoundAssetId, 1);
}
}@Component
export default class SoundExample extends mw.Script {
protected onStart(): void {
if (!SystemUtil.isClient()) return;
this.test();
}
private async test(): `Promise`<`void`\> {
const bgmSoundAssetId = "12721";
SoundService.playBGM(bgmSoundAssetId, 1);
}
}playSound
• Static playSound(assetId, loopCount?, volume?): string other
根据资源Id播放声音
Parameters
assetId string | 播放的唯一标识,音效资源 ID,等同于 playId。区别是 playId 传递的是 number 类型,如:4330;assetId 传字符串类型 "4330" 即可。 range: 字符串长度依据资源 ID 长度而定 |
|---|---|
loopCount? number | 循环次数,当=0时,为无限播放 default: 1 range:不做限制 type:整数 |
volume? number | 音量 default: 1 range:不做限制 type:整数 |
Returns
string | 资源id |
|---|
Precautions
不可叠加
ts
@Component
export default class SoundExample extends mw.Script {
protected onStart(): void {
if (!SystemUtil.isClient()) return;
this.test();
}
private async test(): `Promise`<`void`\> {
const player = await mw.asyncGetLocalPlayer();
const boomSoundAssetId = "13896";
InputUtil.onKeyDown(Keys.F, () => {
SoundService.playSound(boomSoundAssetId);
})
}
}@Component
export default class SoundExample extends mw.Script {
protected onStart(): void {
if (!SystemUtil.isClient()) return;
this.test();
}
private async test(): `Promise`<`void`\> {
const player = await mw.asyncGetLocalPlayer();
const boomSoundAssetId = "13896";
InputUtil.onKeyDown(Keys.F, () => {
SoundService.playSound(boomSoundAssetId);
})
}
}stop3DSound
• Static stop3DSound(playId): void other
停止3D声音
Parameters
playId number | 播放的唯一标识,音效资源 ID,等同于 assetId。区别是 playId 传递的是 number 类型,如:4330;assetId 传字符串类型 "4330" 即可。 range: 字符串长度依据资源 ID 长度而定 type:整数 |
|---|
ts
@Component
export default class SoundExample extends mw.Script {
protected onStart(): void {
if (!SystemUtil.isClient()) return;
this.test();
}
private async test(): `Promise`<`void`\> {
const bgmSoundAssetId = "12721";
const cubeId = "197386";
mw.GameObject.asyncSpawn({ guid: cubeId }).then(obj => {
obj.worldLocation = new mw.Vector(0, 0, 0);
})
let isPlay = false;
let playId = 0;
InputUtil.onKeyDown(Keys.F, () => {
if (isPlay) {
SoundService.stop3DSound(playId);
} else {
playId = SoundService.play3DSound(bgmSoundAssetId, new mw.Vector(0, 0, 0), 0);
}
isPlay = !isPlay;
})
}
}@Component
export default class SoundExample extends mw.Script {
protected onStart(): void {
if (!SystemUtil.isClient()) return;
this.test();
}
private async test(): `Promise`<`void`\> {
const bgmSoundAssetId = "12721";
const cubeId = "197386";
mw.GameObject.asyncSpawn({ guid: cubeId }).then(obj => {
obj.worldLocation = new mw.Vector(0, 0, 0);
})
let isPlay = false;
let playId = 0;
InputUtil.onKeyDown(Keys.F, () => {
if (isPlay) {
SoundService.stop3DSound(playId);
} else {
playId = SoundService.play3DSound(bgmSoundAssetId, new mw.Vector(0, 0, 0), 0);
}
isPlay = !isPlay;
})
}
}stopAll3DSound
• Static stopAll3DSound(): void other
停止一切3D声音
使用示例:创建一个名为SoundExample的脚本,放置在对象栏中,打开脚本,将原本内容修改为如下内容,保存并运行游戏,会生成10个方块,每个方块播放一个3D音效,10秒后会自动停止所有3D音效ts
@Component
export default class SoundExample extends mw.Script {
protected onStart(): void {
if (!SystemUtil.isClient()) return;
this.test();
}
private async test(): `Promise`<`void`\> {
const bgmSoundAssetId = "12721";
const cubeId = "197386";
for (let i = 0;
i < 10;
i++) {
mw.GameObject.asyncSpawn({ guid: cubeId }).then(obj => {
obj.worldLocation = new mw.Vector(i * 300, 0, 0);
SoundService.play3DSound(bgmSoundAssetId, obj, 0);
})
}
setTimeout(() => {
SoundService.stopAll3DSound();
}, 10000);
}
}@Component
export default class SoundExample extends mw.Script {
protected onStart(): void {
if (!SystemUtil.isClient()) return;
this.test();
}
private async test(): `Promise`<`void`\> {
const bgmSoundAssetId = "12721";
const cubeId = "197386";
for (let i = 0;
i < 10;
i++) {
mw.GameObject.asyncSpawn({ guid: cubeId }).then(obj => {
obj.worldLocation = new mw.Vector(i * 300, 0, 0);
SoundService.play3DSound(bgmSoundAssetId, obj, 0);
})
}
setTimeout(() => {
SoundService.stopAll3DSound();
}, 10000);
}
}stopAllSound
• Static stopAllSound(): void other
停止除BGM以外的一切2D声音
使用示例:创建一个名为SoundExample的脚本,放置在对象栏中,打开脚本,将原本内容修改为如下内容,保存并运行游戏,按下F键会播放两个2D音效,再次按下F键会停止所有音效ts
@Component
export default class SoundExample extends mw.Script {
protected onStart(): void {
if (!SystemUtil.isClient()) return;
this.test();
}
private async test(): `Promise`<`void`\> {
const player = await mw.asyncGetLocalPlayer();
const boomSoundAssetId = "13896";
const boomSoundAssetId2 = "20479";
let isPlay = false;
InputUtil.onKeyDown(Keys.F, () => {
if (isPlay) {
SoundService.stopAllSound();
isPlay = false;
} else {
SoundService.playSound(boomSoundAssetId, 0);
SoundService.playSound(boomSoundAssetId2, 0);
isPlay = true;
}
})
}
}@Component
export default class SoundExample extends mw.Script {
protected onStart(): void {
if (!SystemUtil.isClient()) return;
this.test();
}
private async test(): `Promise`<`void`\> {
const player = await mw.asyncGetLocalPlayer();
const boomSoundAssetId = "13896";
const boomSoundAssetId2 = "20479";
let isPlay = false;
InputUtil.onKeyDown(Keys.F, () => {
if (isPlay) {
SoundService.stopAllSound();
isPlay = false;
} else {
SoundService.playSound(boomSoundAssetId, 0);
SoundService.playSound(boomSoundAssetId2, 0);
isPlay = true;
}
})
}
}stopBGM
• Static stopBGM(): void other
停止背景音乐
使用示例:创建一个名为SoundExample的脚本,放置在对象栏中,打开脚本,将原本内容修改为如下内容,保存并运行游戏,按下F键会播放一个背景音乐,再次按下F键会停止背景音乐ts
@Component
export default class SoundExample extends mw.Script {
protected onStart(): void {
if (!SystemUtil.isClient()) return;
this.test();
}
private async test(): `Promise`<`void`\> {
const bgmSoundAssetId = "12721";
let isPlay = false;
InputUtil.onKeyDown(Keys.F, () => {
if (isPlay) {
SoundService.stopBGM();
} else {
SoundService.playBGM(bgmSoundAssetId, 1);
}
isPlay = !isPlay;
})
}
}@Component
export default class SoundExample extends mw.Script {
protected onStart(): void {
if (!SystemUtil.isClient()) return;
this.test();
}
private async test(): `Promise`<`void`\> {
const bgmSoundAssetId = "12721";
let isPlay = false;
InputUtil.onKeyDown(Keys.F, () => {
if (isPlay) {
SoundService.stopBGM();
} else {
SoundService.playBGM(bgmSoundAssetId, 1);
}
isPlay = !isPlay;
})
}
}stopSound
• Static stopSound(assetId): void other
根据资源Id停止声音
Parameters
assetId string | 播放的唯一标识,音效资源 ID,等同于 playId。区别是 playId 传递的是 number 类型,如:4330;assetId 传字符串类型 "4330" 即可。 range: 字符串长度依据资源 ID 长度而定 |
|---|
ts
@Component
export default class SoundExample extends mw.Script {
protected onStart(): void {
if (!SystemUtil.isClient()) return;
this.test();
}
private async test(): `Promise`<`void`\> {
const player = await mw.asyncGetLocalPlayer();
const boomSoundAssetId = "13896";
let isPlay = false;
InputUtil.onKeyDown(Keys.F, () => {
if (isPlay) {
SoundService.stopSound(boomSoundAssetId);
isPlay = false;
} else {
SoundService.playSound(boomSoundAssetId, 0);
isPlay = true;
}
})
}
}@Component
export default class SoundExample extends mw.Script {
protected onStart(): void {
if (!SystemUtil.isClient()) return;
this.test();
}
private async test(): `Promise`<`void`\> {
const player = await mw.asyncGetLocalPlayer();
const boomSoundAssetId = "13896";
let isPlay = false;
InputUtil.onKeyDown(Keys.F, () => {
if (isPlay) {
SoundService.stopSound(boomSoundAssetId);
isPlay = false;
} else {
SoundService.playSound(boomSoundAssetId, 0);
isPlay = true;
}
})
}
}