服务 / ChatService
ChatService Class
聊天服务
语音聊天功能需要在mobile端才可生效,pie没有效果。可以使用手机端测试。
Table of contents
Accessors
onVoiceStatusChange(): MulticastDelegate <(userId : string , lastVolume : number , currentVolume : number , isOpenAudio : boolean ) => void > client |
---|
语音聊天委托,每次语音的回调 |
voiceChatEnabled(): boolean client |
获取是否既不能听也不能说功能,false为否既不能听也不能说;true为既可以听也可以说。 |
Methods
asyncBroadcastMessage(type : MessageType , content : string ): Promise <BroadcastMessageResult > server |
---|
发送富文本消息到聊天窗口中,禁止回调中调用该接口。 |
asyncCloseMic(): Promise <boolean > client |
关闭自己的语音。 |
asyncCollapseChatWindow(isCollapsed : boolean ): Promise <boolean > client |
是否打开或者折叠游戏中的聊天框。true是打开;false是折叠。 |
asyncEnableChatWindow(isEnabled : boolean ): Promise <boolean > client |
打开或关闭某个客户端的聊天功能。true是打开;false是关闭。 |
asyncMuteAll(): Promise <boolean > client |
一键屏蔽所有玩家的语音。 |
asyncMutePlayer(userId : string ): Promise <boolean > other |
屏蔽指定玩家的声音 |
asyncOpenMic(): Promise <boolean > client |
打开自己的语音。 |
asyncSendMessage(content : string ): Promise <BroadcastMessageResult > client |
发送快捷语消息,自动携带发送者名称。与聊天框中输入语言一致。不支持富文本。 |
asyncUnmuteAll(): Promise <boolean > client |
一键打开所有玩家的声音,取消屏蔽 |
asyncUnmutePlayer(userId : string ): Promise <boolean > client |
打开指定玩家的声音,取消屏蔽 |
asyncsetUserCanChat(userId : string , canChat : boolean ): Promise <boolean > client |
设置指定用户聊天权限 |
getUserCanChat(userId : string ): Promise <boolean > client |
获取指定用户聊天权限 |
Accessors
onVoiceStatusChange
• | ||
---|---|---|
语音聊天委托,每次语音的回调 Returns
|
voiceChatEnabled
• | • | ||||
---|---|---|---|---|---|
获取是否既不能听也不能说功能,false为否既不能听也不能说;true为既可以听也可以说。 note: 开启语音功能,接口才可生效 Returns
| 设置既不能听也不能说功能,false为否既不能听也不能说;true为既可以听也可以说。 note: 开启语音功能,接口才可生效 Parameters
|
玩家语音是否设置成功。
Methods
asyncBroadcastMessage
• Static
asyncBroadcastMessage(type
, content
): Promise
<BroadcastMessageResult
> server
发送富文本消息到聊天窗口中,禁止回调中调用该接口。
Parameters
type MessageType | 发送消息类型 |
---|---|
content string | 消息内容 range:小于 1200 个字符串长度 |
Returns
Promise <BroadcastMessageResult > | 发送消息的结果 |
---|
限制每个消息发送从第一个消息发送开始计时60秒内最多发送60条消息。定时器清空计数后下一次发送消息再次开始计数。
note: 开启聊天框聊天功能,接口才可生效
asyncCloseMic
• Static
asyncCloseMic(): Promise
<boolean
> client
关闭自己的语音。
Returns
Promise <boolean > | 语音是否设置成功。 |
---|
note: 开启语音功能,接口才可生效
使用示例:创建一个名为"NewScript"的脚本,放置在对象管理器中,打开脚本,输入以下代码保存,运行游戏,可屏蔽所有玩家语音,无法在editor模式下调试。代码如下:ts
@Component
export default class NewScript extends Script {
protected onStart(): void {
ChatService.asyncCloseMic().then(()=>{console.log("asyncCloseMic")});
}
}
@Component
export default class NewScript extends Script {
protected onStart(): void {
ChatService.asyncCloseMic().then(()=>{console.log("asyncCloseMic")});
}
}
asyncCollapseChatWindow
• Static
asyncCollapseChatWindow(isCollapsed
): Promise
<boolean
> client
是否打开或者折叠游戏中的聊天框。true是打开;false是折叠。
Parameters
isCollapsed boolean | 折叠框打开关闭布尔参数 |
---|
Returns
Promise <boolean > | 返回打开折叠是否成功。 |
---|
ts
@Component
export default class ChatExample extends Script {
protected onStart(): void {
ChatService.asyncCollapseChatWindow(true);
}
}
@Component
export default class ChatExample extends Script {
protected onStart(): void {
ChatService.asyncCollapseChatWindow(true);
}
}
asyncEnableChatWindow
• Static
asyncEnableChatWindow(isEnabled
): Promise
<boolean
> client
打开或关闭某个客户端的聊天功能。true是打开;false是关闭。
Parameters
isEnabled boolean | 聊天功能打开关闭布尔参数 |
---|
Returns
Promise <boolean > | 聊天功能打开或者关闭是否成功。 |
---|
ts
@Component
export default class ChatExample extends Script {
protected onStart(): void {
ChatService.asyncEnableChatWindow(true);
}
}
@Component
export default class ChatExample extends Script {
protected onStart(): void {
ChatService.asyncEnableChatWindow(true);
}
}
asyncMuteAll
• Static
asyncMuteAll(): Promise
<boolean
> client
一键屏蔽所有玩家的语音。
Returns
Promise <boolean > | 玩家语音是否设置成功。 |
---|
note: 开启语音功能,接口才可生效
使用示例:创建一个名为"NewScript"的脚本,放置在对象管理器中,打开脚本,输入以下代码保存,运行游戏,可屏蔽所有玩家语音,无法在editor模式下调试。代码如下:ts
@Component
export default class NewScript extends Script {
protected onStart(): void {
ChatService.asyncMuteAll().then(()=>{console.log("asyncMuteAll")});
}
}
@Component
export default class NewScript extends Script {
protected onStart(): void {
ChatService.asyncMuteAll().then(()=>{console.log("asyncMuteAll")});
}
}
asyncMutePlayer
• Static
asyncMutePlayer(userId
): Promise
<boolean
> other
屏蔽指定玩家的声音
Parameters
userId string | 玩家的 userid default:null range: 依据 userId 长度而定 |
---|
Returns
Promise <boolean > | 玩家语音是否设置成功。 |
---|
note: 开启语音功能,接口才可生效
使用示例:创建一个名为"NewScript"的脚本,放置在对象管理器中,打开脚本,输入以下代码保存,运行游戏,可屏蔽所有玩家语音,无法在editor模式下调试。代码如下:ts
@Component
export default class NewScript extends Script {
protected onStart(): void {
ChatService.asyncMutePlayer(Player.localPlayer.userId).then(()=>{console.log("asyncMutePlayer")});
}
}
@Component
export default class NewScript extends Script {
protected onStart(): void {
ChatService.asyncMutePlayer(Player.localPlayer.userId).then(()=>{console.log("asyncMutePlayer")});
}
}
asyncOpenMic
• Static
asyncOpenMic(): Promise
<boolean
> client
打开自己的语音。
Returns
Promise <boolean > | 语音是否设置成功。 |
---|
note: 开启语音功能,接口才可生效
使用示例:创建一个名为"NewScript"的脚本,放置在对象管理器中,打开脚本,输入以下代码保存,运行游戏,可屏蔽所有玩家语音,无法在editor模式下调试。代码如下:ts
@Component
export default class NewScript extends Script {
protected onStart(): void {
ChatService.asyncOpenMic().then(()=>{console.log("asyncOpenMic")});
}
}
@Component
export default class NewScript extends Script {
protected onStart(): void {
ChatService.asyncOpenMic().then(()=>{console.log("asyncOpenMic")});
}
}
asyncSendMessage
• Static
asyncSendMessage(content
): Promise
<BroadcastMessageResult
> client
发送快捷语消息,自动携带发送者名称。与聊天框中输入语言一致。不支持富文本。
Parameters
content string | 消息内容 range:小于 128 个字符串长度 |
---|
Returns
Promise <BroadcastMessageResult > | 发送消息的结果 |
---|
note: 开启聊天框聊天功能,接口才可生效
使用示例:创建一个名为"messageExample"的脚本,放置在对象管理器中,打开脚本,输入以下代码保存,运行游戏,你将在场景中看到在聊天框中显示"asyncBroadcastMessage is called"的效果。代码如下:ts
@Component
export default class NewExample extends Script {
protected onStart(): void {
if (SystemUtil.isClient()){
this.test();
}
if(SystemUtil.isServer()){
Event.addClientListener("bro_two",()=>{
ChatService.asyncBroadcastMessage(MessageType.Room,"bro").then(()=>{
console.log("asyncBroadcastMessage is called");
});
});
}
if(SystemUtil.isClient()){
Event.addLocalListener("bro",()=>{
Event.dispatchToServer("bro_two");
});
}
}
private async test(): Promise<void> {
let btn = new ButtonUI();
InputUtil.onKeyDown(Keys.F, async () => {
let playerPos = Player.localPlayer.character.worldTransform.position;
let result = InputUtil.projectWorldPositionToWidgetPosition(playerPos);
if (result) {
btn.button.position = result.screenPosition;
}
})
}
}
class ButtonUI {
public button: StaleButton;
public buttonTwo: StaleButton;
constructor(fun: Function = null) {
this.creatUI(fun);
}
private creatUI(fun: Function = null) {
// 创建一个UI对象
let ui = UserWidget.newObject();
// 将UI添加到屏幕上
ui.addToViewport(1);
// 创建一个画布组件
let rootCanvas = Canvas.newObject();
rootCanvas.size = new Vector2(1920, 1080);
rootCanvas.position = Vector2.zero;
// 将Ui的根画布设置为rootCanvas
ui.rootContent = rootCanvas;
// 创建一个按钮
this.button = StaleButton.newObject(rootCanvas);
this.button.position = new Vector2(1000, 310);
this.button.size = new Vector2(200, 50);
this.button.text = "SendMes";
this.button.transitionEnable = true;
this.button.pressedImagColor = LinearColor.red;
this.button.visibility = SlateVisibility.Visible;
this.button.onClicked.add(() => {
console.log("btn ")
ChatService.asyncSendMessage("hello").then(()=>{
console.log("asyncSendMessage is called");
});
if (fun) {
fun();
}
});
this.buttonTwo = StaleButton.newObject(rootCanvas);
this.buttonTwo.position = new Vector2(1700, 310);
this.buttonTwo.size = new Vector2(150, 50);
this.buttonTwo.text = "BroMes";
this.buttonTwo.transitionEnable = true;
this.buttonTwo.pressedImagColor = LinearColor.red;
this.buttonTwo.visibility = SlateVisibility.Visible;
this.buttonTwo.onClicked.add(() => {
console.log("btn ")
Event.dispatchToLocal("bro");
if (fun) {
fun();
}
});
}
}
@Component
export default class NewExample extends Script {
protected onStart(): void {
if (SystemUtil.isClient()){
this.test();
}
if(SystemUtil.isServer()){
Event.addClientListener("bro_two",()=>{
ChatService.asyncBroadcastMessage(MessageType.Room,"bro").then(()=>{
console.log("asyncBroadcastMessage is called");
});
});
}
if(SystemUtil.isClient()){
Event.addLocalListener("bro",()=>{
Event.dispatchToServer("bro_two");
});
}
}
private async test(): Promise<void> {
let btn = new ButtonUI();
InputUtil.onKeyDown(Keys.F, async () => {
let playerPos = Player.localPlayer.character.worldTransform.position;
let result = InputUtil.projectWorldPositionToWidgetPosition(playerPos);
if (result) {
btn.button.position = result.screenPosition;
}
})
}
}
class ButtonUI {
public button: StaleButton;
public buttonTwo: StaleButton;
constructor(fun: Function = null) {
this.creatUI(fun);
}
private creatUI(fun: Function = null) {
// 创建一个UI对象
let ui = UserWidget.newObject();
// 将UI添加到屏幕上
ui.addToViewport(1);
// 创建一个画布组件
let rootCanvas = Canvas.newObject();
rootCanvas.size = new Vector2(1920, 1080);
rootCanvas.position = Vector2.zero;
// 将Ui的根画布设置为rootCanvas
ui.rootContent = rootCanvas;
// 创建一个按钮
this.button = StaleButton.newObject(rootCanvas);
this.button.position = new Vector2(1000, 310);
this.button.size = new Vector2(200, 50);
this.button.text = "SendMes";
this.button.transitionEnable = true;
this.button.pressedImagColor = LinearColor.red;
this.button.visibility = SlateVisibility.Visible;
this.button.onClicked.add(() => {
console.log("btn ")
ChatService.asyncSendMessage("hello").then(()=>{
console.log("asyncSendMessage is called");
});
if (fun) {
fun();
}
});
this.buttonTwo = StaleButton.newObject(rootCanvas);
this.buttonTwo.position = new Vector2(1700, 310);
this.buttonTwo.size = new Vector2(150, 50);
this.buttonTwo.text = "BroMes";
this.buttonTwo.transitionEnable = true;
this.buttonTwo.pressedImagColor = LinearColor.red;
this.buttonTwo.visibility = SlateVisibility.Visible;
this.buttonTwo.onClicked.add(() => {
console.log("btn ")
Event.dispatchToLocal("bro");
if (fun) {
fun();
}
});
}
}
asyncUnmuteAll
• Static
asyncUnmuteAll(): Promise
<boolean
> client
一键打开所有玩家的声音,取消屏蔽
Returns
Promise <boolean > | 语音是否设置成功。 |
---|
note: 开启语音功能,接口才可生效
使用示例:创建一个名为"NewScript"的脚本,放置在对象管理器中,打开脚本,输入以下代码保存,运行游戏,可屏蔽所有玩家语音,无法在editor模式下调试。代码如下:ts
@Component
export default class NewScript extends Script {
protected onStart(): void {
ChatService.asyncUnmuteAll().then(()=>{console.log("asyncUnmuteAll")});
}
}
@Component
export default class NewScript extends Script {
protected onStart(): void {
ChatService.asyncUnmuteAll().then(()=>{console.log("asyncUnmuteAll")});
}
}
asyncUnmutePlayer
• Static
asyncUnmutePlayer(userId
): Promise
<boolean
> client
打开指定玩家的声音,取消屏蔽
Parameters
userId string | 玩家的 userid default:null range: 依据 userId 的长度而定 |
---|
Returns
Promise <boolean > | 语音是否设置成功。 |
---|
note: 开启语音功能,接口才可生效
使用示例:创建一个名为"NewScript"的脚本,放置在对象管理器中,打开脚本,输入以下代码保存,运行游戏,可屏蔽所有玩家语音,无法在editor模式下调试。代码如下:ts
@Component
export default class NewScript extends Script {
protected onStart(): void {
ChatService.asyncUnmutePlayer(Player.localPlayer.userId).then(()=>{console.log("asyncUnmutePlayer")});
}
}
@Component
export default class NewScript extends Script {
protected onStart(): void {
ChatService.asyncUnmutePlayer(Player.localPlayer.userId).then(()=>{console.log("asyncUnmutePlayer")});
}
}
asyncsetUserCanChat
• Static
asyncsetUserCanChat(userId
, canChat
): Promise
<boolean
> client
设置指定用户聊天权限
Parameters
userId string | 用户 ID range: 根据 ID 长度决定 |
---|---|
canChat boolean | 是否开启用户聊天权限。 |
Returns
Promise <boolean > | 是否设置成功 |
---|
getUserCanChat
• Static
getUserCanChat(userId
): Promise
<boolean
> client
获取指定用户聊天权限
Parameters
userId string | 用户 ID range: 不限制 |
---|
Returns
Promise <boolean > | 是否获取成功 |
---|