Как я могу генерировать врагов в случайное время (в той же позиции) в Unity 3D, используя C #? - PullRequest
0 голосов
/ 27 февраля 2019

Я генерирую неоднократно врагов каждый 1.75f.Но я не знаю, как я могу использовать функцию Random.Мой прототип игры похож на игру в браузере Chrome. Она появляется, когда страница не найдена.

Спасибо за помощь.

Вот мой код:

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;

    public class EnemyGeneratorController : MonoBehaviour
    {
        public GameObject enemyPrefeb;
        public float generatorTimer = 1.75f;

        void Start () 
        {

    }

    void Update ()
    {

    }

    void CreateEnemy()
    {
        Instantiate (enemyPrefeb, transform.position, Quaternion.identity);
    }

    public void StartGenerator()
    {
        InvokeRepeating ("CreateEnemy", 0f, generatorTimer);
    }

    public void CancelGenerator(bool clean = false)
    {
        CancelInvoke ("CreateEnemy");
        if (clean)
        {
            Object[] allEnemies = GameObject.FindGameObjectsWithTag ("Enemy");
            foreach (GameObject enemy in allEnemies)
            {
                Destroy(enemy);
            }
        }   
    }
}

Ответы [ 2 ]

0 голосов
/ 01 марта 2019

Модифицированная версия для генерации врагов

Использование StartCoroutine с произвольным временем

using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;

    public class EnemyGeneratorController : MonoBehaviour
    {
        public GameObject enemyPrefeb;
         public float generatorTimer { set; get; }

        void Start () 
        {

generatorTimer = 1.75f;

    }

    void Update ()
    {

    }

    void IEnumerator CreateEnemy()
    {
        Instantiate (enemyPrefeb, transform.position, Quaternion.identity);
        yield return new WaitForSeconds(generatorTimer);
        generatorTimer = Random.Range(1f, 5f);
    }

    public void StartGenerator()
    {
        StartCoroutine(CreateEnemy());

    }

    public void CancelGenerator(bool clean = false)
    {
        CancelInvoke ("CreateEnemy");
        if (clean)
        {
            Object[] allEnemies = GameObject.FindGameObjectsWithTag ("Enemy");
            foreach (GameObject enemy in allEnemies)
            {
                Destroy(enemy);
            }
        }   
    }
}
0 голосов
/ 27 февраля 2019

Вы можете использовать StartCoroutine для простого создания противника:

using System.Collections;

...

private IEnumerator EnemyGenerator()
{
    while (true)
    {
        Vector3 randPosition = transform.position + (Vector3.up * Random.value); //Example of randomizing
        Instantiate (enemyPrefeb, randPosition, Quaternion.identity);
        yield return new WaitForSeconds(generatorTimer);
    }
}

public void StartGenerator()
{
    StartCoroutine(EnemyGenerator());
}

public void StopGenerator()
{
    StopAllCoroutines();
}

И, как сказал Эндрю Месерви, если вы хотите добавить случайность в таймер (например, чтобы сделать задержку появления случайным образом от 0,5 до 2,0 секунд), тогда вы можете просто заменить возврат доходности на этот:

yield return new WaitForSeconds(Mathf.Lerp(0.5f, 2.0f, Random.value));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...