private async void Server_Received(object sender, DataReceivedEventArgs e) { if (e.CommandType == typeof(PipeCommands.SendMessage)) { var d = (PipeCommands.SendMessage)e.Data; Debug.Log($"[Server]ReceiveFromClient:{d.Message}"); } else if (e.CommandType == typeof(PipeCommands.MoveObject)) { var d = (PipeCommands.MoveObject)e.Data; mainThreadInvoker.BeginInvoke(() => //別スレッドからGameObjectに触るときはメインスレッドで処理すること { var pos = CubeTransform.position; pos.x += d.X; CubeTransform.position = pos; }); } else if (e.CommandType == typeof(PipeCommands.GetCurrentPosition)) { float x = 0.0f; await mainThreadInvoker.InvokeAsync(() => x = CubeTransform.position.x); //GameObjectに触るときはメインスレッドで await server.SendCommandAsync(new PipeCommands.ReturnCurrentPosition { CurrentX = x }, e.RequestId); } }