1. 程式人生 > >自然語言交流系統 phxnet團隊 創新實訓 項目博客 (六)

自然語言交流系統 phxnet團隊 創新實訓 項目博客 (六)

xtu 成了 動畫 動畫控制 自然 通過 nim ipp play

從你進入軟件開始,你就建立了和服務器的聯系。這是一段和服務器的長連接,直到你退出此軟件。

2D文字聊天界面大致實現了文字輸入、發送消息、接收消息、你可以通過點擊按鈕讓機器人開啟聊天模式或者學習模式、又或是進入3D語音聊天界面或者退出。在assets文件夾下導入NGUI(使用的是3.6.8版本的.unitypackage)包,點擊按鈕時有聲音和透明度、陰影的變化,通過給按鈕添加聲音.....這樣的組件,使得用戶體驗得到提高,每當點擊發送按鈕實例化一個prefab呈現在聊天對話框中,你可以看見你發送的文字和你從服務器接收到的返回的對話,通過點擊聊天對話框的文字,你的消息可以合攏關閉暫時隱藏,這是使用NGUI插件的UI Play Tween.script,通過服務器端發送回來的消息附帶著標識字符,可以使人物做出相應的動作,畫面的層次感是通過調節兩個照相機的DEPTH、PROJECTION、SIZE、CLIPPING PLANES實現的,學習模式和聊天模式的相互切換則是通過向服務器發送標識字符來實現模式切換。

3D語音聊天界面重在動畫,把動畫過度的condition設置為下個動畫為TRUE,當收到服務器端的標識字符,就把它設置為TRUE,人物就產生動畫的過度。在人物模型的四個方向搭建照相機,調節照相機在最終屏幕上出現的位置,經過四棱錐對光的折射和反射,四個照相機所拍攝到的場景恰恰使其投影到了四棱錐中心,形成了立體。背景中,地勢是用unity的Terrain,勾出起伏的地勢,鋪上texture草坪和樹,給四個照相機添加天空盒子組件。同時,你也可以在3D界面通過按鈕點擊實現去2D文字聊天界面或者退出此程序。

UNITY和Android的交互:

AndroidJavaClass jc =

new AndroidJavaClass(“com.unity3d.player.UnityPlayer”);

AndroidJavaObject activity=jc.GetStatic<AndroidJavaObject>(“currentActivity”);

得到AndroidJavaClass類並且獲得AndroidJavaObject 的activity對象,通過activity.Call(“”,args)函數的第一個參數(函數名)可以調用Android端的一個函數,args傳遞了此函數的參數,

UnityPlayer.UnitySendMessage

("AndroidManager", "AndroidCallBack",””);在安卓端將從科大訊飛翻譯過後的文本傳送給了以AndroidManager命名的類中AndroidCallBack為名的函數,由此實現了安卓和unity的交互。

UNITY和3DMAX動畫模型的融合: 在assets包下導入3DMAX動畫模型的包,創建一個Animator Controller,實現一個動畫向下一個動畫的過度,將動畫模型加入場景,給每一個動畫模型加上此動畫控制器,使得動畫控制的條件為下一個動畫為true時,當從服務器接收到標識符時,就使他產生不同的動畫,這樣就實現了根據對話內容讓模型做出相應的動作。

UNITY和服務器的通信:通過TCP/IP協議進行通信,使用SOCKET建立和對應IP對應端口號的連接,開啟一個線程去等待著接收由服務器端發送過來的消息,讀入時編碼方式使用UTF-8,發送字符串通過socket,BeginSend方法實現發送。

自然語言交流系統 phxnet團隊 創新實訓 項目博客 (六)