Скрипт для генерации платформ для endless runner.

Программирование на Юнити.

Скрипт для генерации платформ для endless runner.

Сообщение 50VAJJ 20 ноя 2018, 14:01

Привет. Пишу скрипт для генерации платформ для endless runner. Игрок стоит на месте, а платформы двигаются. Вот так я генерирую платформы:
Синтаксис:
Используется csharp
    public Transform spawnPoint;

    public GameObject[] tilePrefabs;

    public float reloadTime;

    public float tileSpeed;

    public bool inSpawn;

    IEnumerator SpawnCo;
    private void Start()
    {
        SpawnCo = SpawnCoroutine();
        StartCoroutine(SpawnCoroutine());
    }

    private void Update()
    {
        if (!inSpawn )
        {
            StartCoroutine(SpawnCoroutine());
        }
    }

    IEnumerator SpawnCoroutine()
    {
        inSpawn = true;
        SpawnTile();
        tileSpeed += 0.3F;
        yield return new WaitForSeconds(30/tileSpeed);//30 - это длина платформы, tileSpeed - это скорость движения платформы
        inSpawn = false;
    }

    private void SpawnTile()
    {
        tile = Instantiate(tilePrefabs[0], spawnPoint.transform.position, Quaternion.identity);
        tile.transform.SetParent(transform);
    }
 


Проблема в том, что между платформами есть просвет длиной где то в 0,5 единицы. Конечно, можно дописать, что-то типа WaitForSeconds(30/tileSpeed-0.5F), чтобы убрать просвет, но что-то мне подсказывает, что это неправильное решение. Может мой метод вообще не правильный?
50VAJJ
UNIт
 
Сообщения: 102
Зарегистрирован: 26 дек 2015, 23:44

Re: Скрипт для генерации платформ для endless runner.

Сообщение Friend123 20 ноя 2018, 15:19

Не бывает правильных или неправильных решений. Есть просто решение, чем больше опыта, тем оптимальнее оно становится.
Ваш код работает как вам надо? Если да, то больше ничего и не требуется.
Аватара пользователя
Friend123
Старожил
 
Сообщения: 701
Зарегистрирован: 26 фев 2012, 22:12
Откуда: Тверь
  • ICQ

Re: Скрипт для генерации платформ для endless runner.

Сообщение 50VAJJ 20 ноя 2018, 15:34

Friend123 писал(а):Не бывает правильных или неправильных решений. Есть просто решение, чем больше опыта, тем оптимальнее оно становится.
Ваш код работает как вам надо? Если да, то больше ничего и не требуется.

К сожалению не так как надо, так как есть просвет. А убирать просвет подстановкой константы - это крайне не оптимальное решение.
50VAJJ
UNIт
 
Сообщения: 102
Зарегистрирован: 26 дек 2015, 23:44

Re: Скрипт для генерации платформ для endless runner.

Сообщение 1max1 20 ноя 2018, 16:11

Когда спавнишь платформу смещай ее позицию так, чтобы не было просвета.
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

Re: Скрипт для генерации платформ для endless runner.

Сообщение Friend123 20 ноя 2018, 19:01

50VAJJ писал(а):К сожалению не так как надо, так как есть просвет. А убирать просвет подстановкой константы - это крайне не оптимальное решение.

Чтобы не затачиваться на временную переменную, запоминаем в переменной последнюю созданную платформу и когда создаем новую берем координаты предыдущей и + длина платформы, она должна как раз встать как надо, перед предыдущей.
Аватара пользователя
Friend123
Старожил
 
Сообщения: 701
Зарегистрирован: 26 фев 2012, 22:12
Откуда: Тверь
  • ICQ

Re: Скрипт для генерации платформ для endless runner.

Сообщение 50VAJJ 20 ноя 2018, 19:39

Friend123 писал(а):
50VAJJ писал(а):К сожалению не так как надо, так как есть просвет. А убирать просвет подстановкой константы - это крайне не оптимальное решение.

Чтобы не затачиваться на временную переменную, запоминаем в переменной последнюю созданную платформу и когда создаем новую берем координаты предыдущей и + длина платформы, она должна как раз встать как надо, перед предыдущей.


Синтаксис:
Используется csharp
    private void SpawnTile()
    {
        if(tile == null)
        {
            tile = Instantiate(tilePrefabs[0], spawnPoint.transform.position, Quaternion.identity);
        }
        else
        {
            tile = Instantiate(tilePrefabs[0], new Vector3(spawnPoint.transform.position.x, spawnPoint.transform.position.y , tile.transform.position.z + tile.transform.localScale.z) , Quaternion.identity);
        }
       
        tile.transform.SetParent(transform);
    }


Все равно есть просвет.
50VAJJ
UNIт
 
Сообщения: 102
Зарегистрирован: 26 дек 2015, 23:44

Re: Скрипт для генерации платформ для endless runner.

Сообщение 1max1 20 ноя 2018, 20:25

Ну и при чем тут скейл? Бери беспросветную дистанцию (та при которой нет просвета) между платформами за константу.
Вычисляешь спавн точку так - prev.position + direction * distConst;
prev - последняя платформа, direction - нормаль направления, ну и distConst дистанция офсета.
Это псевдокод, параметры думаю сам подберешь.
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51


Вернуться в Скрипты

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5