using UnityEngine;
using System.Collections;
using UnityEngine.UI;
using UnityEngine.EventSystems;
public class GameControlller : MonoBehaviour {
private InputField inputField;//输入框
public GameObject myMsg;//我的消息
public GameObject robotMsg;//机器人的消息
public Scrollbar verticalBar;//滑动条
private Animator robotAni;//机器人动画组件
void Awake () {
//获取输入框
inputField = GameObject.FindWithTag ("DialogInput").GetComponent<InputField> ();
robotAni = GameObject.FindWithTag ("Robot").GetComponent<Animator> ();//获取机器人动画组件
}
void Start(){
//绑定显示机器人消息事件
MsgManager.instance.showMsgEvent+=InitRobotMsg;
//绑定机器人动画触发事件
MsgManager.instance.showMsgEvent+=RobotTrigger;
}
void Update(){
//如果输入框拥有焦点且用户在此时按下了回车键
if (Input.GetKeyDown(KeyCode.Return)&&inputField.text!="") {
OnSendButtonClick ();
}
}
public void RobotTrigger(string str){
robotAni.SetTrigger ("Shout");//触发机器人喊叫
}
/// <summary>
/// Send按钮,点击事件
/// </summary>
public void OnSendButtonClick(){
//将‘我’发送的信息显示到对话框
ShowMyMsg();
//等待机器人回复,将回复的消息显示到对话框
ShowRobotMsg();
}
/// <summary>
/// 显示机器人回复的信息
/// </summary>
private void ShowRobotMsg(){
//生成请求字符串
string requesStr=MsgManager.instance.InitRequestStr (inputField.text);
//开启携程请求数据
StartCoroutine (MsgManager.instance.GetRobotReply (requesStr));
//焦点回归输入框
EventSystem.current.SetSelectedGameObject(inputField.gameObject);
//激活输入框
inputField.ActivateInputField ();
}
public void InitRobotMsg(string robotMsgStr){
//生成消息对象
GameObject robotCurrentMsg=Instantiate (robotMsg, Vector3.zero, Quaternion.identity)as GameObject;
//获取消息对象文本组件
Text currentText = robotCurrentMsg.transform.Find ("Msg/Text").GetComponent<Text> ();
currentText.text = robotMsgStr;//更新文本
robotCurrentMsg.transform.SetParent(transform);//设置父物体
robotCurrentMsg.transform.localPosition=Vector3.zero;//重置位置
robotCurrentMsg.transform.localScale = Vector3.one;//重置缩放
StartCoroutine(LimitWidth(currentText));//开启宽度限制协程
}
/// <summary>
/// 将‘我’发送的信息显示到对话框
/// </summary>
private void ShowMyMsg(){
//生成‘我’的消息对象
GameObject mycurrentMsg=(GameObject)Instantiate (myMsg, Vector3.zero, Quaternion.identity);
//找到显示信息的子对象
Text currtentText=mycurrentMsg.transform.Find("Msg/Text").GetComponent<Text>();
//更新文字
currtentText.text=inputField.text;
//将消息放到对话框中
mycurrentMsg.transform.SetParent(transform);
//位置重置
mycurrentMsg.transform.localPosition=Vector3.zero;
//重置缩放
mycurrentMsg.transform.localScale=Vector3.one;
//开启宽度限制协程
StartCoroutine (LimitWidth (currtentText));
}
/// <summary>
/// Text的宽度限制
/// </summary>
/// <returns>The width.</returns>
IEnumerator LimitWidth(Text currentText){
yield return new WaitForSeconds (0.001f);//等待文字设置完毕
//获取Text的宽度
float width=currentText.GetComponent<RectTransform>().rect.width;
//如果宽度超出对话框的限制
if (width>510) {
//停用文本的字号自适应
currentText.transform.parent.GetComponent<ContentSizeFitter>().
horizontalFit=ContentSizeFitter.FitMode.Unconstrained;
//重新设置文本的宽度
currentText.transform.parent.GetComponent<RectTransform>().sizeDelta=new Vector2(510,90);
}
yield return new WaitForSeconds (0.0001f);
verticalBar.value = 0;//将滑动条拉倒最底部
}
}
using UnityEngine;
using System.Collections;
using LitJson;
public delegate void ShowMsgEventHandle(string msg);//声明委托类型
public class MsgManager : MonoBehaviour {
public static MsgManager instance;//单例
void Awake () {
instance = this;
}
private string appKey="0abb877477c052e00496e2f9872cfa8b";//数据秘钥
public string robotReply;//机器人回复的消息
public event ShowMsgEventHandle showMsgEvent;//委托对象
/// <summary>
/// 生成请求字符串
/// </summary>
/// <returns>The request string.</returns>
/// <param name="myMsg">My message.</param>
public string InitRequestStr(string myMsg){
string result = "http://op.juhe.cn/robot/index?info=";
result += myMsg;//添加用户发送的消息
result+="&key=";//添加秘钥关键字;
result+=appKey;
return result;//返回
}
/// <summary>
/// 获取机器人回复
/// </summary>
/// <returns>The robot reply.</returns>
public IEnumerator GetRobotReply(string requsetStr){
WWW www = new WWW (requsetStr);//创建www对象,将请求Url传参
yield return www;//等待下载
string returnText=www.text;//获取结果文本
JsonData data = JsonMapper.ToObject (returnText);//将返回的Json文本解析
robotReply=data["result"]["text"].ToString();
if (showMsgEvent!=null) {
showMsgEvent (robotReply);//将机器人回复的消息显示到对话框
}
}
}
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
public class RobotImage : MonoBehaviour {
public Sprite[] bgs;
public Image img;
Sprite current;
Sprite randomSprite;
void OnMouseDown(){
do {
int index=Random.Range (0, 3);
current=img.sprite;
randomSprite = bgs [index];
} while (current==randomSprite);//索引号
img.sprite=randomSprite;
}
}
聚合数据(问答机器人)
最新推荐文章于 2021-02-28 01:05:51 发布