Jump to content
Unity Insider Forum
Sign in to follow this  
Kojote

Child Update

Recommended Posts

Grüße!

Ich hab mal wieder ein Problem mit Position und Rotation ... 🙃 Hab ein Child Object an meinem Spieler hängen, ich möchte nun in meiner Update Methode das ganze so haben, dass nur die Rotation der Y-Achse übernommen wird, nicht aber X und Z. Desweiteren, dass die Position immer genau in Weltkoordinaten auf Höhe 100 ist, genau über dem Spieler.

Hier mal Versuch, aber es dreht sich immer falsch. Mir geht gerade durch den Kopf, dass ich zum Parent eine Gegenrotation der Y und Z Achse machen müsste aber wie?

transform.localPosition = new Vector3(0, 100, 0);
            transform.rotation = Quaternion.Euler(90, gameObject.transform.parent.rotation.y, gameObject.transform.parent.rotation.z * -1.0f);

Achja, wie zu sehen, X muss immer 90° haben.

Grüße Kojote

Share this post


Link to post
Share on other sites

Du nutzt die YZ des Quaternions des Elternobjekts und nicht die Euler Angles.

//statt z. B.
gameObject.transform.parent.rotation.y
  
//mach mal
gameObject.transform.parent.eulerAngles.y
  
//usw. ;)

Noch einfacher wäre es wahrscheinlich, wenn du das Objekt zum Start vom Eltern-Element detached und im World Space einfach dem Eltern-Element folgen lässt, oder?

Share this post


Link to post
Share on other sites

Ich probiers mal aus. Einfacher wäre die Idee schon, es ist aber das Icon für die Minimap Camera, das würde ich ungern vom Elternobjekt loslösen.

EDIT:
 

        private void Update() {
            transform.localPosition = new Vector3(0, 100, 0);
            transform.localRotation = Quaternion.Euler(90, 0, gameObject.transform.parent.eulerAngles.z * -1.0f);
        }

Nach dem ichs nun so geschrieben habe, funktionierts auch nicht, er ändert immer noch den Winkel falsch. Scheint bei X zu liegen, wo jetzt 90 steht, dadurch das da drin ein Sprite ist, was um 90 Grad gedreht werden muss, machts das glaub ich falsch.

EDIT 2:

So, ich habs nun mit nem leeren GameObject zwischen dem Parent und dem Icon GameObject gemacht, damit kann ich die 90° ausgleichen. Das scheint jetzt ganz gut zu klappen. Problem ist nun, dass das Icon, wenn der Spiele rennt, relativ ruckartig schnell hin und her springt. Ich hab nun schon Lerp eingebaut, um die Bewegungen etwas geschmeidiger zu machen, aber mit mässigem Erfolg. Kann man da noch was machen?

        private void Update() {
            Vector3 trans = new Vector3(gameObject.transform.parent.parent.position.x, 100, gameObject.transform.parent.parent.position.z);
            transform.position = Vector3.Lerp(transform.position, trans, Time.deltaTime);
            transform.localRotation = Quaternion.Euler(gameObject.transform.parent.parent.eulerAngles.x * -1f, 0, gameObject.transform.parent.parent.eulerAngles.z * -1f);
        }

Ich glaub auch gerade Lerp is hier falsch am platz. Glaub das verwechsel ich gerade mit was.

Hab mal ein Video gemacht, damit ihr seht was ich meine. Es geht um das blaue Icon rechts unten in der Minimap:

https://streamable.com/k5e6o

EDIT 3:

Warum einfach, wenn mans oben auch kompliziert machen kann ...

        private void Update() {
            transform.position = new Vector3(transform.parent.parent.position.x, 100, transform.parent.parent.position.z);
            transform.localRotation = Quaternion.Euler(gameObject.transform.parent.parent.eulerAngles.x * -1f, 0, gameObject.transform.parent.parent.eulerAngles.z * -1f);
        }

 

Share this post


Link to post
Share on other sites

Join the conversation

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

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

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

Loading...
Sign in to follow this  

×
×
  • Create New...