Jump to content
Unity Insider Forum

Kanonen die versetzt schisst


SchneeSniperLevel

Recommended Posts

Hallo Liebe Community

 

 

Also ich habe 2 Scripts die nacheinander schissen sollten.

Das erste ist nur auf einer Kanone und das 2. ist auf mehren und das 1.schisst zuerst...

Das erste Script:

var KanonenKugel : Transform;
var rauchNachSchuss : Transform;
var schussgeschwindigkeint : float;
var wait : boolean  = false;
var feuer: boolean = false;
var timeToWait = 3;
private var elapsedTime : float = 0;
static var Ok : boolean = false;

function Update ()
{

 elapsedTime += Time.deltaTime;
 if(elapsedTime > timeToWait)
{
  wait = true;
  elapsedTime = 0;
}

}



function OnGUI ()
{
 if (wait == true)
 {
if (GUI.Button (Rect (200,350,150,30), "Feuer!"))
{
  Feuern();
  Ok =true;
  wait = false;

}
 }

}
function Feuern()
{
  rauchsimulation();
  var schiessen = Instantiate( KanonenKugel, transform.position, Quaternion.identity);
  schiessen.rigidbody.AddForce(transform.forward * schussgeschwindigkeint);
  return;

}

function rauchsimulation()
{
  var rauch= Instantiate(rauchNachSchuss, transform.position, Quaternion.identity);
  rauch.rigidbody.AddForce(transform.forward * 0);
  return;
}

Das zweite Script:

var KanonenKugel : Transform;

var rauchNachSchuss : Transform;

var schussgeschwindigkeint : float;

var wait1 : boolean  = false;

private var elapsedTime : float = 0;



function Update ()

{



 if(Kanone.Ok == true)

 {

var timeToWait : float= Random.Range(0.1, 0.5);

elapsedTime += Time.deltaTime;

Debug.Log(timeToWait);

if(elapsedTime > timeToWait)

  {

	Kanone.Ok = false;

	wait1 = true;

	elapsedTime = 0;



  }



 }





 if ( wait1 == true)

 {



  var schiessen = Instantiate( KanonenKugel, transform.position, Quaternion.identity);

  schiessen.rigidbody.AddForce(transform.forward * schussgeschwindigkeint);

  rauchsimulation();

  wait1 = false;

 }



}



function rauchsimulation()

{

  var rauch= Instantiate(rauchNachSchuss, transform.position, Quaternion.identity);

  return;

}

 

Jetzt mein Problem: Ich habe ein schiff mit 5 Kanonen. Es sähe blöde aus wenn alle miteinander schissen würden..

Daher habe ich es mit 2 Script s gelöst. Das erste Script geht auf die 1. Kanone und das 2. Script gehen auf Kanonen 2,3,4 und 5. Die erste Kanonen schisst immer aber die 2,3,4 und 5 nicht. Die wechseln sich immer ab. Einmal schisst Kanone 2 und das andermal die Kanone 5. Warum? Wäre sehr froh wenn jemand das lösen könnte, weil das über meine Kenntnisse geht.

 

LG

SchneeSniperLevel

Link zu diesem Kommentar
Auf anderen Seiten teilen

Warum schreibst du zwei Scripts, die das selbe tun, nur zeitversetzt?

 

Für sowas benutzt man ein Script mit einer Variable...!

 

var zeitProSchuss : float;
var zeitVorsprung : float;
private var elapsedTime : float;

function Start()
{
   elapsedTime = zeitVorsprung;
}

function Update()
{
   //das übliche
}

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich sehe, was du machen willst. Und ich sehe auch dass es so nicht gehen kann.

Aber ich will jetzt garnicht auf den Code eingehen, denn dieses Timingproblem gibt es immer wieder und ist ne allgemeine Sache.

Ich würde an deiner Stelle jeder Kanone das Gleiche Script geben.

Jedes Script hat eine Variable, die Definiert, an welcher Stelle es steht. ( Diese variable kannst du per Hand im Inspector verändern oder aber über code, wenn das Dingen z.B. als Prefab entsteht)

 

Wenn du jetzt ein anderes Script hast, auf dem alle Kanonenscripte zugreifen und die eine Zähl-Variable überprüfen, kannst du einfach die Kanonenscripte abfragen lassen, welches script jetzt dran ist. Das script startet seinen Timer und ist in diesem Script die Kugel abgeschossen worden, dann muss diese Variable einfach um 1 erhöht werden.

Schon weiß dasnächste Script bescheid.

Um den Zähler wieder zurück zu setzen, brauchst du eine 2. Variable, die die Anzahl der Kanonen wieder gibt. Hat die Var die Zahl 5 und die 5te Kanone ist fertig, dann wird die Zähl-Variable nicht erhöht sondern auf 1 zurück gesetzt.

 

So einfach ist das. :)

 

edit:

Sascha hat auch recht!

Nur ist diese Sache mit dem Zeitvorsprung nur bei festen Bedingungen machbar. Sobald sich was an der Anzahl der Kanonen ändert, geht's lose! ;)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dann kennt eben jede Kanone die jeweils nächste :)

 

var naechsteKanone : NameDiesesScripts;
var verzoegerung : float;

function Feuer()
{
//abfeuern...
if(naechsteKanone)
{
	yield WaitForSeconds(verzoegerung);
	naechsteKanone.Feuer();
}
}

...und die erste Kanone jeder Reihe wird von einem Timer abgefeuert.

Von mir aus kann der auch von der letzten Kanone einer Reihe getriggert werden :P

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

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

×
×
  • Neu erstellen...