如何将对象移动到某个位置?

我试图将对象移动到坐标48.7, 51.07, 102.8 ,但它不移动。 我做了一些testing,以确保“OnMouseDown”的作品,它确实,我认为它不能find对象“upgradeone”。

 public class click1 : MonoBehaviour { GameObject Upgradeone; GameObject cube; // Use this for initialization void Start () { Upgradeone = GameObject.Find("upgradeone"); cube = GameObject.Find ("Cube"); } void OnMouseDown(){ Upgradeone.transform.localScale = new Vector3(48.7f,51.07f,102.8f); } } 

我当然在使用Unity的方式和脚本中看到了一些问题。

你脚本移动的对象应该附加到你想要移动的对象。 这意味着你不需要使用Find来静态定位你想要移动的对象,它就是脚本所附的对象。 这意味着您可以简单地使用this关键字来访问要移动的对象。

此外,您正在设置对象的局部比例,而不是位置。 您将需要修改this.transform.position来调整游戏世界中对象的位置。

最后,你只是在OnMouseDown采取行动,这只会在点击对象时触发一次。 如果您想要随着时间推移移动对象 ,则必须使用Update方法。 您仍然可以使用OnMouseDown触发移动的开始。

作为一个例子,这个脚本会在点击时将对象移动到坐标上:

 using UnityEngine; using System.Collections; public class click1 : MonoBehaviour { public float speed = 1; public Vector3 target = new Vector3(48.7f,51.07f,102.8f); private bool moving = false; // Update is called once per frame void Update () { if(moving) { float step = speed * Time.deltaTime; transform.position = Vector3.MoveTowards(transform.position, target, step); } } void OnMouseDown(){ moving = true; } } 

或者,如果您希望它是瞬间的,并从不同的对象激活:

 using UnityEngine; using System.Collections; public class click1 : MonoBehaviour { public GameObject objectToMove; public Vector3 target = new Vector3(48.7f,51.07f,102.8f); void OnMouseDown(){ if(objectToMove != null) { objectToMove.transform.position = target; } } } 

然后,通过将对象从层次结构拖放到触发器对象的检查器中,特别是click1脚本的click1字段,来设置click1

或者,您可以使用Find方法在Start方法中设置,但是我建议不要这样做。 在编辑器中设置objectToMove是处理这个问题的一种更objectToMove的方式,不会将string硬编码到脚本中。

有一些方法可以在Unity中移动对象:

  • obj.transform.Translate(theTranslationVector)
  • obj.transform.position = newPosition

在你使用的代码中,你设置了对象的localscale ,显然不会移动对象。

你的代码设置了transform.localScale,但你想要transform.localPosition