Jump to content
Unity Insider Forum

Object/Object/Child Probleme? Kein Mitbewegen ... ruckelt?


docdum

Recommended Posts

Hallo, 

ich komme gerade nicht weiter, und denke es ist besser doch mal zu fragen. Ich habe jetzt so quasi gefühlt jede Möglichkeit via Code ausprobiert.

GameObject.Instantiate(_RObj, _RSpawnL.position, _RSpawnL.rotation).transform.SetParent(_RSpawnL, true);

Dies ist mein Code mit dem ich mein Objekt im Player/EmptyFürPosition/Rakete erzeuge. Das Funktioniert jetzt auch genau an der Stelle. Mit diesem Code auch:

GameObject _rocketLCrea = Instantiate(_RObj, new Vector3(transform.position.x, transform.position.y, transform.position.z), Quaternion.identity) as GameObject;
//_rocketLCrea.transform.position = ;
//_rocketLCrea.transform.rotation = ;
_rocketLCrea.transform.parent = _RSpawnL;

Allerdings bewegen die Raketen die ich auf diese Weise erstelle nicht synchron mit dem Spieler.

Gibt es da was zu beachten, was ich noch nicht gefunden habe? -- Theoretisch sollte das doch wie in der Beschreibung von Unity funktionieren?

Gruß docdum

Link zu diesem Kommentar
Auf anderen Seiten teilen

Also zunächst kanns du erstmal aus  ...

vor einer Stunde schrieb docdum:

...Instantiate(_RObj, new Vector3(transform.position.x, transform.position.y, transform.position.z), Quaternion.identity)...

...auch...

...Instantiate(_RObj, transform.position, Quaternion.identity)...

...machen.

Dann ist die Frage, ob dein "_rocketLCrea"-Objekt welches zu erzeugst, viellaucht auch durch irgendwelche andere Scripte oder Animationen vielleicht bewegt wird. Und wenn ja via Script, ob auch in der FixedUpdate-Funktion bzw. die Bewegung (wenn in der Update) mal Time.deltaTime multipliziert wird?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Im Script vom Spieler

Also gegenwärtig sieht der Code so aus:

//start vom Spieler
//create Rockets in Parent of Player -- RSPAWN
        GameObject.Instantiate(_RObj, new Vector3(_RSpawnL.position.x, _RSpawnL.position.y, _RSpawnL.position.z), Quaternion.identity).transform.SetParent(_RSpawnL, true);
        GameObject.Instantiate(_RObj, new Vector3(_RSpawnL.position.x, _RSpawnL.position.y, _RSpawnL.position.z), Quaternion.identity).transform.SetParent(_RSpawnR, true);
void FixedUpdate () {
		//moving player
		float _moveHorizontal = Input.GetAxis ("Horizontal"); //joypad/keyboard input
		Vector3 _movement = new Vector3 (-_moveHorizontal, 0.0f, 0.0f); //moving axes Horizontal only
		_RB.velocity = _movement * _SPEED; //left right acceleration
		_RB.position = new Vector3 (Mathf.Clamp (_RB.position.x, _xMin, _xMax), 0.0f, 0.0f); //limits on the screen
		_RB.rotation = Quaternion.Euler (0.0f, 0.0f, -_RB.velocity.x * 5f); //rotation when moving left or right
		_SKYDOME.SkyRotation (_moveHorizontal);
	} //end fixedUpdate

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Schwer zu sagen, wo hier genau das Problem liegt, ich würde mal im Inspektor schauen, ob die Raketen sich dann auch tatsächlich unter dem Spielertransform befinden. Für die bessere Lesbarkeit des Codes würde ich es erst einmal so machen:

GameObject newRocketL = Instantiate(_RObj, _RSpawnL.position, Quaternion.identity) as GameObject;
newRocketL.transform.parent = _RSpawnL;

// Ist hier RSpawnL als Position richtig (oder _RSpawnR) ?
GameObject newRocketR = Instantiate(_RObj, _RSpawnL.position, Quaternion.identity) as GameObject;
newRocketR.transform.parent = _RSpawnR;

// Unterbrechen und schauen wo sich die Childs befinden
Debug.Break();


Zudem würde ich zusätzlich schauen, ob sich die Positionen der beiden Child's während des Gameplays verändern, daß sollten sie nämlich nicht.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Zer0Cool Danke für die Antwort,

die besagten Raketen werden exakt dort erstellt, wo ich ich sie haben will, sie sollen sich aber mit dem Playership und dem Empty was der Parent ist für die Raketen mit bewegen. Das tun sie nicht.

Kann es eventuell daran liegen, dass ich die Raketen im Script vom Player erstelle und nicht direkt am Anfang das Prefab für die Raketen in der Herachie einordne?

Sorry wegen der späten Antwort.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Nein, du kannst Childs zu jeder Zeit erzeugen und sobald sie dem Parent untergeordnet werden, wird die relative Position des Childs quasi eingefroren. Bewegst du nun den Parent, dann bewegt sich das Child auf seiner (eingefrorenen) relativen Position mit. 

Das Einzige was mir noch einfällt wäre, ob evtl. ein RB an den Raketen hängt und der RB die Raketen aus seiner Position zieht... Ist dem so, dann könntest du noch bei dem RB unter Constraints die Position und Rotation fixieren.

Link zu diesem Kommentar
Auf anderen Seiten teilen

So funktioniert es.

Am 21.7.2017 um 15:41 schrieb Zer0Cool:

Das Einzige was mir noch einfällt wäre, ob evtl. ein RB an den Raketen hängt und der RB die Raketen aus seiner Position zieht... Ist dem so, dann könntest du noch bei dem RB unter Constraints die Position und Rotation fixieren.

Genau so, Danke!

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

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

×
×
  • Neu erstellen...