Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

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

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

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.10.2019, 19: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 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


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