Unity transform.translate移动x也移动z
问题描述:
我正在做一个应用程序,改变了几个游戏对象,代码工作正常,除了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);
}
}
}
}
感谢您的帮助!
答
为什么会发生这种情况?
因为“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;
希望我正确地理解您的问题。
cuadro.transform.GetChild(current)= vector3.zero对不对? –
所以你面临的问题是孩子的移动方式与父母相同吗? –
@ Chico3001 cuadro gameobject的位置是什么? – ZayedUpal