Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > .NET > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Ответ
 
Опции темы
Старый 27.10.2019, 20:45   #1
Vladoscmn
Новичок
Джуниор
 
Регистрация: 27.10.2019
Сообщений: 1
По умолчанию Последовательный спаун блоков пути и рандомный спаун видов препятствий внутри них

Как это реализовать? Приложил скрипт, который сейчас рандомно генерирует блоки БЕЗ препятствий.
Задача: 1) последовательная генерация блоков дороги из массива. Т.е на что заменить Random.Range?
2) случайная генерация препятствий из массива на каждом блоке в определенных координатах. Если считать от центра каждого блока, то, допустим, будет z = -1, 0, 1.

Код:
public class RoadSpawner : MonoBehaviour
{
    public GameObject[] RoadBlockPrefabs; 

    float startBlockXPos; // позиция для старт блока 
    int blocksCount = 4; // сколько изначально блоков генерируется
    float blockLength = 0;

    public Transform PlayerTransf;
    List<GameObject> CurrentBlocks = new List<GameObject>();

    public Vector3 startPlayerPos;

    public void Start()
    {
        startBlockXPos = PlayerTransf.position.x + 20f;
        blockLength = 80; // длина

        StartGame();
    }

    public void StartGame()
    {
        PlayerTransf.GetComponent<MovePlayer>().ResetPosition(); // вызываем метод  старт позиции

        foreach (var go in CurrentBlocks) 
            Destroy(go);

        CurrentBlocks.Clear(); 

        for (int i = 0; i < blocksCount; i++) 
            SpawnBlock();
    }

    public void LateUpdate()
    {
        CheckForSpawn();
    }

    public void CheckForSpawn()
    {
        // если игрок находится дальше на...., чем текущий блок
        if (CurrentBlocks[0].transform.position.x - PlayerTransf.position.x < -60)  
        {
            SpawnBlock();
            DestroyBlock();
        }
    }

    public void SpawnBlock()
    {
        GameObject block = Instantiate(RoadBlockPrefabs[Random.Range(0, RoadBlockPrefabs.Length)], transform);
        Vector3 blockPos;

        if (CurrentBlocks.Count > 0)   
            blockPos = CurrentBlocks[CurrentBlocks.Count - 1].transform.position + new Vector3(blockLength, 0, 0);
   
        else
            blockPos = new Vector3(startBlockXPos, 0, 0);

        block.transform.position = blockPos;

        CurrentBlocks.Add(block);
    }

    public void DestroyBlock()
    {
        Destroy(CurrentBlocks[0]);
        CurrentBlocks.RemoveAt(0);
    }
}
Изображения
Тип файла: jpg 23523523 — копия.jpg (79.4 Кб, 43 просмотров)
Vladoscmn вне форума   Ответить с цитированием
Ответ
Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Узнать положение блоков внутри другого linkoln_7 JavaScript, Ajax 1 24.03.2015 12:28
В озере водиться несколько видов рыб. Три рыбака поймали рыб,представляющих некоторые из имеющихся видов. Определить: 1) Какие вид Proskurina Помощь студентам 5 20.02.2013 11:09
Обход динамичных препятствий CrHD Gamedev - cоздание игр: Unity, OpenGL, DirectX 4 19.05.2009 23:10