C# 我和聊天机器人之间的聊天不会出现在显示聊天的区域中
大家好,我正试图在我的unity游戏中实现一个AI聊天机器人,我遇到了这个问题,我一步一步地遵循它,但每当我键入“Hello Bot”,它都不会出现在内容区域中,在那里它会显示我键入的内容以及机器人会回复我的内容,我不知道如何解决它 请帮忙,这是密码C# 我和聊天机器人之间的聊天不会出现在显示聊天的区域中,c#,unity3d,chatbot,C#,Unity3d,Chatbot,大家好,我正试图在我的unity游戏中实现一个AI聊天机器人,我遇到了这个问题,我一步一步地遵循它,但每当我键入“Hello Bot”,它都不会出现在内容区域中,在那里它会显示我键入的内容以及机器人会回复我的内容,我不知道如何解决它 请帮忙,这是密码 using Syn.Bot.Oscova; using Syn.Bot.Oscova.Attributes; using System; using System.Collections.Generic; using UnityEngine; us
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();
}
}
}
使用Syn.Bot.Oscova;
使用Syn.Bot.Oscova.Attributes;
使用制度;
使用System.Collections.Generic;
使用UnityEngine;
使用UnityEngine.UI;
公共类消息
{
公共字符串文本;
公共文本对象;
公共消息类型消息类型;
}
公共枚举消息类型
{
用户,机器人
}
公共类对话框:对话框
{
[表达方式(“Hello Bot”)]
public void Hello(上下文、结果)
{
SendResponse(“你好用户!”);
}
}
公共类GameManager:MonoBehavior
{
OscovaBot MainBot;
公共游戏对象聊天面板,文本对象;
公共输入字段聊天室;
公共颜色UserColor、BotColor;
列表消息=新列表();
//在第一帧更新之前调用Start
void Start()
{
尝试
{
MainBot=新的OscovaBot();
OscovaBot.Logger.LogReceived+=(s,o)=>
{
Log($“OscovaBot:{o.Log}”);
};
MainBot.Dialogs.Add(新建BotDialog());
//MainBot.ImportWorkspace(“资产/bot kb.west”);
MainBot.Trainer.StartTraining();
MainBot.MainUser.ResponseReceived+=(发送方,evt)=>
{
AddMessage($“Bot:{evt.Response.Text}”,MessageType.Bot);
};
}
捕获(例外情况除外)
{
调试日志错误(ex);
}
}
public void AddMessage(字符串messageText,MessageType MessageType)
{
如果(Messages.Count>=25)
{
//当太多时移除。
销毁(消息[0].TextObject.gameObject);
Messages.Remove(消息[0]);
}
var newMessage=newMessage{Text=messageText};
var newText=实例化(textObject,chatPanel.transform);
newMessage.TextObject=newText.GetComponent();
newMessage.TextObject.text=messageText;
newMessage.TextObject.color=messageType==messageType.User?UserColor:BotColor;
Messages.Add(newMessage);
}
public void SendMessageToBot()
{
var userMessage=chatBox.text;
如果(!string.IsNullOrEmpty(userMessage))
{
Log($“OscovaBot:[用户]{userMessage}”);
AddMessage($“用户:{userMessage}”,MessageType.User);
var request=MainBot.MainUser.CreateRequest(userMessage);
var evaluationResult=MainBot.Evaluate(请求);
evaluationResult.Invoke();
chatBox.Select();
chatBox.text=“”;
}
}
//每帧调用一次更新
无效更新()
{
if(Input.GetKeyDown(KeyCode.Return))
{
SendMessageToBot();
}
}
}
你还需要我提供什么,我会尽力提供的
谢谢
有没有什么建议可以让一款简单的AI聊天机器人在游戏中充当帮手之类的角色。谢谢 我猜你错过了截图中的对齐部分。如果您的代码有任何错误,您可以在下面的日志窗口中进行检查 如果聊天信息不可见,则您可能没有正确配置组件 下面是教程本身的直接屏幕截图 内容大小过滤器 输入文本
那么,到底是什么不起作用呢?您的意思是,当您键入文本时,文本会显示出来,但一旦您按下
Return
,则什么也不会发生?你试过你的代码吗?@derHugo是的,它不会在对话框中显示我和机器人之间的对话。我认为它与AddMessage()函数有关,或者对于unity的这个版本,它不起作用