Jump to content
Unity Insider Forum

Erläuterung bei diesem Code


acidrain83

Recommended Posts

Hy Freunde

 

Also ich hab hier diesen Code:

 


var speed : int = 100;
var action: int = 1;
var movex : boolean = false;
var movey : boolean = false;
var movez : boolean = false;
var again : boolean = true;
var steps : int = 0;

private var changex : int = 0;
private var changey : int = 0;
private var changez : int = 0;
private var intcount: int = 0;
private var count   : float = 0;
private var wieviel : int = 0;

function Start () {

}

function Update () {

if (again == false)

	return;

wieviel = speed * Time.deltaTime;

if (steps != 0){

   count = count +(1 * Time.deltaTime);
   intcount = count;


	if (intcount == steps){

		again = false;
	}
	}
		if (movex == true){
		changex = wieviel;
		}
		if (movey == true){
		changey = wieviel;
		}
		if (movez == true){
		changez = wieviel;
		}

		switch (action){

			case 1 : transform.Translate(changex,changey,changez);
			break;

			case 2 : transform.Rotate(changex,changey,changez);
			break;

			case 3 : transform.localScale = transform.localScale + Vector3(changex,changey,changez);
			break;

			default: Debug.Log("Was zum Himmel, nichts geht");
			break;
		}

}

 

 

Und ich hab ein kleines Problem beim verstehen damit

Also wie wir sehen ist die Variable Steps eine Integer und mit 0 initialsiert

Aber bei der If Abfrage     if (steps != 0)  und der weiteren if abfrage komme ich nicht ganz mit.

weil eigentlich sollte der code darin ja nie ausgeführt werden da steps   immer 0 ist .

und in dem buch was ich lese steht zwar das wenn steps 0 ist eine endlosschleife entsteht.

Aber wieso? dann sollte der code 

count = count +(1*Time.deltaTime);

ja nie ausgeführt werden und der restliche code ja auch nicht ! Oder komm ich da irgendwie nicht mit?

 

und bei diesem code hab ich auch probleme:

if (movex == true){
changex = wieviel;
}

denn movex ist auch mit "false " initialisiert worden und wird nirgens auf true gesetzt. also sollte der code doch auch nicht ausgeführt werden.

 

 

bitte um aufklärung.verstehe das nicht ganz.

mfg

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 6 Minuten schrieb acidrain83:

weil eigentlich sollte der code darin ja nie ausgeführt werden da steps   immer 0 ist .

Wenn man bei UnityScript nicht "private" dranschreibt, ist die Variable automatisch "public", wie es auch hier der Fall ist. Dadurch kann man den Wert der Variablen von außen, also aus anderen Klassen heraus, ändern; und im Unity-Kontext heißt das zusätzlich, dass man den Wert im Editor einstellen kann.

vor 8 Minuten schrieb acidrain83:

und in dem buch was ich lese steht zwar das wenn steps 0 ist eine endlosschleife entsteht.

Da hier nirgendwo eine Schleife zu sehen ist, stimmt das zumindest für den geposteten Code nicht.

vor 9 Minuten schrieb acidrain83:

denn movex ist auch mit "false " initialisiert worden und wird nirgens auf true gesetzt.

Siehe oben. Du kannst den Wert im Editor ändern und damit dieses Script für mehrere Objekte benutzen, die sich unterschiedlich verhalten; je nachdem, wie du die Einstellungen setzt.

Link zu diesem Kommentar
Auf anderen Seiten teilen

danke für die antwort

ja das mit dem ändern im inspector usw weiß ich ...

ahhh ok das problem mit movex usw ist gelöst das war das ich vergessen habe das  ich den ja immer ändere im inspector.lol

aber step bleibt immer 0....also wenn in das feld steps im inspector der wert 0 bleibt oder eingetragen wird, erfolgt die veränderung endlos......(falsche wortwahl)

ändert man aber den wert von steps auf 5 dann wird die gewählte action nur eine gewisse zeit abgespielt.

 

kannst es probieren wenn du lust hast....

würde mich wirklich darüber freuen wenn ich das verstehen würde  warum es endlos ist...

Link zu diesem Kommentar
Auf anderen Seiten teilen

Also ich weiß ja nicht was das für ein Script ist, woher du es hast und wofür es gut sein soll, aber... es kann sein, dass man einfach ein zweites Script baut, dass diesem Script quasi die Anweisung gibt, bestimmte Dinge zu tun, indem steps einmal hochgesetzt werden. Für diese Vermuting fehlt aber irgendwie das steps--; irgendwo, oder etwas vergleichbares.

Kann es sein, dass du das Script abgetippt und dabei einfach mindestens eine Zeile vergessen hast?

Link zu diesem Kommentar
Auf anderen Seiten teilen

ja dieses Skript  habe ich abgetippt aber es fehlt überhaupt nichts.

in meinem buch also wo dieses skript drin steht wird gesagt das die variable steps im prinzip nur macht das wenn man zb: steps = 40 eingibt im inspector   die ausführung also die ACTION nur 40 sekunden lang dauert. aber gibt man 0 ein oder ändert nichts wird sie endlos ausgeführt.

 

und nein kein anderes skript greift auf das zu. oder der gleichen.

würde auch gern verstehen warum das so ist....aber vielleicht ist es weil es unityscript ist und maybe war das damals so bei der sprache.

 

 

eins noch:

wenn ich zb:

var object : Transform;

habe wie kann ich der variable direkt ein objekt zuweisen und nicht erst im inspektor?

weil wenn man statt Transform  einfach GameObject nehmen würde könnte ich einfach

object = GameObject.Find("BlaBla");

schreiben und damit wäre das objekt direkt ausgewählt.aber bei der Transform Komponente geht das leider nicht so.

 

wäre toll wenn mir jemand helfen könnte.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hm. steps wird nirgendwo geändert - weder von innen noch von außen. Dann steht in deinem Buch leider etwas falsches drin. Denn dass sich da magisch etwas an der Variable ändert, ist nicht der Fall. Und nein, auch nicht, weil das UnityScript ist. Das wird zwar nicht mehr benutzt, ist aber auch nur leicht abgewandeltes JavaScript und entsprechend gibt es noch genügend Leute, die sich damit auskennen ;)

vor 13 Stunden schrieb acidrain83:

eins noch:

Wenn du nicht mit einem konstanten Wert initialisieren kannst, wie z.B.

var number : int = 10;

dann musst du es in Awake machen:

var thing : Transform;

function Awake() {
  thing = GameObject.Find("Thing").transform;
}

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 2 weeks later...

Archiviert

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

×
×
  • Neu erstellen...