UnityのWWWで、ローカルホストにアクセスするテスト
サーバーにAIMLを実装したJ-Aliceを使用
ボット同士の会話
TestWWW2.cs |
using System;
using System.Collections.Generic;
using System.Collections;
using System.Text;
using UnityEngine;
// テキストフィールドに入力した文字列を、Sendボタンでサーバーに送信
public class TestWWW2 : MonoBehaviour {
public int m_nPortNo = 8000; // ポート番号
public TestWWW2 m_objTalkTo; // 話し相手
string m_InputTxt = ""; // 聞いた内容
string m_OutputTxt = ""; // 話した内容
GameObject m_objCamera; // 描画用のカメラ
public void Start() {
// カメラを取得
m_objCamera = GameObject.Find("Main Camera");
}
// 話したテキストをセット 話し相手側から呼びだす
public void SetTaledTxt(string txt) {
m_InputTxt = txt;
StartCoroutine( ConnectToLocal( m_InputTxt ) );
}
// ローカルサーバーのJ-Aliceに接続
IEnumerator ConnectToLocal(string inputTxt) {
// URL引数
string arg = "?input=" + WWW.EscapeURL(inputTxt);
// URL
// string url = "http://localhost:" + m_nPortNo.ToString() + arg;
string url = "http://127.0.0.1:" + m_nPortNo.ToString() + arg;
// WWWでURLに接続
WWW www = new WWW(url);
yield return www;
// ShiftJisのエンコーディングを取得
int codepage = 932;
Encoding enc = Encoding.GetEncoding( codepage );
// WWWから文字列を取得
string str = enc.GetString( www.bytes );
// J-Aliceからの応答部分の文字列を切り取り 仮
int nStartIndex = str.IndexOf(":");
int nEndIndex = str.IndexOf("<p>");
int nLen = nEndIndex - nStartIndex - 2;
str = str.Substring(nStartIndex + 2, nLen);
m_OutputTxt = str; // 描画するテキストをセット
// 表示フラグ変更用のウェイト開始
StartCoroutine( WaitOutputTxt() );
}
IEnumerator WaitOutputTxt() {
yield return new WaitForSeconds(3.0f); // ウェイト
if(null != m_objTalkTo) {
// 話相手に話した内容をセット
m_objTalkTo.SetTaledTxt( m_OutputTxt );
}
}
void OnGUI () {
// ワールド座標をスクリーン座標に変換
Vector3 pos = transform.position;
Vector3 screenPos = m_objCamera.camera.WorldToScreenPoint( pos );
// 入力文字列編集用のテキストフィールド
string outTxt = GUI.TextField( new Rect(screenPos.x - 64.0f, 10.0f, 128.0f, 18.0f), m_InputTxt);
if(0 != outTxt.CompareTo(m_InputTxt)) {
m_InputTxt = outTxt;
}
// 送信ボタン
if(GUI.Button(new Rect(screenPos.x - 64.0f + 140.0f, 10.0f, 64.0f, 18.0f), "Send")) {
// コルーチンの開始
StartCoroutine( ConnectToLocal( m_InputTxt ) );
}
// 応答テキストを表示
GUI.TextArea( new Rect(screenPos.x - 100.0f, 60.0f, 200.0f, 64.0f), m_OutputTxt);
}
}
|
0 件のコメント:
新しいコメントは書き込めません。