Miért a hiba beindul, bár a korábbi volt minden rendben
PRIF. hiba vesz
get_transform csak akkor hívják a fő téma.
Konstruktőrök és a helyszíni inicializáló végrehajtásra kerül a betöltés szál betöltésekor egy jelenetet.
végzésekor ProcessReceive módszer. Korábban ez nem látszott. minden szabályt működik. ma az első alkalommal láttam ezt a hibát.
Itt a kód
használatával UnityEngine;
használatával System.Collections;
használatával System.Collections.Generic;
használatával System.Linq;
segítségével System.Text;
használatával System.Net;
használatával System.Net.Sockets;
használatával System.Threading;
using System;
public class Client. MonoBehaviour # 123;
private static Socket aljzat;
private static SocketAsyncEventArgs SockAsyncEventArgs; // kifogást aszinkron művelet egy socket
private static byte # 91; # 93; barnássárga;
privát static int i = 0;
nyilvános GameObject engem;
nyilvános GameObject ő;
privát Transform HisTrans;
private static Transform Hist;
private static Transform MyTrans;
private static Transform oldTrans;
private static Transform newTrans;
private static void sw = false;
private static void init # 40; # 41;
# 123;
Debug. Bejelentkezés # 40; "Init" # 41; ;
socket = new Socket # 40; AddressFamily. Internetwork. SocketType. Patak. ProtocolType. tcp # 41; ;
barnássárga = új bájt # 91; 256 # 93; ;
SockAsyncEventArgs = new SocketAsyncEventArgs # 40; # 41; ;
// feliratkozás befejezése aszinkron kapcsolat
SockAsyncEventArgs. Elvégzett + = SockAsyncArgs_Completed;
# 125;
private static void SockAsyncArgs_Completed # 40; tárgy feladó, SocketAsyncEventArgs e # 41;
# 123;
Debug. Bejelentkezés # 40; „Kész” # 41; ;
kapcsoló # 40; e. LastOperation # 41;
# 123;
ügy SocketAsyncOperation. Csatlakozni.
ProcessConnect # 40; e # 41; ;
break;
ügy SocketAsyncOperation. Kap.
ProcessReceive # 40; e # 41; ;
break;
# 125;
# 125;
private static void Start_Connect # 40; húr cím, int port # 41;
# 123;
Debug. Bejelentkezés # 40; "Start_Connect" # 41; ;
SockAsyncEventArgs. RemoteEndPoint = new IPEndPoint # 40; IPAddress. elemez # 40; cím # 41;. kikötő # 41; ;
ConnectAsync # 40; SockAsyncEventArgs # 41; ;
# 125;
private static void ConnectAsync # 40; SocketAsyncEventArgs e # 41;
# 123;
Debug. Bejelentkezés # 40; "ConnectAsync" # 41; ;
bool willRaiseEvent = socket. ConnectAsync # 40; e # 41; ;
ha # 40;. willRaiseEvent # 41;
ProcessConnect # 40; e # 41; ;
# 125;
private static void ProcessConnect # 40; SocketAsyncEventArgs e # 41;
# 123;
Debug. Bejelentkezés # 40; "ProcessConnect" # 41; ;
ha # 40; e. SocketError == SocketError. siker # 41;
# 123;
SockAsyncEventArgs. SetBuffer # 40; barnássárga, 0, barnássárga. hossz # 41; ;
# 125;
más
Debug. Bejelentkezés # 40; „Elveszett a kapcsolat a” + e. RemoteEndPoint. toString # 40; # 41; # 41; ;
private static void SendAsync # 40; byte # 91; # 93; adat # 41;
# 123;
Debug. Bejelentkezés # 40; "SendAsync" # 41; ;
ha # 40; aljzatba. összefüggő adatokat. Hossz> 0 # 41;
# 123;
SocketAsyncEventArgs e = new SocketAsyncEventArgs # 40; # 41; ;
e. SetBuffer # 40; adatok, 0, adatok. hossz # 41; ;
e. Elvégzett + = SockAsyncArgs_Completed;
bool willRaiseEvent = socket. SendAsync # 40; e # 41; ;
// debug.log ( "küldött bájtok:" + data.Length);
# 125;
# 125;
private static void ProcessSend # 40; SocketAsyncEventArgs e # 41;
# 123;
Debug. Bejelentkezés # 40; "ProcessSend" # 41; ;
megpróbál
# 123;
ha # 40; e. SocketError == SocketError. siker # 41;
# 123;
ReceiveAsync # 40; SockAsyncEventArgs # 41; ;
# 125;
más
# 123;
Debug. Bejelentkezés # 40; „Nem mégegyszer” # 41; ;
# 125;
# 125;
fogás # 40; kivétel ex # 41;
# 123;
Debug. Bejelentkezés # 40; "ProcessSend:" + ex. üzenet # 41; ;
# 125;
# 125;
private static void ReceiveAsync # 40; SocketAsyncEventArgs e # 41;
# 123;
Debug. Bejelentkezés # 40; "ReceiveAsync" # 41; ;
megpróbál
# 123;
bool willRaiseEvent = socket. ReceiveAsync # 40; e # 41; ;
ha # 40;. willRaiseEvent # 41;
ProcessReceive # 40; e # 41; ;
# 125;
fogás # 40; kivétel ex # 41;
# 123;
Debug. Bejelentkezés # 40; "ReceiveAsync:" + ex. üzenet # 41; ;
# 125;
# 125;
private static void ProcessReceive # 40; SocketAsyncEventArgs e # 41;
# 123;
Debug. Bejelentkezés # 40; "PrecessReceive" # 41; ;
ha # 40; e. SocketError == SocketError. siker # 41;
# 123;
megpróbál
# 123;
Debug. Bejelentkezés # 40; "Kap bájtok:" + e. BytesTransferred # 41; ;
float x = BitConverter. ToSingle # 40; e. Buffer, 0 # 41; ;
float y = BitConverter. ToSingle # 40; e. Puffert, 4 # 41; ;
float z = BitConverter. ToSingle # 40; e. Buffer, 8 # 41; ;
float x_rot = BitConverter. ToSingle # 40; e. Puffert, 12 # 41; ;
float y_rot = BitConverter. ToSingle # 40; e. Buffer, 16 # 41; ;
float z_rot = BitConverter. ToSingle # 40; e. Puffer, 20 # 41; ;
float w_rot = BitConverter. ToSingle # 40; e. Buffer, 24 # 41; ;
Hist. átalakítani. pozíció = new Vector3 # 40; x, y, z # 41; ;
Hist. átalakítani. forgatás = new kvaterniócsoport # 40; x_rot, y_rot, z_rot, w_rot # 41; ;
//MyTrans.BroadcastMessage("AssignNewTrans",e.Buffer);
// karakterlánc s = Encoding.UTF8.GetString (e.Buffer, 0, e.BytesTransferred); // A parancs azonosítóval
//Debug.Log(s);
# 125;
fogás # 40; kivétel ex # 41;
# 123;
Debug. Bejelentkezés # 40; "ProcessReceive:" + ex. üzenet # 41; ; //
# 125;
private void AssignNewTrans # 40; byte # 91; # 93; b # 41;
# 123;
Debug. Bejelentkezés # 40; "AssignNewTrans 1" # 41; ;
newTrans. pozíció = new Vector3 # 40;
BitConverter. ToSingle # 40; b, 0 # 41; .
BitConverter. ToSingle # 40; b, 4 # 41; .
BitConverter. ToSingle # 40; b, 8 # 41;
# 41; ;
newTrans. forgatás = new kvaterniócsoport # 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. Bejelentkezés # 40; "AssignNewTrans 2" # 41; ;
Transform t = InterpolateTransform # 40; newTrans, oldTrans, 10 # 41; ;
AssignInterTrans # 40; t # 41; ;
# 125;
private static Transform InterpolateTransform # 40; Transform N, Transform o, lebegnek ráta # 41;
# 123;
Transform t = MyTrans;
t. pozíció = new Vector3 # 40;
Mathf. Lerp # 40; o. helyzetbe. X, n. helyzetbe. x, 1 / sebesség # 41; - o. helyzetbe. x,
Mathf. Lerp # 40; o. helyzetbe. y, n. helyzetbe. y, 1 / sebesség # 41; - o. helyzetbe. y,
Mathf. Lerp # 40; o. helyzetbe. Z, n. helyzetbe. Z, 1 / sebesség # 41; - o. helyzetbe. Z
# 41; ;
t. forgatás = new kvaterniócsoport # 40;
Mathf. Lerp # 40; o. forgatást. X, n. forgatást. x, 1 / sebesség # 41; - o. forgatást. x,
Mathf. Lerp # 40; o. forgatást. y, n. forgatást. y, 1 / sebesség # 41; - o. forgatást. y,
Mathf. Lerp # 40; o. forgatást. Z, n. forgatást. Z, 1 / sebesség # 41; - o. forgatást. Z,
Mathf. Lerp # 40; o. forgatást. w, n. forgatást. W, 1 / sebesség # 41; - o. forgatást. w
# 41; ;
vissza t;
# 125;
public void AssignInterTrans # 40; Átalakítás t # 41;
# 123;
StartCoroutine # 40; "Inter", t # 41; ;
# 125;
IEnumerator Inter # 40; Átalakítás t # 41;
# 123;
mert # 40; int i = 0; i> 10; i ++ # 41;
# 123;
HisTrans. pozíció = new Vector3 # 40;
HisTrans. helyzetbe. x + t. helyzetbe. x,
HisTrans. helyzetbe. y + t. helyzetbe. y,
HisTrans. helyzetbe. z + t. helyzetbe. Z
# 41; ;
HisTrans. forgatás = new kvaterniócsoport # 40;
HisTrans. forgatást. x + t. forgatást. x,
HisTrans. forgatást. y + t. forgatást. y,
HisTrans. forgatást. z + t. forgatást. Z,
HisTrans. forgatást. w + t. forgatást. w
# 41; ;
hozam visszatér új WaitForSeconds # 40; 1f / 10f # 41; ;
# 125;
# 125;
void indítása # 40; # 41;
# 123;
Debug. Bejelentkezés # 40; "Start" # 41; ;
MyTrans = me. átalakítani;
oldTrans = ő. átalakítani;
newTrans = oldTrans;
HisTrans = ő. átalakítani;
Hist = ő. átalakítani;
init # 40; # 41; ; // előkészíti a kapcsolatot a szerverrel
Start_Connect # 40; "127.0.0.1". 9095 # 41; ; // kapcsolódni a szerverhez
StartCoroutine # 40; SendFunc # 40; # 41; # 41; ;
StartCoroutine # 40; res # 40; # 41; # 41; ;
IEnumerator SendFunc # 40; # 41;
# 123;
Debug. Bejelentkezés # 40; "SendFunc" # 41; ;
míg # 40; igaz # 41;
# 123;
ha # 40; sw # 41; # 123;
Debug. Bejelentkezés # 40; A „Küldés” # 41; ;
SendAsync # 40; Get_Transform_Data # 40; # 41; # 41; ;
más
Debug. Bejelentkezés # 40; „Didnt küldött” # 41; ;
hozam visszatér új WaitForSeconds # 40; 1 # 41; ;
# 125;
IEnumerator Res # 40; # 41;
# 123;
Debug. Bejelentkezés # 40; "Res" # 41; ;
míg # 40; igaz # 41;
# 123;
megpróbál # 123;
ha # 40; aljzatba. Elérhető> 0 # 41; // ha az adatok jöttek
# 123;
/ * I ++;
Debug.log ( "i =" + i);
SocketAsyncEventArgs SockAsyncEventArgs1 = új SocketAsyncEventArgs ();
SockAsyncEventArgs1.Completed + = SockAsyncArgs_Completed; * /
//Thread.Sleep(500);
ProcessSend # 40; SockAsyncEventArgs # 41; ; // őket
# 125;
fogás # 40; kivétel e # 41;
# 123;
Debug. Bejelentkezés # 40; "Res:" + e. üzenet # 41; ;
# 125;
hozam visszatér új WaitForSeconds # 40; Time. deltaTime # 41; ;
# 125;
Ez mind egy kód, csak azonosította a problémát eljárás oly módon, hogy az első része a második.
mi a probléma. hogyan lehet megoldani? ATP
tengerész írta (a): Nos, ideális esetben, hogy megértsék, nem könnyű. Nem tetszik a statikus változók és visszaállítás. Azt telt a statikus osztály, örökölt monobehevior külön statikus osztály. És akkor tényleg azt hittem, ha a hiba továbbra is fennáll.
ATP rendben. megpróbál
tengerész írta (a): Hol van a másik szál? Nem igazán tudom, aljzatok. Talán socket.SendAsync (e);? Vagy hasonló aszinkron funkciót? Egyébként nem értem a hibát is.
Sokkal jobb, hogy vezeti a sort, amelyben a hibakódot és csomómentes - megszakítás nélkül.
A aljzatába a másik szál lóg. És ez ettől a másik szál próbálja feldolgozni a parancsot, majd változtassa átalakít. Yun esküszik. Mint lehetőség -, akkor tegye a vett csomagok a kis lista, természetesen szinkronizálja az összes gondosan kezelni őket már az Update - válaszd ki a listából a szinkronizált és ezt a folyamatot.
Fejlesztő Atom Horgászás - Fishing on az úszó, donk, legyező horgászat, pergetett a poszt-nukleáris időszakban.
Fejlesztő Atom Fishing II - Az első 3D-s MMO a halászat
tengerész írta (a): Hol van a másik szál? Nem igazán tudom, aljzatok. Talán socket.SendAsync (e);? Vagy hasonló aszinkron funkciót? Egyébként nem értem a hibát is.
Sokkal jobb, hogy vezeti a sort, amelyben a hibakódot és csomómentes - megszakítás nélkül.
A aljzatába a másik szál lóg. És ez ettől a másik szál próbálja feldolgozni a parancsot, majd változtassa átalakít. Yun esküszik. Mint lehetőség -, akkor tegye a vett csomagok a kis lista, természetesen szinkronizálja az összes gondosan kezelni őket már az Update - válaszd ki a listából a szinkronizált és ezt a folyamatot.
A spisochek típusú lista? emeleti azt jelenti, hogy az adatokat a szerverre, majd lök az adatokat public static List
Figyelj, én már kérte az egyik fórumon, ahol az emberek dühösek és Nitsche nem fejti ki részletesen, de azt mondta, hogy az oka a menet eljárás, amelyben szál B - szükség juzat - hivatkozhat. Pliz pontosan elmagyarázni, hogyan juzat? és azt találtam, Controle.Invoke osztály, így a formák
tengerész írta (a): Hol van a másik szál? Nem igazán tudom, aljzatok. Talán socket.SendAsync (e);? Vagy hasonló aszinkron funkciót? Egyébként nem értem a hibát is.
Sokkal jobb, hogy vezeti a sort, amelyben a hibakódot és csomómentes - megszakítás nélkül.
A aljzatába a másik szál lóg. És ez ettől a másik szál próbálja feldolgozni a parancsot, majd változtassa átalakít. Yun esküszik. Mint lehetőség -, akkor tegye a vett csomagok a kis lista, természetesen szinkronizálja az összes gondosan kezelni őket már az Update - válaszd ki a listából a szinkronizált és ezt a folyamatot.
ATP chyuvaka, tettem, amit írt, és minden működik XD te vagy a legkirályabb után Kona-chan! XD
tengerész írta (a): Hol van a másik szál? Nem igazán tudom, aljzatok. Talán socket.SendAsync (e);? Vagy hasonló aszinkron funkciót? Egyébként nem értem a hibát is.
Sokkal jobb, hogy vezeti a sort, amelyben a hibakódot és csomómentes - megszakítás nélkül.
A aljzatába a másik szál lóg. És ez ettől a másik szál próbálja feldolgozni a parancsot, majd változtassa átalakít. Yun esküszik. Mint lehetőség -, akkor tegye a vett csomagok a kis lista, természetesen szinkronizálja az összes gondosan kezelni őket már az Update - válaszd ki a listából a szinkronizált és ezt a folyamatot.
ATP chyuvaka, tettem, amit írt, és minden működik XD te vagy a legkirályabb után Kona-chan! XD
A zárolási nem elfelejteni? És lehet, hogy bajok időzítés, ha a socket szál megpróbálja felvenni a csomagot, és a fő szál csak hogy az adatok onnan.
Fejlesztő Atom Horgászás - Fishing on az úszó, donk, legyező horgászat, pergetett a poszt-nukleáris időszakban.
Fejlesztő Atom Fishing II - Az első 3D-s MMO a halászat
tengerész írta (a): Hol van a másik szál? Nem igazán tudom, aljzatok. Talán socket.SendAsync (e);? Vagy hasonló aszinkron funkciót? Egyébként nem értem a hibát is.
Sokkal jobb, hogy vezeti a sort, amelyben a hibakódot és csomómentes - megszakítás nélkül.
A aljzatába a másik szál lóg. És ez ettől a másik szál próbálja feldolgozni a parancsot, majd változtassa átalakít. Yun esküszik. Mint lehetőség -, akkor tegye a vett csomagok a kis lista, természetesen szinkronizálja az összes gondosan kezelni őket már az Update - válaszd ki a listából a szinkronizált és ezt a folyamatot.
ATP chyuvaka, tettem, amit írt, és minden működik XD te vagy a legkirályabb után Kona-chan! XD
A zárolási nem elfelejteni? És lehet, hogy bajok időzítés, ha a socket szál megpróbálja felvenni a csomagot, és a fő szál csak hogy az adatok onnan.
elfelejtett xD veszteségek hozzá ATP
Jelenlévő fórumozók: nincs regisztrált felhasználó és vendégek: 11