Jump to content
Unity Insider Forum

PhotonNetwork.Destroy Problem


Morenar

Recommended Posts

Hallo,

 

wieder einmal ein kleines Problem mit Photon, obwohl alles richtig ist.

 

Ich habe eine KI erstellt die so Aufgebaut ist..

 

->GEHIRN/MANAGER (PhotonView + MainScript)

-->UNTERORDNER

--->OBJ1 (PhotonView)

-->-OBJ" (PhotonView)

 

Jetzt kann es passieren das die KI getötet wird und im Gehirn/Manager dieses Script aktiviert wird

 

function Damage(damage : float)
{
aihitPoints -= damage;
if(aihitPoints <= 0 && dead == false)
   {
 dead = true;
   for(var i = 0; i < destroy_ob.length; i++)
   {
    //HIER HÄNGEN OBJ1 + OBJ2 in der var destroy_ob : GameObject[];
    PhotonNetwork.Destroy(destroy_ob[i]);
   }
   PhotonNetwork.Destroy(gameObject);
   }
}

 

,doch wenn er die OBJ1 + OBJ2 löscht kommt auch noch zusÄtzlich die Meldung..

 

[

OnDestroy() seems to be called without PhotonNetwork.Destroy()?! GameObject: Backvision (UnityEngine.GameObject) Application.isLoadingLevel: False

UnityEngine.Debug:LogError(Object)

PhotonView:OnDestroy() (at Assets/Plugins/PhotonNetwork/PhotonView.cs:171)

]

 

die ich nicht verstehe, weil ich doch das im Network Instantiate Objekt mit PhotonNetwork.Destroy()?

 

 

Hat jmd für mich einen Rat?

 

 

Danke im Vorraus

 

 

TheMorenar

Link zu diesem Kommentar
Auf anderen Seiten teilen

a.)mach mal bitte um das komplette if n try und lass dir den fehler ausgeben vielleicht zeigt dir das was genaueres an.

ich hab da so ne idee

 

b.)baue in das for konstrukt bitte mal 2 if abfragen ein


if(PhotonNetwork.Destroy(destroy_ob[i]).exists==true){
}else{
}

+

if(PhotonNetwork.Destroy(gameObject).exists==true){
}else{
}

 

 

function Damage(damage : float)
{
aihitPoints -= damage;
if(aihitPoints <= 0 && dead == false)
{
	 dead = true;
	   for(var i = 0; i < destroy_ob.length; i++)
	   {
		//HIER HÄNGEN OBJ1 + OBJ2 in der var destroy_ob : GameObject[];
	  if(PhotonNetwork.Destroy(destroy_ob[i]).exists==true){
		  PhotonNetwork.Destroy(destroy_ob[i]);
	  }else{
	  }
 }
	  if(PhotonNetwork.Destroy(gameObject).exists==true){
				PhotonNetwork.Destroy(gameObject);
	  }else{
	  }
  }
}

 

 

ich benutze kein photon sry musst selber schauen wie du auf existenz prü+fst

Link zu diesem Kommentar
Auf anderen Seiten teilen

das exists mag er nicht so

 

FEHLER:

Assets/11 Prefabs + Scripts/Scripts/KI/FirstZombie/Brain_manage.js(492,54): BCE0019: 'exists' is not a member of 'void'.

 

hups hab das untere überlesen, ich werd mal schaun wie ich das am besten machen kann, danke dir troztdem vllt fällt dir ja noch was ein. ^^

 

 

Achja nebenbei wieso kann ich eig nicht das Hauptobjekt einfach löschen, wieso zeigt er mir dann auch die fehlermeldung an, kann mir jmd die idee der entwickler dahinter sagen oder hab ich mich da irgendwas falsch gemacht?

Link zu diesem Kommentar
Auf anderen Seiten teilen

dann lass das exist weg und mach es dreckig :

 

function Damage(damage : float)
{
aihitPoints -= damage;
if(aihitPoints <= 0 && dead == false)
	{
			 dead = true;
			   for(var i = 0; i < destroy_ob.length; i++)
			   {
					//HIER HÄNGEN OBJ1 + OBJ2 in der var destroy_ob : GameObject[];
				   try{
					   PhotonNetwork.Destroy(destroy_ob[i]);
				   }catch(err){						  
					  //kein error augeben 
				   }
			   }
			   try{
				   PhotonNetwork.Destroy(gameObject);
			   }catch(err){
				   //kein error augeben 
			   }
	  }
}

 

 

oder wende dich an photon :)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Leider ohne erfolg, es wird die von oben genannte Fehlermeldung angezeigt

 

[

OnDestroy() seems to be called without PhotonNetwork.Destroy()?! GameObject: Backvision (UnityEngine.GameObject) Application.isLoadingLevel: False

UnityEngine.Debug:LogError(Object)

PhotonView:OnDestroy() (at Assets/Plugins/PhotonNetwork/PhotonView.cs:171)

]

Link zu diesem Kommentar
Auf anderen Seiten teilen

Das ist das Problem das wird in dem PhotonView.cs, Zeile 171 gezeigt.

 

public void OnDestroy()
{
	PhotonNetwork.networkingPeer.RemovePhotonView(this);
	if (!this.destroyedByPhotonNetworkOrQuit && !Application.isLoadingLevel)
	{
		if (this.instantiationId > 0)
		{
			// if this viewID was not manually assigned (and we're not shutting down or loading a level), you should use PhotonNetwork.Destroy() to get rid of GOs with PhotonViews
			Debug.LogError("OnDestroy() seems to be called without PhotonNetwork.Destroy()?! GameObject: " + this.gameObject + " Application.isLoadingLevel: " + Application.isLoadingLevel);
		}
		else
		{
			// this seems to be a manually instantiated PV. if it's local, we could warn if the ID is not in the allocated-list
			if (this.viewID <= 0)
			{
				Debug.LogWarning(string.Format("OnDestroy manually allocated PhotonView {0}. The viewID is 0. Was it ever (manually) set?", this));
			}
			else if (this.isMine && !PhotonNetwork.manuallyAllocatedViewIds.Contains(this.viewID))
			{
				Debug.LogWarning(string.Format("OnDestroy manually allocated PhotonView {0}. The viewID is local (isMine) but not in manuallyAllocatedViewIds list. Use UnAllocateViewID() after you destroyed the PV.", this));
			}
		}
	}
	if (PhotonNetwork.networkingPeer.instantiatedObjects.ContainsKey(this.instantiationId))
	{
		Debug.LogWarning(string.Format("OnDestroy for PhotonView {0} but GO is still in instantiatedObjects. instantiationId: {1}. Use PhotonNetwork.Destroy(). {2}", this, this.instantiationId, Application.isLoadingLevel ? "Loading new scene caused this." : ""));
	}
}

 

und genau da liegt mein problem ich benutze bzw. verwende doch die vorgegebene PhotonNetwork.Destroy()....

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.

×
×
  • Neu erstellen...