Неисправный спан платформ в 2д ранере

Форум для самых маленьких, а так же тех, кому недосуг читать справку самостоятельно.

Неисправный спан платформ в 2д ранере

Сообщение Meerex 08 авг 2020, 09:31

Привет! Делаю 2D ранер. Написал скрипт, который должен спавнить платформы. Если размер у платформ одинаковый, то все работает корректно. Но если размеры разные они спавнятся то слишком близко, то слишком далеко.
Скрипт:
Синтаксис:
Используется csharp
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class RoadSpawner : MonoBehaviour
{
    public GameObject[] RoadBlockPrefabs;
    public GameObject StartBlock;

    float BlockYPos = 0;
    int BlocksCount = 7;
    float blockLenght = 0;

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

    void Start()
    {
        BlockYPos = StartBlock.transform.position.y;
        blockLenght = StartBlock.GetComponent<BoxCollider2D>().bounds.size.y;
        for (int i = 0; i < 1; i++)
        {
                SpawnBlock();
        }
        for (int i = 0; i < BlocksCount - 1; i++)
        {
            blockLenght = CurrentBlocks[i].GetComponent<BoxCollider2D>().bounds.size.y;
            SpawnBlock();
        }
    }

    void Update()
    {
       
    }
   
    void SpawnBlock()
    {
        GameObject block = Instantiate(RoadBlockPrefabs[Random.Range(0, RoadBlockPrefabs.Length)], transform);
        BlockYPos += blockLenght;
        block.transform.position = new Vector2(4.5f, BlockYPos);
        CurrentBlocks.Add(block);
    }
}
Meerex
UNец
 
Сообщения: 47
Зарегистрирован: 27 апр 2019, 18:44

Re: Неисправный спан платформ в 2д ранере

Сообщение samana 08 авг 2020, 13:30

Сложно угадать каким вы хотите видеть результат. Покажите скриншоты или нарисуйте то, как это всё должно выглядеть в правильном состоянии. Потому что
Meerex писал(а):они спавнятся то слишком близко, то слишком далеко

довольно абстрактная ситуация.

Сейчас у вас создаётся какая-то вертикальная стопка из платформ, так и задумано?

Скорее всего у ваших платформ центр координат (pivot) находится в центре каждой платформы. А так как вышина у платформ разная, то расположить их строго одну на другой и не получилось, так как расстояние между такими платформами должно равняться
расстояние по игрек = (половина вышины нижней платформы + половина вышины верхней платформы)

Чтобы не рассчитывать эти ширины, просто поместите центр координат каждой платформы в её низ, тогда каждую следующую платформу (которая должна быть сверху предыдущей), достаточно расположить выше на вышину предыдущей платформы (кажется у вас сейчас так и высчитывается).
Аватара пользователя
samana
Адепт
 
Сообщения: 4738
Зарегистрирован: 21 фев 2015, 13:00
Откуда: Днепропетровск

Re: Неисправный спан платформ в 2д ранере

Сообщение Meerex 08 авг 2020, 15:14

https://youtu.be/zNySu64S9xM вот видео. в месте, где я верчу мышкой по префабу, расположение самого колайдера.
Meerex
UNец
 
Сообщения: 47
Зарегистрирован: 27 апр 2019, 18:44

Re: Неисправный спан платформ в 2д ранере

Сообщение samana 08 авг 2020, 15:31

Если я правильно увидел по видео, то у вас действительно начало координат каждого префаба платформы находится в середине, а не внизу. Зайдите в каждый префаб и сместите объекты в нём выше, так, чтобы начало координат оказалось визуально в самом низу.
Аватара пользователя
samana
Адепт
 
Сообщения: 4738
Зарегистрирован: 21 фев 2015, 13:00
Откуда: Днепропетровск

Re: Неисправный спан платформ в 2д ранере

Сообщение Meerex 08 авг 2020, 15:36

вот так? https://ibb.co/q5gMzfF
Meerex
UNец
 
