Когда я уничтожу свой объект, создайте новый в другом положении - PullRequest
0 голосов
/ 28 января 2019

Когда я нажимаю на кнопку мыши и уничтожаю GameObject, я хочу создать новый в произвольном положении, я пытаюсь использовать другие методы, но это не сработает, может кто-нибудь помочь мне с этим?

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 голосов
/ 30 января 2019

Простой способ решить вашу проблему - создать метод и вызвать его с таймером. В этом методе просто используйте следующий код

Код

Vector3 position = new Vector3 (Random.Range (-10.0f, 10.0f), 0, Random.Range (-10.0f, 10.0f));Instantiate (prefab, position, Quaternion.identity);

Note

Вместо использования prefab вы можете использовать игровой объект, который вы используете в приложении

0 голосов
/ 28 января 2019

Если вы хотите сохранить тот же GameObject, вы можете избежать его уничтожения, вместо этого вы можете контролировать, является ли активным или нет .Он должен выглядеть следующим образом:

Редактировать:

Использование 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 () вам необходимо подключить префаб.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...