Форум программистов, компьютерный форум, киберфорум
Unity, Unity3D
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/7: Рейтинг темы: голосов - 7, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 13.02.2021
Сообщений: 23

Спавнящиеся обьекты наслаиваются друг на друга, как пофиксить?

25.04.2021, 13:18. Показов 1485. Ответов 5

Студворк — интернет-сервис помощи студентам
есть скрипт, что спавнит обьекты (в данном случае Enemys и Bonus) с определенной периодичностью
Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
 
public class EnemyGenerator : MonoBehaviour
{
    public GameObject[] Enemys;
    public GameObject Bonus;
    public float minDelay, maxDelay;
    public float minX;
    public float maxX;
    void Start()
    {
        StartCoroutine(Spawn());
    }
    private void Repeat()
    {
        StartCoroutine(Spawn());
    }
 
    void Update()
    {
 
        Vector2 min = Camera.main.ViewportToWorldPoint(new Vector2(0, 0)); // bottom-left corner
        Vector2 max = Camera.main.ViewportToWorldPoint(new Vector2(1, 1)); // top-right corner\
        maxX = max.x;
        minX = min.x;
    }
    IEnumerator Spawn()
    {
        yield return new WaitForSeconds(Random.Range(minDelay, maxDelay));
 
        Vector2 pos = new Vector2(Random.Range(minX, maxX), transform.position.y);
        GameObject e = Instantiate(Enemys[Random.Range(0, Enemys.Length)], pos, Quaternion.identity) as GameObject;
        int r = Random.Range(0, 100);
        Vector2 Bonuspos = new Vector2(Random.Range(minX, maxX), transform.position.y);
        if (r<= 25)
        {
            GameObject b = Instantiate(Bonus, Bonuspos, Quaternion.identity) as GameObject;
        }
        Repeat();
    }
}
столкнулась с такой проблемой, эти обьекты спавнятся друг в друге.Название: edb319430488bf587f11c174aba9984a.png
Просмотров: 134

Размер: 2.6 Кб, знаю что нужно сделать проверку, а как именно не понимаю. Помогите пожалуйста.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
25.04.2021, 13:18
Ответы с готовыми решениями:

Гистограммы наслаиваются друг на друга
Пытаюсь сделать цикл, который будет пробегаться по каждому столбцу и строить на основе каждого гистограмму. Но столбцы наславаются друг на...

Колонки наслаиваются друг на друга
Есть 6 блоков, разделены в 2 колонки по 3 в каждой. Хочу сделать так что бы при уменьшении разрешения они не наслаивались друг на друга. ...

Фрагменты наслаиваются друг на друга
Добрый день. Не пойму почему фрагменты наслаиваются друг на друга В main активити в onCreate включается первый фрагмент, чтобы чтото...

5
8 / 5 / 4
Регистрация: 31.01.2021
Сообщений: 30
25.04.2021, 16:19
Проверь min и max,
C#
1
Debug.Log($"{min}, {max}");
возможно они выдают одинаковые значения.
0
0 / 0 / 0
Регистрация: 13.02.2021
Сообщений: 23
25.04.2021, 16:46  [ТС]
нет, потому что эти строки:
C#
1
2
 Vector2 min = Camera.main.ViewportToWorldPoint(new Vector2(0, 0)); // bottom-left corner
 Vector2 max = Camera.main.ViewportToWorldPoint(new Vector2(1, 1)); // top-right corner
определяют границы камеры на разных расширениях экрана, значит они не могут иметь одинаковые значения
0
0 / 0 / 0
Регистрация: 13.02.2021
Сообщений: 23
26.04.2021, 17:53  [ТС]
блин ну помогите пожалуйста
0
Эксперт .NETАвтор FAQ
 Аватар для Storm23
10427 / 5157 / 1825
Регистрация: 11.01.2015
Сообщений: 6,226
Записей в блоге: 34
27.04.2021, 11:20
Цитата Сообщение от vasilis122344 Посмотреть сообщение
Спавнящиеся обьекты наслаиваются друг на друга
Самый простой способ свести к минимуму вероятность перекрытия спавнящихся объектов - это использовать т.н. генератор случайных чисел с малым расхождением (low discrepancy uniform distribution). Например последовательность Хелтона (Halton sequence). Там же по ссылке на картинке можно видеть разницу между обычным рандомом и low discrepancy рандомом.

Код:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
    /// <summary>
    /// Halton uniform distribution with low dispersion (0..1) 
    /// </summary>
    /// <param name="index">Index of sequence</param>
    /// <param name="basePrime">Any prime number (2, 3, 5, 7, 11, etc)</param>
    /// <returns>Pseudo-random value (from 0 to 1)</returns>
    /// <remarks>
    /// https://en.wikipedia.org/wiki/Halton_sequence
    /// </remarks>
    public static float HaltonSequence(int index, int basePrime = 2)
    {
        var fraction = 1.0;
        var result = 0.0;
        while (index > 0)
        {
            fraction /= basePrime;
            result += fraction * (index % basePrime);
            index = UnityEngine.Mathf.FloorToInt(index / basePrime); // floor division
        }
        return (float)result;
    }
Как использовать - разжевывать не буду, подумайте сами.
1
2 / 1 / 1
Регистрация: 04.08.2015
Сообщений: 126
07.05.2021, 12:36
Можно после спавна обьекта добавлять его координаты в список, и перед спавном следующего выбирать для него координаты из диапазона, исключив занятые другими позиции, или запустив генерацию координат еще раз. Если незанятое место ищется слишком долго, добавить дополнительную обработку, написав скрипт который ищет пустое незанятое место среди списка уже заполненных координат. После удаления обьекта список надо апдейтить.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
07.05.2021, 12:36
Помогаю со студенческими работами здесь

Контейнеры наслаиваются друг на друга при изменении ширины браузера
Здравствуйте, начал изучать css и html, пробую создать сайт, но сталкнулся с такой проблемой: при изменении ширины браузера до минимальной,...

Обьекты на странице залазят друг на друга при изменении масштаба
При масштабе в 100% объекты верхней секции залазят друг на друга,причем с секциями ниже все в порядке,хорошо адаптируется.При уменьшении...

Как в PHP отделить элементы друг от друга, чтобы не ругались друг на друга?
&lt;?php $chitat = fopen('yoo.txt', 'r'); if (!$chitat) { echo 'Ошибка при открытии файла yoo.txt'; } while (false !== ($char =...

Плохо ли делать зависящие друга от друга классы, в которых присутствуют указатели на обьекты других классов?
Тру девелоперы,расскажите,почему говорят,что плохо делать зависящие друга классы,в которых присутствуют указатели на обьекты других классов?

Как сделать чтобы следующий обьекты массива располагались не в одной точке а друг за другом, в разных позициях?
Добрый день. Подскажите пожалуйста как сделать чтобы следующий обьекты массива располагались не в одной точке а друг за другом, в разных...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru