Jump to content
Unity Insider Forum

skriptproblem


acidrain83

Recommended Posts

hy ich wollte ein kleines skript erstellen wo eine distance zwischen 2 objekten ausgerechnet wird und dann die startposition des anderen objekts verschoben wird.

aber irgendwie geht es nicht...irgendwas mach ich falsch..zwar verändert er die position des objektes aber leider nicht vor dem anderen objekt so wie es sein sollte 

sondern nach dem objekt.und es springt auch die ganze zeit herum...

hier der code:

 

#pragma strict
var distance : int = 0;
var object : Transform;
var between:int = 0;
var newpos : boolean = false;
function Start () {

}

function Update () {
 between = Vector3.Distance(transform.position,object.transform.position); // erste transform position ist der rollerball und das object.transform.position ist ein cube ....between ist zb:  4   und sagen wir ich gebe nachher im inspektor 2 bei distance ein


if (distance != 0){
 newpos = true;
}

if (newpos == true){
 object.transform.position.x =  (between - distance); // ich weiß nicht ob das so überhaupt möglich ist aber wenn dann hab ich was falsch gemacht...aber ich wollte das sich der cube genau um between-distance also zb:  4-2  also 2 nach vorne geht auf der x achse...aber wie gesagt macht er das falsch...
 newpos = false;
}
}

 

 

bitte um hilfe...und ich bin noch anfänger bitte nicht allzu streng sein

Link zu diesem Kommentar
Auf anderen Seiten teilen

Also ein Fehler ist schon mal "between", der Distanzwert den du mit Vector3.Distance zurück bekommst, ist immer ein Float-Wert. ;)

Des weiteren, willst du die Aktion in jedem Frame machen? Denke nicht, deshalb solltest du sie in eine Methode stecken und am Anfang in der Start-Methode aufrufen. Andernfalls wird die Funktion 60 mal die Sekunden aufgerufen.

Desweiteren, Vector3.Distance ist ein Float-Wert, schon 0.004 ist zwar für dich 0, nicht aber für das Scrtipt, probiers mal so:

#pragma strict
var object : Transform;
var between: float = 0;

funktion Start(){
	Position();
}

function Position () {
	between = Vector3.Distance(transform.position,object.transform.position); 

	if (between < 5){
 		object.transform.position = new Vector3((object.transform.position.x + between), object.transform.position.y, object.transform.position.z);
	}
}

Ich hab gerade kein VS auf, daher, sorry wenn ich mich verschrieben habe. Du kontrollierst erst mal die Distanz zwischen beiden Objekten. Die Distance habe ich in der if-Abfrage mal auf 5 gesetzt. Die zulässige Distanz wäre zwei mal die hälfte beider Objekte, dann würden sie Kante an Kante liegen. Wie du das gern willst, kannst du das nun so haben wollen oder eine feste Ausrichtung machen, wenn du es neu positionierst. Dies machst du mit dem Inhalt der if-Abfrage. Hierbei setzt du das Objekt nun neu und verschiebst seine X-Achse mit dem Abstand. Statt Between könntest du auch sagen, ich will genau von Mitte zu Mitte 10 Einheiten haben. ;)

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

danke für die tolle antwort.

das wusste ich nicht das es float ist bei vector3.distance....gut zu wissen

 

aber es sollte schon in der update funktion sein.

weil er muss ständig die distanz berechnen (bei mir die variable between) zwischen den zwei objekten- der sphere (verfolger) und dem Rollerball(charaktercontroller),  und  es soll eine frei einstellbare distanz geben (der variable distance) mit der das sphere objekt dem rollerball folgt auf der x und y achse.

 

und damit hab ich echt noch probleme.

werde mir deinen code nochmal genauer ansehen vielleicht finde ich ja dadurch was heraus was ich benutzen kann oder was ich falsch gemacht habe.

danke dir .

mfg

Link zu diesem Kommentar
Auf anderen Seiten teilen

ich bin schon ein wenig weiter er verfolgt jetzt auch schon den charaktercontroller aber ich hab ein problem.....wie kann ich die geschwindigkeits variable vom charaktercontroller namens ROLLERBALL in das skript einbauen?

 

weil der verfolgende ball soll natürlich genauso schnell sein wie der charaktercontroller.

bitte kann mir das jemand sagen.

ich dachte es ist M_movepower aber das funkt nicht.

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Am 1.7.2018 um 17:39 schrieb acidrain83:

danke für die tolle antwort.

das wusste ich nicht das es float ist bei vector3.distance....gut zu wissen

 

aber es sollte schon in der update funktion sein.

weil er muss ständig die distanz berechnen (bei mir die variable between) zwischen den zwei objekten- der sphere (verfolger) und dem Rollerball(charaktercontroller),  und  es soll eine frei einstellbare distanz geben (der variable distance) mit der das sphere objekt dem rollerball folgt auf der x und y achse. 

 

und damit hab ich echt noch probleme.

werde mir deinen code nochmal genauer ansehen vielleicht finde ich ja dadurch was heraus was ich benutzen kann oder was ich falsch gemacht habe.

danke dir .

mfg

Du wolltest doch gern positionieren, dachte das sind Startparameter. Du willst also das dir ein Ball folgt und sich nicht so weit von dir entfernt?

Ich kenne die Ballsteuerung nicht, aber hier gibt es 100 pro eine Update-Methode die den Input der Tastatur abfragt, hieraus wird die Geschwindigkeit des Balls berechnet. Demnach müsstest du diese Werte an den Ball weiter leiten bzw. von seinem Script aus Variablen abfragen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

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

×
×
  • Neu erstellen...