---
title: 自定义发送和接收聊天消息
slug: world-sdk-guide-ch/Qs3ELzO90W5082uZ38CBK
docTags: 
createdAt: 2024-09-02T08:34:13.134Z
---

您可以通过导入 ZEPETO.Chat 包来自定义您发送和接收的聊天消息。

:::hint{type="danger"}
❗️ **注意**

- 此功能在实现了多人元素的世界中可用。
:::

:::hint{type="success"}
👍 **参考要点**

- 您可以在编辑器环境中发送/接收聊天。
- 只有通过处理程序创建的用户聊天消息可以发送/接收（快速聊天、系统消息无法接收）
:::



## 功能定义

```typescript
class ZepetoChat extends System.Object {
    public static get Instance(): ZepetoChatImplementation;
    public static get OnReceivedMessage(): UnityEngine_Events.UnityEvent$1<IMessage>;
    public constructor();
    public static Send($message: string): void;
}
```

- ZepetoChat。您可以使用 Send() 将特定消息发送到聊天窗口。
- 您可以使用 ZepetoChat.OnReceivedMessage.AddListener() 来确定接收哪个事件的消息。



## 使用示例

按下按钮1和2以发送指定消息。
在输入框中创建自定义消息以发送该消息。

![](https://api.archbee.com/api/optimize/fCt3n1oCa8rgNJ8fw9I2N-0ZtFY_KPKvddClWvNPaxM-20240904-102417.png "示例设置")



```typescript
import { ZepetoScriptBehaviour } from 'ZEPETO.Script';
import { Button, InputField, Text } from 'UnityEngine.UI';
import { ZepetoChat, MessageType, UserMessage } from 'ZEPETO.Chat';
import { Color } from 'UnityEngine';


export default class CustomChat extends ZepetoScriptBehaviour {

    public custom1ChatBtn: Button;
    public custom2ChatBtn: Button;
    public sendChatBtn: Button;
    public resultText: Text;
    public inputChatbox: InputField;

    Start() {
        // 当按钮被点击时
        this.custom1ChatBtn.onClick.AddListener(() => {
            // 更改文本颜色 
            this.resultText.color = Color.magenta;
            // 发送消息
            ZepetoChat.Send("1");
        });
        this.custom2ChatBtn.onClick.AddListener(() => {
            this.resultText.color = Color.blue;
            ZepetoChat.Send("2");
        });
        this.sendChatBtn.onClick.AddListener(() => {
            this.resultText.color = Color.black;
            const inputMsg = this.inputChatbox.text;
            ZepetoChat.Send(inputMsg);
        });

        // 接收消息
        ZepetoChat.OnReceivedMessage.AddListener(msg => {
            const userMsg = msg as UserMessage;
            this.resultText.text = `[用户 - ${userMsg.userName}] - ${userMsg.message}`;
        });
    }
}
```

![](https://api.archbee.com/api/optimize/fCt3n1oCa8rgNJ8fw9I2N-P9uASIWH_f8NmXPsY2JHx-20240904-102417.gif "示例执行结果")



## 启用/禁用聊天按钮

:::hint{type="danger"}
- 在一个实现了多人元素的世界中可用的功能。
- 您可以在移动测试中检查。
:::

- 声明

```typescript
public static SetActiveChatUI($value: boolean): void;
```

- 示例代码
  - 按下特定按钮以切换聊天按钮的启用/禁用状态

```typescript
import { ZepetoScriptBehaviour } from 'ZEPETO.Script';
import { Button } from 'UnityEngine.UI';
import { ZepetoChat, MessageType, UserMessage } from 'ZEPETO.Chat';
 
export default class ChatController extends ZepetoScriptBehaviour {
 
    public chatUIBtn: Button;
    private isChatUIActive : boolean = true;
     
    Start() {
        // 当按钮被点击时
        this.chatUIBtn.onClick.AddListener(() => {
            // 发送消息
            if (this.isChatUIActive) {
                ZepetoChat.SetActiveChatUI(false);
                this.isChatUIActive = false;
                console.log("聊天 UI 已禁用");
            }
            else {
                ZepetoChat.SetActiveChatUI(true);
                this.isChatUIActive = true;
                console.log("聊天 UI 已启用");
            }
        });
    }
}
```

![](https://api.archbee.com/api/optimize/fCt3n1oCa8rgNJ8fw9I2N-yvlZBfrHSJ2YVoiuG6Cpy-20240904-102417.gif)



## 确定过滤消息

:::hint{type="danger"}
- 在一个实现了多人元素的世界中可用的功能。
- 您可以在移动测试中检查。
:::

- 声明

```typescript
public isFiltered: boolean;
```

- 示例代码
  - 确定接收到的聊天消息是否为过滤消息，并在屏幕上打印出来。

```typescript
import { ZepetoScriptBehaviour } from 'ZEPETO.Script';
import { Text } from 'UnityEngine.UI';
import { ZepetoChat, MessageType, UserMessage } from 'ZEPETO.Chat';
 
export default class ChatController extends ZepetoScriptBehaviour {
 
    public filterResultText: Text;
     
    Start() {
        // 接收消息
        ZepetoChat.OnReceivedMessage.AddListener(msg => {
            const userMsg = msg as UserMessage;
            if (userMsg.isFiltered) {
                this.filterResultText.text = `此消息已被过滤 : ${userMsg.message}`;
            } else {
                this.filterResultText.text = `此消息未被过滤 : ${userMsg.message}`;
            }
        });
    }
}
```

![](https://api.archbee.com/api/optimize/fCt3n1oCa8rgNJ8fw9I2N-METB3-RQoyAdaEyj8GGir-20240904-102417.png)

![](https://api.archbee.com/api/optimize/fCt3n1oCa8rgNJ8fw9I2N-WV21ilO4sqGdszyn7lnuR-20240904-102417.png)

