2016-10-28 88 views
0

我想实例化一个对象(A)作为一个画布的孩子。 A的位置是使用B对象的位置设置的,也是Canvas的子项。Unity3d了解定位系统

不知道这对我的问题是否有用,但A和B都有一个孩子。

当我产卵A时,它的位置根本不是B的位置,即使我的debug.log()这样说。

以下是我有:

http://prntscr.com/czz084

下面是调试说:

http://prntscr.com/czz0dt

下面是代码:

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; 

我试着与职位和localPosition合作,没办法让它工作。 我也尝试使用setParent参数(false或true),但将其设置为true使其甚至更糟。

我的问题是:我错过了什么,我不理解?我以前从未遇到过这个问题。

+0

设置对象的localPosition如果你设置对象的父对象,你应该可以将它的本地位置设置为'new Vector3(0,0,0)',并且它将会进入父对象的位置 –

+0

我对“Player_Objects”的子对象做了这个操作,效果很好,但是与“Player_Objects”本身......好吧,这是我不知道...... – Andromelus

+0

正如Alfie所说。 “localPosition”意思是“我相对于我父母的位置”。换句话说,父母在世界的哪个地方(或者在他们自己的父母之内)并不重要,它是孩子的​​localPosition的VectorX.zero将是父母的中间位置。你所做的是,你将对象的位置设置为与父对象相同的*数值*,这样就可以取代它。如果父母为10,10,并且您将孩子的localPosition设置为10,10,则孩子将“全局”为20,20,因为它与父母的中间点相差10个单位。 – 2016-10-28 10:07:37

回答

3

您正在设置变换的localPosition,这会将其设置为相对于其父项,但您将其设置为不相关对象的localPosition而不是其全局位置(transform.position),这将最终导致错误。在这种情况下,你可以在父母的世界上的地位比较其他物体的世界上的地位,像这样

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

然后你就可以使用这个新Vector3

this.transform.localPosition = thePos;