Страница 1 из 1

Обновление данных в unity

СообщениеДобавлено: 13 июл 2018, 20:10
jsbjoker
Здравствуйте, друзья, столкнулся с такой проблемой. Подключил unity к серверу, отправка данных происходит корректно, а как считать данные никак не могу понять. Создал метод который ждет ответа от сервера, но если я вызываю этот метод через update() то unity при запуске проекта просто виснет и ни на что не реагирует(((
public class Client : MonoBehaviour {

static Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
static MemoryStream ms = new MemoryStream(new byte[256], 0, 256, true, true);
static BinaryWriter writer = new BinaryWriter(ms);
static BinaryReader reader = new BinaryReader(ms);
public InputField text;
public Text showText;
private string message, login, msg;



// Use this for initialization
void Start()
{
Debug.Log("Connecting...");
socket.Connect("192.168.1.18", 9090);
Debug.Log("Connected!");
}

// Update is called once per frame
void Update()
{

showText.text = msg + System.Environment.CommandLine;
}

public void sendMessage()
{
ms.Position = 0;
string myText = text.text;
writer.Write("Unity");
writer.Write(myText);
socket.Send(ms.GetBuffer());
}

public void recieveMessage()
{
ms.Position = 0;
socket.Receive(ms.GetBuffer());
login = reader.ReadString();
message = reader.ReadString();
msg = login + ": " + message;
}
}

Re: Обновление данных в unity

СообщениеДобавлено: 13 июл 2018, 20:52
Anonymyx
Так не делается. Обычно для чтения данных создается отдельный поток и в нем в цикле while() ждут сообщение. Так как ReadString() блокирующий метод, главный поток будет заморожен пока не придет сообщение.
Вам надо создать новый поток и в нем запустить метод чтения данных.
Если передача происходит только 1 раз, можно попробовать вызвать метод чтения сразу после отправки данных, т.е. сервер получает сообщение и сразу отправляет ответ. Но опять же это плохая практика.
И сообщения легче передавать в формате JSON, чем последовательно получать сообщения.