Jump to content
Unity Insider Forum

Nach neuem Object im Spiel Charakter spawn doppelt


Recommended Posts

[Gelöst]

Mein Fehler... Das Spawnobjekt war irgendwie in die Kanone gerutscht und ich habs mitdupliziert...dummer Fehler

 

Liebe Forenmitglieder,

 

Ich habe ein Projekt, das auf dem M2h Networking Tutorial basiert.

In diesem können Spieler sich im Multiplayer gegenseitig mit Kugeln beschiesen....(sehr spannend ^^)

Nun wollte ich jetzt eine Kanone implementieren.Dies hat eigentlich gut funktioniert....bis ich die Kanone dupliziert habe.

Seit dem spawnen immer zwei Char's pro joinenden Spieler....

 

Im Anhang findet ihr meine Scripts,der Aufbau dürfte Selbsterklätend sein.

 

 

Diese Script steuert dem ParticleSpawner

und spawnt das Objekt.

using UnityEngine;

using System.Collections;



public class cannonEmitter : MonoBehaviour

{

public GameObject projectile;

public float projectileSpeed = 20;

public int emitParticleTime = 20;



int counterEmitter = 0;



// Use this for initialization

void Start ()

{



}



// Update is called once per frame

void FixedUpdate ()

{

	if (particleEmitter.emit == true) {

		if (counterEmitter <= emitParticleTime) {

			counterEmitter++;

		} else {



			particleEmitter.emit = false;

			counterEmitter = 0;



		}

	}

}

void Fire ()

{

	var geschoss = Network.Instantiate (projectile, transform.position, transform.rotation, 0);



	particleEmitter.emit = true;

	counterEmitter = 0;

	audio.Play ();

	networkView.RPC ("FireNetwork", RPCMode.Others, networkView.viewID);

}

[RPC]

void FireNetwork (UnityEngine.NetworkViewID id)

{

	if (id == networkView.viewID) {

		particleEmitter.emit = true;

		counterEmitter = 0;

	}

}

}

 

dieses Script verwaltet den trigger und gibt den Schiess-Befehl an den untergeordneten particleEmiter

 

using UnityEngine;
using System.Collections;

public class KanoneTrigger : MonoBehaviour {
bool isInTrigger = false;
bool isUsingCanon = false;
bool isLoaded = false;
public GameObject canonEmitter;
public string interactionAxisName = "Interaction";
public string reloadButtonName= "Reload";
public string fireButtonName= "Fire4";


// Use this for initialization
void Start () {

}
void OnGUI ()
{
	if(isUsingCanon){
		GUI.Label(new Rect(100,100,50,20),"kanone wird benutzt");
	}
}
// Update is called once per frame
void Update () {
	//bei Druck der InteractTaste und wenn Char im Trigger wird InteractEvent aufgerufen
	if((Input.GetAxis(interactionAxisName)==1)&&isInTrigger)
	{
	InteractionEventHandler ();
	}
	//Nachladen wird aufgerufen
	if(isUsingCanon&&isLoaded==false&&Input.GetButtonUp(reloadButtonName)){
		Reload();
	}
	if(isUsingCanon&&isLoaded==true&&Input.GetButtonUp(fireButtonName)){
		Fire();
	}

}
void InteractionEventHandler ()
{
	//wird Umgekehrt
	switch(isUsingCanon){
	case true:isUsingCanon=false;break;
	case false:isUsingCanon=true;break;	
	}
}
void Reload ()
{
	/* Zeitverzögerung noch einbauen*/
	isLoaded =true;
}
void Fire ()
{
	isLoaded = false;
	canonEmitter.SendMessage("Fire");

}
// Netzwerksync des Ladezustandes
void OnSerializeNetworkView(BitStream stream,NetworkMessageInfo info)
{
	if(stream.isWriting){
		bool temp_isLoaded=isLoaded;
		stream.Serialize(ref temp_isLoaded);
		}else{
		bool temp_isLoaded=false;
		stream.Serialize(ref temp_isLoaded);
		isLoaded = temp_isLoaded;
	}

}
void OnTriggerEnter (Collider coll) {
if(coll.gameObject.tag=="Player"){
	 isInTrigger = true;
	}
}
void OnTriggerExit (Collider coll) {
if(coll.gameObject.tag=="Player"){
	 isInTrigger = false;
	isUsingCanon = false;
	}
}

}

Falls ihr noch weitere Scripts des Projekts benötigt schreibt mich einfach an <_<

 

Edit:

Hier noch das Spawnscript

/* 
*  This file is part of the Unity networking tutorial by M2H (http://www.M2H.nl)
*  The original author of this code Mike Hergaarden, even though some small parts 
*  are copied from the Unity tutorials/manuals.
*  Feel free to use this code for your own projects, drop me a line if you made something exciting! 
*/
#pragma strict
#pragma implicit
#pragma downcast

public var playerPrefab : Transform;


function OnServerInitialized(){
Spawnplayer();
}

function OnConnectedToServer(){
Spawnplayer();
}

function Spawnplayer(){

var myNewTrans : Transform = Network.Instantiate(playerPrefab, transform.position, transform.rotation, 0);

}




function OnPlayerDisconnected(player: NetworkPlayer) {
Debug.Log("Clean up after player " + player);
Network.RemoveRPCs(player);
Network.DestroyPlayerObjects(player);
}

function OnDisconnectedFromServer(info : NetworkDisconnection) {
Debug.Log("Clean up a bit after server quit");
Network.RemoveRPCs(Network.player);
Network.DestroyPlayerObjects(Network.player);

/* 
* Note that we only remove our own objects, but we cannot remove the other players 
* objects since we don't know what they are; we didn't keep track of them. 
* In a game you would usually reload the level or load the main menu level anyway .
* 
* In fact, we could use "Application.LoadLevel(Application.loadedLevel);" here instead to reset the scene.
*/
Application.LoadLevel(Application.loadedLevel);
}

 

Gruß,

Jonichecker

Link zu diesem Kommentar
Auf anderen Seiten teilen

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Lädt...
×
×
  • Neu erstellen...