当我销毁对象时,请在不同的位置创建一个新对象

时间:2019-01-28 17:56:32

标签: c# visual-studio unity3d

当我单击鼠标按钮并销毁GameObject时,我想在随机位置上创建一个新对象,我尝试使用Instatiate和其他方法,但没有用,有人可以帮我吗?

public GameObject tapObject;
private float respawnTime = 1f;
public float xMin;
public float xMax;
public float yMin;
public float yMax;

void Start()
{     
    StartCoroutine(spawnEnemyTime());
}
void Update()
{
    if (Input.GetMouseButtonDown(0))
    {           
        Destroy(tapObject);
    }      
}
private void RandomSpawnObject()
{      
    tapObject.transform.position = new Vector2(Random.Range(xMin, xMax), Random.Range(yMin, yMax));
} 
IEnumerator spawnEnemyTime()
{
    while (true)
    {
        yield return new WaitForSeconds(respawnTime);
        RandomSpawnObject();
    }
}

2 个答案:

答案 0 :(得分:2)

如果要保留相同的GameObject,可以避免破坏它,而可以控制它是否为active or not。它应该看起来像这样:

修改:

使用GameObject.SetActive()

public GameObject tapObject;
private float respawnTime = 1f;
public float xMin;
public float xMax;
public float yMin;
public float yMax;

void Start()
{

}
void Update()
{
    if (Input.GetMouseButtonDown(0))
    {
        tapObject.SetActive(false);
        StartCoroutine(spawnEnemyTime());
    }
}
private void RandomSpawnObject()
{
    tapObject.SetActive(true);
    tapObject.transform.position = new Vector2(Random.Range(xMin, xMax), Random.Range(yMin, yMax));
}
IEnumerator spawnEnemyTime()
{
    yield return new WaitForSeconds(respawnTime);
    RandomSpawnObject();
}

使用GameObject.Instantiate()

public GameObject prefab;
public GameObject tapObject;
private float respawnTime = 1f;
public float xMin;
public float xMax;
public float yMin;
public float yMax;

void Start()
{

}
void Update()
{
    if (Input.GetMouseButtonDown(0))
    {
        Destroy(tapObject);
        StartCoroutine(spawnEnemyTime());
    }
}
private void RandomSpawnObject()
{
    tapObject = GameObject.Instantiate(prefab, new Vector2(Random.Range(xMin, xMax), Random.Range(yMin, yMax)), Quaternion.identity);
}
IEnumerator spawnEnemyTime()
{
    yield return new WaitForSeconds(respawnTime);
    RandomSpawnObject();
}

请注意,在使用GameObject.Instantiate()时,您需要附加一个预制件。

答案 1 :(得分:0)

解决问题的简单方法是创建一个方法并使用计时器调用它,在该方法中只需使用以下代码即可

代码

Vector3位置=新Vector3(Random.Range(-10.0f,10.0f),0,Random.Range(-10.0f,10.0f));         实例化(预制,位置,Quaternion.identity);

注意

您可以使用在应用程序中使用的游戏对象来代替使用预制对象