Сообщения: 47
Зарегистрирован: 27 апр 2019, 18:44

Re: Неисправный спан платформ в 2д ранере

Сообщение Meerex 08 авг 2020, 15:46

если так, то не работает. Точнее, изменения есть, но все равно отображается некорректно.
Meerex
UNец
 
Сообщения: 47
Зарегистрирован: 27 апр 2019, 18:44

Re: Неисправный спан платформ в 2д ранере

Сообщение samana 08 авг 2020, 17:21

Meerex писал(а):вот так? https://ibb.co/q5gMzfF

Да, я это имел в виду. Странно, что не помогло. Возможно дело в размерах коллайдеров по которым вы определяете (длину/вышину) каждой секции коридора. Но это нужно сесть и попробовать в самой unity, чтобы помочь вам выявить проблему. Смогу это сделать, но попозже.
Аватара пользователя
samana
Адепт
 
Сообщения: 4738
Зарегистрирован: 21 фев 2015, 13:00
Откуда: Днепропетровск

Re: Неисправный спан платформ в 2д ранере

Сообщение Meerex 08 авг 2020, 17:25

Хорошо. Я отпишу вам если исправлю проблему.
Meerex
UNец
 
Сообщения: 47
Зарегистрирован: 27 апр 2019, 18:44

Re: Неисправный спан платформ в 2д ранере

Сообщение samana 08 авг 2020, 18:56

Как и ожидал, у меня не получилось воссоздать вашу проблему :-??
Если у каждого префаба центр координат в самом низу, то "коридор" создаётся корректно, один над другим.

Правда я немного упростил ваш код, мне показалось, что так удобнее
Синтаксис:
Используется csharp
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class RoadSpawner : MonoBehaviour
{
    public GameObject[] RoadBlockPrefabs; // массив с частями/префабами тоннеля
    public GameObject StartBlock; // ссылка не первую, существующую часть тоннеля со сцены

    public int BlocksCount = 5;  // сколько частей тоннеля будет создано всего на уровне

    List<GameObject> CurrentBlocks = new List<GameObject>(); // массив частей тоннеля

    void Start()
    {
        // добавили первую, существующую часть тоннеля в массив
        CurrentBlocks.Add(StartBlock);

        // затем создаём остальной "коридор", помещая каждый новую часть тоннеля над предыдущей
        for (int i = 1; i < BlocksCount; i++)
        {
            GameObject prevBlock = CurrentBlocks[i - 1];
            float prevBlockMaxY = prevBlock.transform.position.y + prevBlock.GetComponent<BoxCollider2D>().size.y;
            SpawnBlock(new Vector2(4.5f, prevBlockMaxY));
        }

    }

    // создаёт случайную часть тоннеля, и добавляет её в массив.
    void SpawnBlock(Vector2 pos)
    {
        GameObject block = Instantiate(RoadBlockPrefabs[Random.Range(0, RoadBlockPrefabs.Length)], transform);
        block.transform.position = pos;
        CurrentBlocks.Add(block);
    }
}
Аватара пользователя
samana
Адепт
 
Сообщения: 4738
Зарегистрирован: 21 фев 2015, 13:00
Откуда: Днепропетровск

Re: Неисправный спан платформ в 2д ранере

Сообщение Meerex 08 авг 2020, 19:11

Я очень вам благодарен за то, что вы трудились над моей проблемой. Сейчас попробую перебилдить проект. Ваш скрипт действительно написан проще. Спасибо.
Meerex
UNец
 
Сообщения: 47
Зарегистрирован: 27 апр 2019, 18:44

Re: Неисправный спан платформ в 2д ранере

Сообщение Meerex 08 авг 2020, 20:05

Спасибо, samana. Решил проблему. Как оказалось, надо было смещать центр координат не прямо вниз, а лишь немного, смотря на изменения относительно стартовой платформы.
Meerex
UNец
 
Сообщения: 47
Зарегистрирован: 27 апр 2019, 18:44


Вернуться в Почемучка

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

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