Unity transform.translate移动x也移动z

时间:2017-08-28 04:27:05

标签: c# unity3d unity5 translate-animation

我正在创建一个更改多个游戏对象的应用程序,代码工作正常,除了cuadro.transform.GetChild(当前).transform.position = new Vector3(0,0,0)将我的对象移动300个单位Z轴(父GO的相同位置)

为什么会发生这种情况?

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);

            }
        }
    }
}

感谢您的帮助!!!

1 个答案:

答案 0 :(得分:1)

  

为什么会发生这种情况?

因为"翻译(矢量)"工作类似于" transform.position = tramsform position + vector"。如果你的对象有位置"(0,0,300)"在开始移动时,目标位置将是"( - 1500 * deltatime,0,300)"。所以,当你指定"新的Vector(0,0,0)"对于子转换,你通过-cuadro.transform.position值翻译了孩子。

所以你可以尝试替换它:

(sensorID, status, dateTime)

由此:

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

或者这个:

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

希望我理解你的问题。