Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我和聊天机器人之间的聊天不会出现在显示聊天的区域中_C#_Unity3d_Chatbot - Fatal编程技术网

C# 我和聊天机器人之间的聊天不会出现在显示聊天的区域中

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

大家好,我正试图在我的unity游戏中实现一个AI聊天机器人,我遇到了这个问题,我一步一步地遵循它,但每当我键入“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();
        }
    }
}
使用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的这个版本,它不起作用