Andromelus Andromelus - 1 month ago 6
C# Question

Unity3d understanding positionning system

I'm trying to instantiate an object (A) as a child of a canvas.
The position of A is set using a B object's position, also a child of the Canvas.

Not sure if this is usefull for my question, but A and B both have a child.

When I spawn A, it's position is not B's position at all, even if my debug.log says so.

Here is what I have:

http://prntscr.com/czz084

Here is what the debug says:

http://prntscr.com/czz0dt

Here is the code:

if (Input.GetButtonDown("Fire1"))
{
GameObject Laser_Projectile = Instantiate(Resources.Load("Sprites/Object_Laser_Projectile") as GameObject);
Laser_Projectile.transform.SetParent(GameObject.Find("Canvas").transform, false);
this.transform.localPosition = GameObject.Find("Player_Objects").transform.localPosition;


I tried t owork with position and localPosition, no way to make it work.
I also tried to use the setParent argument (false or true), but setting it to true makes it even worst.

My question is: What I am missing, what am I not understanding? I never had this problem before.

Answer

You are setting the localPosition of the transform, this sets it relative to its parent, but you are setting it to an unrelated object's localPosition instead of its global position (transform.position), which will end up being incorrect. In this case, you can compare the parent's world position to the other object's world position like so

Vector3 thePos = this.transform.parent.position - GameObject.Find("Player_Objects").transform.position;

Then you can set the localPosition of the object using this new Vector3

this.transform.localPosition = thePos;
Comments