PRIF. eroare ia
get_transform poate fi numit numai din firul principal.
Constructori și initializatori de câmp vor fi executate din firul de încărcare atunci când încărcarea unei scene.
atunci când efectuează metoda ProcessReceive. Anterior, acest lucru nu pare să. toate regulile funcționează. astăzi este prima dată când am văzut această greșeală.
Aici este codul
folosind UnityEngine;
folosind System.Collections;
folosind System.Collections.Generic;
folosind System.Linq;
folosind System.Text;
folosind System.Net;
folosind System.Net.Sockets;
folosind System.Threading;
folosind System;
Clasa de client publică. MonoBehaviour # 123;
Socket private static;
statice SocketAsyncEventArgs SockAsyncEventArgs private; Obiect // pentru asincron pe un soclu
octet static privat # 91; # 93; piele de bivol;
int private static i = 0;
publice mă GameObject;
GameObject publică el;
Transformarea privat HisTrans;
static privat Transformarea hist;
static privat Transformarea MyTrans;
static privat Transformarea oldTrans;
static privat Transformarea Tranducere Noua;
bool sw private static = false;
privat static void Init # 40; # 41;
# 123;
Debug. Log # 40; "Init" # 41; ;
socket = new Socket # 40; AddressFamily. Internetwork. SocketType. Stream. ProtocolType. Tcp # 41; ;
buff = new byte # 91; 256 # 93; ;
SockAsyncEventArgs = new SocketAsyncEventArgs # 40; # 41; ;
// abona la finalizarea unei conexiuni asincrone
SockAsyncEventArgs. Completat + = SockAsyncArgs_Completed;
# 125;
privat static void SockAsyncArgs_Completed # 40; expeditor obiect, SocketAsyncEventArgs e # 41;
# 123;
Debug. Log # 40; „Finalizat“ # 41; ;
comutator # 40; e. LastOperation # 41;
# 123;
caz SocketAsyncOperation. Conectează-te.
ProcessConnect # 40; e # 41; ;
pauză;
caz SocketAsyncOperation. Primire.
ProcessReceive # 40; e # 41; ;
pauză;
# 125;
# 125;
static void Start_Connect privat # 40; adresa string, int port # 41;
# 123;
Debug. Log # 40; "Start_Connect" # 41; ;
SockAsyncEventArgs. RemoteEndPoint = new IPEndPoint # 40; AdresălP. analiza # 40; adresa # 41;. port # 41; ;
ConnectAsync # 40; SockAsyncEventArgs # 41; ;
# 125;
privat static void ConnectAsync # 40; SocketAsyncEventArgs e # 41;
# 123;
Debug. Log # 40; "ConnectAsync" # 41; ;
bool willRaiseEvent = soclu. ConnectAsync # 40; e # 41; ;
dacă # 40;. willRaiseEvent # 41;
ProcessConnect # 40; e # 41; ;
# 125;
static void ProcessConnect privat # 40; SocketAsyncEventArgs e # 41;
# 123;
Debug. Log # 40; "ProcessConnect" # 41; ;
dacă # 40; e. SocketError == SocketError. succes # 41;
# 123;
SockAsyncEventArgs. SetBuffer # 40; piele de bivol, 0, piele de bivol. lungime # 41; ;
# 125;
altfel
Debug. Log # 40; „A pierdut conexiunea cu“ + e. RemoteEndPoint. ToString # 40; # 41; # 41; ;
privat static void SendAsync # 40; octet # 91; # 93; date # 41;
# 123;
Debug. Log # 40; "SendAsync" # 41; ;
dacă # 40; soclu. legat date. Lungime> 0 # 41;
# 123;
SocketAsyncEventArgs e = new SocketAsyncEventArgs # 40; # 41; ;
e. SetBuffer # 40; date, 0, date. lungime # 41; ;
e. Completat + = SockAsyncArgs_Completed;
bool willRaiseEvent = soclu. SendAsync # 40; e # 41; ;
// debug.log ( "bytes trimis:" + data.Length);
# 125;
# 125;
static void ProcessSend privat # 40; SocketAsyncEventArgs e # 41;
# 123;
Debug. Log # 40; "ProcessSend" # 41; ;
încerca
# 123;
dacă # 40; e. SocketError == SocketError. succes # 41;
# 123;
ReceiveAsync # 40; SockAsyncEventArgs # 41; ;
# 125;
altfel
# 123;
Debug. Log # 40; „Nu a fost trimise cu“ # 41; ;
# 125;
# 125;
captură # 40; excepţie ex # 41;
# 123;
Debug. Log # 40; "ProcessSend:" + ex. mesaj # 41; ;
# 125;
# 125;
privat static void ReceiveAsync # 40; SocketAsyncEventArgs e # 41;
# 123;
Debug. Log # 40; "ReceiveAsync" # 41; ;
încerca
# 123;
bool willRaiseEvent = soclu. ReceiveAsync # 40; e # 41; ;
dacă # 40;. willRaiseEvent # 41;
ProcessReceive # 40; e # 41; ;
# 125;
captură # 40; excepţie ex # 41;
# 123;
Debug. Log # 40; "ReceiveAsync:" + ex. mesaj # 41; ;
# 125;
# 125;
static void ProcessReceive privat # 40; SocketAsyncEventArgs e # 41;
# 123;
Debug. Log # 40; "PrecessReceive" # 41; ;
dacă # 40; e. SocketError == SocketError. succes # 41;
# 123;
încerca
# 123;
Debug. Log # 40; "Primiți bytes:" + e. BytesTransferred # 41; ;
float x = BitConverter. ToSingle # 40; e. Buffer, 0 # 41; ;
float y = BitConverter. ToSingle # 40; e. Tampon, 4 # 41; ;
float z = BitConverter. ToSingle # 40; e. Tampon, 8 # 41; ;
float x_rot = BitConverter. ToSingle # 40; e. Tampon, 12 # 41; ;
float y_rot = BitConverter. ToSingle # 40; e. Tampon, 16 # 41; ;
float z_rot = BitConverter. ToSingle # 40; e. Tampon, 20 # 41; ;
float w_rot = BitConverter. ToSingle # 40; e. Tampon, 24 # 41; ;
hist. transformare. Poziția = new Vector3 # 40; x, y, z # 41; ;
hist. transformare. rotație = new Quaternion # 40; x_rot, y_rot, z_rot, w_rot # 41; ;
//MyTrans.BroadcastMessage("AssignNewTrans",e.Buffer);
// string s = Encoding.UTF8.GetString (e.Buffer, 0, e.BytesTransferred); // obține identificatorul de comandă
//Debug.Log(s);
# 125;
captură # 40; excepţie ex # 41;
# 123;
Debug. Log # 40; "ProcessReceive:" + ex. mesaj # 41; ; //
# 125;
AssignNewTrans void privat # 40; octet # 91; # 93; b # 41;
# 123;
Debug. Log # 40; "AssignNewTrans 1" # 41; ;
Tranducere Noua. Poziția = new Vector3 # 40;
BitConverter. ToSingle # 40; b, 0 # 41; .
BitConverter. ToSingle # 40; b, 4 # 41; .
BitConverter. ToSingle # 40; b, 8 # 41;
# 41; ;
Tranducere Noua. rotație = new Quaternion # 40;
BitConverter. ToSingle # 40; b, 12 # 41; .
BitConverter. ToSingle # 40; b, 16 # 41; .
BitConverter. ToSingle # 40; b, 20 # 41; .
BitConverter. ToSingle # 40; b, 24 # 41;
# 41; ;
Debug. Log # 40; "AssignNewTrans 2" # 41; ;
Transforma t = InterpolateTransform # 40; , oldTrans Tranducere Noua, 10 # 41; ;
AssignInterTrans # 40; T # 41; ;
# 125;
static privat Transformarea InterpolateTransform # 40; Transformarea n, Transform o, rata de float # 41;
# 123;
Transforma t = MyTrans;
T. Poziția = new Vector3 # 40;
Mathf. Lerp # 40; o. poziție. x, n. poziție. x, 1 / rata # 41; - o. poziție. x,
Mathf. Lerp # 40; o. poziție. y, n. poziție. y, 1 / rata # 41; - o. poziție. y,
Mathf. Lerp # 40; o. poziție. z, n. poziție. z, 1 / rata # 41; - o. poziție. z
# 41; ;
T. rotație = new Quaternion # 40;
Mathf. Lerp # 40; o. rotație. x, n. rotație. x, 1 / rata # 41; - o. rotație. x,
Mathf. Lerp # 40; o. rotație. y, n. rotație. y, 1 / rata # 41; - o. rotație. y,
Mathf. Lerp # 40; o. rotație. z, n. rotație. z, 1 / rata # 41; - o. rotație. z,
Mathf. Lerp # 40; o. rotație. w, n. rotație. w, 1 / rata # 41; - o. rotație. w
# 41; ;
întoarce t;
# 125;
AssignInterTrans public void # 40; Transformarea T # 41;
# 123;
StartCoroutine # 40; "Inter", t # 41; ;
# 125;
IEnumerator Inter # 40; Transformarea T # 41;
# 123;
pentru # 40; int i = 0; i> 10; i ++ # 41;
# 123;
HisTrans. Poziția = new Vector3 # 40;
HisTrans. poziție. x + t. poziție. x,
HisTrans. poziție. y + t. poziție. y,
HisTrans. poziție. z + t. poziție. z
# 41; ;
HisTrans. rotație = new Quaternion # 40;
HisTrans. rotație. x + t. rotație. x,
HisTrans. rotație. y + t. rotație. y,
HisTrans. rotație. z + t. rotație. z,
HisTrans. rotație. w + t. rotație. w
# 41; ;
randament întoarce noi WaitForSeconds # 40; 1f / 10f # 41; ;
# 125;
# 125;
Start void # 40; # 41;
# 123;
Debug. Log # 40; "Start" # 41; ;
MyTrans mi =. transformare;
oldTrans = el. transformare;
= oldTrans Tranducere Noua;
HisTrans = el. transformare;
hist = el. transformare;
init # 40; # 41; ; // pregătesc conexiunea la server
Start_Connect # 40; "127.0.0.1". 9095 # 41; ; // conecta la server
StartCoroutine # 40; SendFunc # 40; # 41; # 41; ;
StartCoroutine # 40; Res # 40; # 41; # 41; ;
IEnumerator SendFunc # 40; # 41;
# 123;
Debug. Log # 40; "SendFunc" # 41; ;
în timp ce # 40; adevărat # 41;
# 123;
dacă # 40; sw # 41; # 123;
Debug. Log # 40; „Trimite“ # 41; ;
SendAsync # 40; Get_Transform_Data # 40; # 41; # 41; ;
altfel
Debug. Log # 40; „Didnt trimis“ # 41; ;
randament întoarce noi WaitForSeconds # 40; 1 # 41; ;
# 125;
IEnumerator Res # 40; # 41;
# 123;
Debug. Log # 40; "Res" # 41; ;
în timp ce # 40; adevărat # 41;
# 123;
încerca # 123;
dacă # 40; soclu. Disponibil> 0 # 41; // în cazul în care datele au venit
# 123;
/ * I ++;
Debug.log ( "i =" + i);
SocketAsyncEventArgs SockAsyncEventArgs1 = new SocketAsyncEventArgs ();
SockAsyncEventArgs1.Completed + = SockAsyncArgs_Completed; * /
//Thread.Sleep(500);
ProcessSend # 40; SockAsyncEventArgs # 41; ; // obține ei
# 125;
captură # 40; excepţie e # 41;
# 123;
Debug. Log # 40; "Res:" + e. mesaj # 41; ;
# 125;
randament întoarce noi WaitForSeconds # 40; Timpul. deltaTime # 41; ;
# 125;
Este tot codul unul, am identificat metoda problemă în așa fel, el prima parte din a doua.
care este problema. cum să o rezolve? ATP
seaman a scris (a): Ei bine, în mod ideal, pentru a înțelege nu este ușor. Nu-mi place variabilele statice și inițializarea lor. Mi-ar fi trecut din clasa statică, moștenită de la monobehevior, o clasă separată statică. Și apoi într-adevăr m-am gândit, dacă eroarea persistă.
ATP bine. încerca
seaman a scris (a): Unde este celălalt fir? Nu știu cu adevărat prize. Poate socket.SendAsync (e); Sau într-o funcție similară asincron? În caz contrar, nu înțeleg eroarea în sine.
Este mai bine să conducă linia în care codul de eroare și fără cocoloașe - fără pauze.
O priză pe cealaltă atârnă de filet. Și este din acest alt fir încearcă să proceseze comanda, iar apoi schimbați transformă. yun și injuriile. Ca o opțiune - puteți pune pachetele primite în lista mica, in mod natural sincroniza toate cu atenție și să le ocupe deja pe Update - selectați din lista de sincronizat și de a face procesul.
Developer Atom de pescuit - pescuit pe float, Donk, zbura de pescuit, trolling în perioada post-nuclear.
Developer Atom de pescuit II - Primul MMO 3D despre pescuit
seaman a scris (a): Unde este celălalt fir? Nu știu cu adevărat prize. Poate socket.SendAsync (e); Sau într-o funcție similară asincron? În caz contrar, nu înțeleg eroarea în sine.
Este mai bine să conducă linia în care codul de eroare și fără cocoloașe - fără pauze.
O priză pe cealaltă atârnă de filet. Și este din acest alt fir încearcă să proceseze comanda, iar apoi schimbați transformă. yun și injuriile. Ca o opțiune - puteți pune pachetele primite în lista mica, in mod natural sincroniza toate cu atenție și să le ocupe deja pe Update - selectați din lista de sincronizat și de a face procesul.
în lista de tip spisochek? podea înseamnă că obține date de la server, apoi împinge datele în lista public static
Ascultă, am fost întrebat într-un forum, în cazul în care oamenii supărat și Nitsche nu explică în detaliu, dar a spus că cauza firului O metodă în care firul B - necesitatea juzat - invoca. Pliz explica exact cum juzat? și am găsit clasa Controle.Invoke, deci este pentru formulare
seaman a scris (a): Unde este celălalt fir? Nu știu cu adevărat prize. Poate socket.SendAsync (e); Sau într-o funcție similară asincron? În caz contrar, nu înțeleg eroarea în sine.
Este mai bine să conducă linia în care codul de eroare și fără cocoloașe - fără pauze.
O priză pe cealaltă atârnă de filet. Și este din acest alt fir încearcă să proceseze comanda, iar apoi schimbați transformă. yun și injuriile. Ca o opțiune - puteți pune pachetele primite în lista mica, in mod natural sincroniza toate cu atenție și să le ocupe deja pe Update - selectați din lista de sincronizat și de a face procesul.
ATP chyuvaka, am făcut-o așa cum ați scris, și totul funcționează XD esti cel mai tare după Kona-chan! XD
seaman a scris (a): Unde este celălalt fir? Nu știu cu adevărat prize. Poate socket.SendAsync (e); Sau într-o funcție similară asincron? În caz contrar, nu înțeleg eroarea în sine.
Este mai bine să conducă linia în care codul de eroare și fără cocoloașe - fără pauze.
O priză pe cealaltă atârnă de filet. Și este din acest alt fir încearcă să proceseze comanda, iar apoi schimbați transformă. yun și injuriile. Ca o opțiune - puteți pune pachetele primite în lista mica, in mod natural sincroniza toate cu atenție și să le ocupe deja pe Update - selectați din lista de sincronizat și de a face procesul.
ATP chyuvaka, am făcut-o așa cum ați scris, și totul funcționează XD esti cel mai tare după Kona-chan! XD
Despre blocarea nu a uitat? Și pot exista probleme cu sincronizare atunci când un fir de soclu va încerca să adăugați un pachet, iar firul principal va lua doar datele de acolo.
Developer Atom de pescuit - pescuit pe float, Donk, zbura de pescuit, trolling în perioada post-nuclear.
Developer Atom de pescuit II - Primul MMO 3D despre pescuit
seaman a scris (a): Unde este celălalt fir? Nu știu cu adevărat prize. Poate socket.SendAsync (e); Sau într-o funcție similară asincron? În caz contrar, nu înțeleg eroarea în sine.
Este mai bine să conducă linia în care codul de eroare și fără cocoloașe - fără pauze.
O priză pe cealaltă atârnă de filet. Și este din acest alt fir încearcă să proceseze comanda, iar apoi schimbați transformă. yun și injuriile. Ca o opțiune - puteți pune pachetele primite în lista mica, in mod natural sincroniza toate cu atenție și să le ocupe deja pe Update - selectați din lista de sincronizat și de a face procesul.
ATP chyuvaka, am făcut-o așa cum ați scris, și totul funcționează XD esti cel mai tare după Kona-chan! XD
Despre blocarea nu a uitat? Și pot exista probleme cu sincronizare atunci când un fir de soclu va încerca să adăugați un pachet, iar firul principal va lua doar datele de acolo.
Pierderile xD uitate adauga ATP
Utilizatorii ce navighează pe acest forum: Niciun utilizator înregistrat și 11 vizitatori: