2016-10-28 86 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;