将预制件移动到各种位置?

时间:2014-10-24 14:27:10

标签: c# unity3d

我有一个预制件,我想要移动到场景中的不同位置,例如,在确定的时间内移动到:北,南,东和西,直到玩家发生碰撞。

我该怎么做?

我正在尝试这个

//time prefab
private float timeChange = 0f;
private float timeChangeDelay = 1f;

// Update is called once per frame
void Update ()
{
     changePrefabPosition();
}

private void changePrefabPosition()
{        
     timeChange += Time.deltaTime;        

     // north = 1, south = -1, east = 1, west = -1
     int[] northSouth = {1, -1};
     int[] westEast = {-1, 1};

     if(timeChange >= timeChangeDelay)
     {
          int index = Random.Range(0, northSouth.Length);   
          transform.position = Vector2.Lerp(transform.position, 
                               new Vector2(westEast[index],
                               northSouth[index]), 0.1f * Time.deltaTime);
          timeChange = 0;
     }
}

1 个答案:

答案 0 :(得分:0)

您需要先实例化预制件,然后再移动它。最简单的方法是通过拖放将预制件加载到编辑器中的公共变量中。

public class ObjectCreator : MonoBehaviour
{
    public GameObject prefab;

    void Awake()
    {
        Instantiate(prefab) as GameObject;
    }
} 

然后是Prefab中的代码:

public class PrefabCode : MonoBehaviour
{
    public GameObject prefab;

    void Awake()
    {
        transform.position = new Vector2(0, 0);
    }
} 

然后只需使用transform移动实例化对象。


你说你的精灵没有移动。但是,它确实会移动,但是由于您定义移动的方式,它会以微小的小数量移动。

更改:0.1f * Time.deltaTime

收件人:2f * Time.deltaTime

你的物体移动了。从你的帖子我真的不知道它是否意味着那样或更长的路径。如果你想要更长的路径,那么你需要定义北,南,西和东的坐标。