2017-08-28 120 views
0

我正在做一个应用程序,改变了几个游戏对象,代码工作正常,除了cuadro.transform.GetChild(current).transform.position = new Vector3(0,0 ,0)将我的对象在Z轴上移动300个单位(父GO的相同位置)Unity transform.translate移动x也移动z

为什么会发生这种情况?

public class ChangePaintScript : MonoBehaviour 
{ 

    public GameObject cuadro; 

    private int total; 
    private int current = 0; 

    private bool changing = false; 

    // Use this for initialization 
    void Start () 
    { 
     total = cuadro.transform.childCount; 
    } 

    // Update is called once per frame 
    void Update () 
    { 
     if (Input.GetKeyDown(KeyCode.Space) || changing) 
     { 
      changing = true; 
     } 

     if (changing) 
     { 
      cuadro.transform.GetChild(current).Translate(new Vector3 (-1500, 0, 0) * Time.deltaTime); 

      if (Mathf.Abs(cuadro.transform.GetChild(current).transform.position.x) > 400) 
      { 
       changing = false; 

       cuadro.transform.GetChild(current).gameObject.SetActive(false); 
       cuadro.transform.GetChild(current).transform.position = new Vector3 (0, 0, 0); 
       current++; 
       current %= total; 
       cuadro.transform.GetChild(current).gameObject.SetActive(true); 

      } 
     } 
    } 
} 

感谢您的帮助!

+0

cuadro.transform.GetChild(current)= vector3.zero对不对? –

+0

所以你面临的问题是孩子的移动方式与父母相同吗? –

+0

@ Chico3001 cuadro gameobject的位置是什么? – ZayedUpal

回答

1

为什么会发生这种情况?

因为“Translate(vector)”的工作方式类似于“transform.position = tramsform position + vector”。如果您的物体在开始移动时的位置为“(0,0,300)”,那么您的目标位置将为“(-1500 * deltatime,0,300)”。因此,当您为子变换指定“new Vector(0,0,0)”时,您通过-cuadro.transform.position值翻译了子项。

所以,你可以尝试更换此:

cuadro.transform.GetChild(current).transform.position = new Vector3 (0, 0, 0); 

本:

cuadro.transform.GetChild(current).transform.localPosition= new Vector3 (0, 0, 0); 

或本:

cuadro.transform.GetChild(current).transform.position= cuadro.transform.position; 

希望我正确地理解您的问题。