c# - 我和聊天机器人之间的聊天没有出现在旨在让聊天变得统一的区域中
问题描述
嗨所以我正在尝试在我的统一游戏中实现一个 AI 聊天机器人,我遇到了这个https://www.codeproject.com/Articles/5267100/Integrating-a-Chatbot-into-Unity-in-Csharp我跟着它一步一步,但每当我输入“Hello Bot”时,它不会出现在内容区域中,它会显示我输入给机器人的内容以及机器人会回复我的内容,我不知道如何解决它。
请帮助这里是代码
using Syn.Bot.Oscova;
using Syn.Bot.Oscova.Attributes;
using System;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class Message
{
public string Text;
public Text TextObject;
public MessageType MessageType;
}
public enum MessageType
{
User, Bot
}
public class BotDialog : Dialog
{
[Expression("Hello Bot")]
public void Hello(Context context, Result result)
{
result.SendResponse("Hello User!");
}
}
public class GameManager : MonoBehaviour
{
OscovaBot MainBot;
public GameObject chatPanel, textObject;
public InputField chatBox;
public Color UserColor, BotColor;
List<Message> Messages = new List<Message>();
// Start is called before the first frame update
void Start()
{
try
{
MainBot = new OscovaBot();
OscovaBot.Logger.LogReceived += (s, o) =>
{
Debug.Log($"OscovaBot: {o.Log}");
};
MainBot.Dialogs.Add(new BotDialog());
//MainBot.ImportWorkspace("Assets/bot-kb.west");
MainBot.Trainer.StartTraining();
MainBot.MainUser.ResponseReceived += (sender, evt) =>
{
AddMessage($"Bot: {evt.Response.Text}", MessageType.Bot);
};
}
catch (Exception ex)
{
Debug.LogError(ex);
}
}
public void AddMessage(string messageText, MessageType messageType)
{
if (Messages.Count >= 25)
{
//Remove when too much.
Destroy(Messages[0].TextObject.gameObject);
Messages.Remove(Messages[0]);
}
var newMessage = new Message { Text = messageText };
var newText = Instantiate(textObject, chatPanel.transform);
newMessage.TextObject = newText.GetComponent<Text>();
newMessage.TextObject.text = messageText;
newMessage.TextObject.color = messageType == MessageType.User ? UserColor : BotColor;
Messages.Add(newMessage);
}
public void SendMessageToBot()
{
var userMessage = chatBox.text;
if (!string.IsNullOrEmpty(userMessage))
{
Debug.Log($"OscovaBot:[USER] {userMessage}");
AddMessage($"User: {userMessage}", MessageType.User);
var request = MainBot.MainUser.CreateRequest(userMessage);
var evaluationResult = MainBot.Evaluate(request);
evaluationResult.Invoke();
chatBox.Select();
chatBox.text = "";
}
}
// Update is called once per frame
void Update()
{
if (Input.GetKeyDown(KeyCode.Return))
{
SendMessageToBot();
}
}
}
还有什么需要我提供的,我会尽量提供。
谢谢
是否有任何建议可以为游戏提供更好的简单 AI 聊天机器人,例如它充当帮助之手之类的游戏。谢谢!
解决方案
我猜你错过了屏幕截图中的对齐部分。如果您的代码有任何错误,您可以查看下面的日志窗口。
如果聊天消息不可见,那么您可能没有正确配置组件。
下面是教程本身的直接截图。
内容大小过滤器
输入文本
推荐阅读
- go - 在 Windows 10 的 $ANDROID_HOME/ndk-bundle 和 $ANDROID_NDK_HOME 中找不到 Android NDK
- histogram-equalization - 瞳孔错误 = cv2.equalizeHist(frame[y+(h*0.25):(y+h), x:(x+w)])
- kubernetes - K8S 节点可以托管属于不同命名空间的 Pod 吗?
- javascript - JS 初学者 - 函数和 DOM,无法弄清楚我的错误 - 将 DOM 用于 func 参数
- python - 如何向列表中的字典添加值?
- docker - Docker Desktop 3.3.0+ 在端口 443 上中断 SSH:如何修复?
- sql - 为什么 SQL 中的 NOT IN 运算符也会过滤掉空值?
- python - Django中处理递归模板显示的策略
- reactjs - 映射一组对象以在 React 中显示它
- c - 如何为用户添加选项以再次运行操作?