キューブオブジェクトを作成し、このスクリプトを添付しました。ユニティメソッドでUDPを使用する方法
using UnityEngine;
using System.Collections;
public class CubeMove : MonoBehaviour {
void Start() {
}
void Update() {
}
public void Move() {
Vector3 moveVector = new Vector3(10, 0, 0);
transform.Translate(moveVector);
}
}
UDPを使用してキューブの移動を制御したいので、UDPManagerを作成しました。
using UnityEngine;
using System.Collections;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;
public class UDPManager : MonoBehaviour
{
static UdpClient udp;
Thread thread;
public GameObject cube;
public CubeMove cubemove;
void Start()
{
udp = new UdpClient(12345);
cubemove = cube.GetComponent<CubeMove>();
thread = new Thread(new ThreadStart(ThreadMethod));
thread.Start();
}
void Update()
{
}
void OnApplicationQuit()
{
udp.Close();
thread.Abort();
}
private void ThreadMethod()
{
while(true)
{
IPEndPoint RemoteIpEndPoint = new IPEndPoint(IPAddress.Any, 0);
byte[] receiveBytes = udp.Receive(ref RemoteIpEndPoint);
string returnData = Encoding.ASCII.GetString(receiveBytes);
Debug.Log(returnData);
if (returnData == "1\n") {
cube.SendMessage ("Move");
// or
cubemove.Move();
}
}
}
}
ただし、これらは以下のエラーでは機能しません。
- SendMessage can only be called from the main thread.
- get_transform can only be called from the main thread.
udpコマンドを受け取ったときにユニティメソッドを呼び出すことはできますか?
ありがとうございます!私はそれをすることができた。 – uzimith