2016-10-28 2 views
0

캔버스의 자식으로 객체 (A)를 인스턴스화하려고합니다. A의 위치는 B 객체의 위치를 ​​사용하여 설정되며 Canvas의 하위 위치도 사용됩니다.Unity3d 포지셔닝 시스템 이해

내 질문에 유용하지만 A와 B에 모두 자식이 있는지 확실하지 않습니다.

내가 A를 생성 할 때, 내 debug.log()이 그렇게하더라도 위치는 B의 위치가 아닙니다. I가 시도

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; 

: 여기

http://prntscr.com/czz0dt

코드입니다 :

여기

http://prntscr.com/czz084

디버그의 말씀입니다 : 여기

내가 가진 무엇 position 및 localPosition을 사용하여 작업하고, 그것을 작동하게 할 방법이 없습니다. 또한 setParent 인수 (false 또는 true)를 사용하려고 시도했지만 true로 설정하면 최악의 경우도 발생합니다.

내 질문은 : 내가 무엇을 놓치고 있는지, 무엇을 이해하지 못합니까? 전에는이 문제가 없었어요.

+0

를 사용하여 객체의 localPosition을 설정할 수 있도록

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

같은 다른 오브젝트의 월드 위치에 부모의 월드 위치를 비교할 수 있습니다 객체의 부모 인 경우, 당신은 그것의 로컬 위치를'new Vector3 (0,0,0)'으로 설정할 수 있어야하고 그것의 부모 위치로 갈 것입니다. –

+0

"Player_Objects"의 자식으로 그 일을했습니다. "Player_Objects"자체 ... 글쎄, 그게 뭔지 모르겠어 ... – Andromelus

+0

Alfie가 말했듯이. "localPosition"은 "부모와 관련된 내 위치"를 의미합니다. 즉, 부모가 세계 어디 (또는 부모)인지는 중요하지 않습니다. 자녀의 localPosition의 VectorX.zero는 부모의 중간입니다. 당신이하는 일은 객체의 위치를 ​​같은 * 숫자 값으로 설정하는 것입니다. * 부모가 가지고있는 것이기 때문에 옮겨 놓을 수 있습니다. 부모가 10, 10이고 자손의 localPosition을 10, 10으로 설정하면 부모의 중점에서 10 단위 씩 옮겨 졌으므로 자식이 "전역 적으로"20, 20이됩니다. –

답변

3

변형의 localPosition을 설정하고 있습니다.이 설정은 부모를 기준으로 설정되지만 글로벌 위치 (transform.position) 대신 관계없는 객체의 localPosition으로 설정하면 올바르지 않게됩니다. 이 경우, 당신은 당신이 설정하는 경우 다음 당신이 새로운 Vector3

this.transform.localPosition = thePos;