聚合数据(问答机器人)

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;
	}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值