C# 将预制件移动到不同的位置?

C# 将预制件移动到不同的位置?,c#,unity3d,C#,Unity3d,我有一个预设,我想移动到场景中的不同位置,例如,在确定的时间内移动到:北、南、东和西,直到玩家发生碰撞 我该怎么做 我在试这个 //time prefab private float timeChange = 0f; private float timeChangeDelay = 1f; // Update is called once per frame void Update () { changePrefabPosition(); } private void changeP

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

我该怎么做

我在试这个

//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;
     }
}

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

public class ObjectCreator : MonoBehaviour
{
    public GameObject prefab;

    void Awake()
    {
        Instantiate(prefab) as GameObject;
    }
} 
然后预制件内的代码:

public class PrefabCode : MonoBehaviour
{
    public GameObject prefab;

    void Awake()
    {
        transform.position = new Vector2(0, 0);
    }
} 
然后使用
transform
移动实例化对象


你说你的精灵不动了。然而,它确实在移动,但由于您定义移动的方式,它的移动量非常小

更改:
0.1f*时间。延迟时间

收件人:
2f*时间.延迟时间


你的物体会移动。从你的帖子中,我真的不知道它是应该是那样的还是有更长的路径。如果想要更长的路径,则需要定义北、南、西和东的坐标

使用实例化(…)函数,有一个参数来设置实例的位置。我知道,但是如果我在使用此游戏对象创建预置之后并在使用实例化之后直接将此脚本添加到游戏对象中,您可以将
预置代码
添加到您计划实例化的预置中。这样在实例化新对象后,新对象将附加该脚本告诉我它不会移动,哈哈。我使用Vector2D是因为这是一个2D游戏,而且我还在使用Lerp。看看我的帖子,我是如何努力的@FernandoPaiva看我的编辑,你的对象移动了。从你的帖子中,我真的不知道它是应该是那样的还是有更长的路径。