Задать вопрос
Triborg-333
@Triborg-333

Защита от пересечения генерируемых объектов — Unity 2d?

Здравствуйте, уважаемые программисты) не могу решить проблему прошу помочь)
Нужно сделать так, чтобы созданные объекты не пересекались (то есть не накладывались друг на друга).

621594882bb50887444904.png

Код:

public GameObject player;
    public GameObject platformPrefab;
   
    public float minY = -4.5f;
    public float maxY = 4.7f;

    Vector2 spawnFix;

    void OnTriggerEnter2D(Collider2D collision)
    {
        if (collision.CompareTag("Platform"))
        {
            Vector2 targetPosition = new Vector2(Random.Range(-1.8f, 1.8f), player.transform.position.y + Random.Range(4.5f, 4.7f));
            GameObject p = Instantiate(platformPrefab, targetPosition, Quaternion.identity);
            Destroy(collision.gameObject);
        }
    }
  • Вопрос задан
  • 139 просмотров
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 2
GavriKos
@GavriKos Куратор тега Unity
Ну так проверяйте после инстансинга - если пересеклось - перемещайте/удаляйте. Что конкретно из этого у вас не получается?

P.S. да, сам мой алгоритм - говно, но начинать надо с малого
Ответ написан
Комментировать
@AliminVerckon
public GameObject player;
    public GameObject platformPrefab;
   
    public float minY = -4.5f;
    public float maxY = 4.7f;

public float ratio = 1.2f;
public float sizeplatformony;
public float lastvalue;

    Vector2 spawnFix;

    void OnTriggerEnter2D(Collider2D collision)
    {
        if (collision.CompareTag("Platform"))
        {
           Value = player.transform.position.y + Random.Range(MinY MaxY);
            Vector2 targetPosition = new Vector2(Random.Range(-1.8f, 1.8f),  value);
if(Value-lastvalue > sizeplatformony + ratio){
            GameObject p = Instantiate(platformPrefab, targetPosition, Quaternion.identity);
            Destroy(collision.gameObject);
lastvalue = Value;
} else {
GameObject p = Instantiate(platformPrefab, targetPosition+ratio, Quaternion.identity);
            Destroy(collision.gameObject);
lastvalue = Value + ratio;
}
        }
    }


Не весь код = плохо, не знаю как у тебя генерируется первая платформа, но тебе придется занести Y координату первой платформы в lastvalue, иначе конфликт!
Аккуратность подредактируешь в редакторе и если есть ошибки в регистре тоже в IDE.
И ratio (Коэффициент) настроишь как тебе надо в инспекторе, он влияет на минимальную высоту между новой и старой платформой
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы