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

Перемешать объекты

06.01.2018, 13:32. Показов 4767. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет всем. Я не программист, я только учусь.
Есть количество объектов (только коллайдеры, из них некоторые как триггеры), нужно менять местами/перемешивать. Как можно решить? Бьюсь неделю уже.... Count это набиваемые очки, другой скрипт, висит на другом объекте.
В идеале хотелось бы перемешивать после достижения определенного количества очков. Про массивы и перемешивание читал, смотрел итп итд., но здесь туплю. Использую этот код.... может кто то подсказать?
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
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
 
public class Randomize : MonoBehaviour {
 
 
 
    private int[] block;
 
    void Start ()
 
    {
        
    }
    
    void Update () 
    {
 
        if (count = 100000) 
        {
            Shuffle (Block);
        }
        
    }
 
    void Shuffle (int[] block){
        for (int i = 0; i < block.Length; i++) {
            int temp = block[i];
            int r = Random.Range (0, block.Length);
            block[i] = block[r];
            block[r] = temp;
        }
    }
 
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
06.01.2018, 13:32
Ответы с готовыми решениями:

Удалить все объекты и создать объекты - потомки
Как сделать клоны объекта в другом объекте? Использую метод Instantiate Есть метод public Transform Elem; //элемент на...

Перемешать рандомно объекты
Помогите доработать скрипт перемешивания вариантов ответа в тесте. Скрин во вложении. Я в Actions совсем не силен, вот так как я сделал...

Как уничтожать динамические объекты и вообще объекты, если это необходимо сделать в их процедурах?
Создать отдельную процедуру CloseObject(Object: TObject) и вызывать ее в конце процедуры или так тоже нельзя? А то бесят эти access...

12
1 / 1 / 1
Регистрация: 09.11.2016
Сообщений: 51
06.01.2018, 22:37
Если нужно их перемешивать внутри массива, то в чем проблема этого кода?
0
0 / 0 / 0
Регистрация: 16.12.2017
Сообщений: 10
06.01.2018, 23:35  [ТС]
Проблема в коллайдерах. Их нужно перемешать, объекты неподвижные (с коллайдерами).
0
 Аватар для wmysterio
295 / 244 / 128
Регистрация: 24.12.2014
Сообщений: 708
06.01.2018, 23:43
Цитата Сообщение от VPantw Посмотреть сообщение
только коллайдеры, из них некоторые как триггеры
Я вижу только массив int-ов.

С виду, вроде правильно всё, только если нужно перемещать приватный массив "block", то в методе "Shuffle" можно обойтись без параметра "int[] block".

Если Вы используете массив коллайдеров, то как бы Вы не перемешивали их, позиция в иерархии не изменится. Для "реального" перемешивания нужно изменять ещё и позицию коллайдеров в иерархии объектов. Иначе Вы просто перемешаете ссылки на коллайдеры без какого либо эффекта.
0
0 / 0 / 0
Регистрация: 16.12.2017
Сообщений: 10
06.01.2018, 23:50  [ТС]
Согласен с intом я погорячился и ошибся. Нужно именно коллайдеры перемешивать...
0
 Аватар для wmysterio
295 / 244 / 128
Регистрация: 24.12.2014
Сообщений: 708
07.01.2018, 00:04
А коллайдеры "висят" на разных объектах (GameObject)? Возможно, найду способ перемешать их в иерархии ( это если я правильно понял суть вопроса )
0
0 / 0 / 0
Регистрация: 16.12.2017
Сообщений: 10
07.01.2018, 00:08  [ТС]
Висят на одинаковых объектах, CircleCollider2D. Но поверхностное изучение https://forum.unity.com/ подсказывает, что перемешать коллайдеры нельзя. Ищу дальше решение вопроса. Если у вас получится, буду признателен.
0
 Аватар для wmysterio
295 / 244 / 128
Регистрация: 24.12.2014
Сообщений: 708
07.01.2018, 00:23
Цитата Сообщение от VPantw Посмотреть сообщение
Висят на одинаковых объектах
Поставлю вопрос по другому: 1 коллайдер на объект или много коллайдеров на одном объекте? Если на 1 коллайдер на 1-м объекте, то есть шанс "перемешать" их в иерархии. Вот способ для первого варианта:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class Example : Monobehavior {
 
        private void Start() {
 
            var root = GameObject.Find( "col" ).transform;
            var colliders = root.GetComponentsInChildren<CircleCollider2D>();
            Mix( root, colliders, 100 );
 
        }
 
        private void Mix( Transform root, CircleCollider2D[] colliders, ushort power ) {
            var total = colliders.Length;
            if( 2 > total )
                return;
            for( int i = 0; i < power; i++ ) {
                var tmpGo = colliders[ UnityEngine.Random.Range( 0, total ) ];
                tmpGo.gameObject.transform.parent = null;
                tmpGo.gameObject.transform.parent = root;
            }
        }
 
}
Нужно создать пустой объект с именем "col" и туда накидать любых объектов, где будет 1 коллайдер.
1
0 / 0 / 0
Регистрация: 16.12.2017
Сообщений: 10
07.01.2018, 00:32  [ТС]
33 неподвижных объекта, на каждом висит 1 коллайдер. Коллайдеры должны менять позицию произвольно, в случайном порядке. При достижении какого то определенного цифрового значения, которое "выбивает" другой динамический объект из этих коллайдеров. Скрипт висит на этом объекте, см. ниже
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
44
45
46
47
48
49
50
51
52
53
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
 
public class Score_check : MonoBehaviour {
 
 
    public Text countText;
    public Text check;
 
    private int count;
 
 
    void Start()
    {
        count = 0;
        check.text = "";
    }
 
    void OnCollisionExit2D(Collision2D col) 
    {
        if (col.gameObject.CompareTag ("Block"))
        {
            count = count + 70000;
            SetCountText();
        }
    }
 
    void OnTriggerEnter2D(Collider2D other)
    {
        if (other.CompareTag ("Block")) 
        {
            count = count + 50000;
            SetCountText();
        }
    }
 
    void SetCountText()
    {
        countText.text = "" + count.ToString();
        if (count >= 1000000) 
        {
            check.text = "Bingo!";
        }
        if (count >= 2000000) 
        {
            check.text = "";
        }
 
    }
 
}
0
 Аватар для wmysterio
295 / 244 / 128
Регистрация: 24.12.2014
Сообщений: 708
07.01.2018, 00:34
Цитата Сообщение от VPantw Посмотреть сообщение
Коллайдеры должны менять позицию произвольно, в случайном порядке
Что-то Вы меня запутали ) Вам нужно менять позицию самого объекта? Причём здесь "перемешивание" массива?
0
0 / 0 / 0
Регистрация: 16.12.2017
Сообщений: 10
07.01.2018, 00:38  [ТС]
))) Вот вот.. Я уже неделю путаюсь сам. Именно позицию коллайдера менять нужно.
0
 Аватар для wmysterio
295 / 244 / 128
Регистрация: 24.12.2014
Сообщений: 708
07.01.2018, 00:50
О, это уже проясняет ситуацию )

Методы для смены позиции ( в данном случае меняются местами два коллайдера ):
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
        // глобальные координаты
        private void SwapCollidersGlobal( CircleCollider2D left, CircleCollider2D right ) {
            var tmp = left.gameObject.transform.position;
            left.gameObject.transform.position = right.gameObject.transform.position;
            right.gameObject.transform.position = tmp;
        }
 
        // локальные координаты
        private void SwapCollidersLocal( CircleCollider2D left, CircleCollider2D right ) {
            var tmp = left.gameObject.transform.localPosition;
            left.gameObject.transform.localPosition = right.gameObject.transform.localPosition;
            right.gameObject.transform.localPosition = tmp;
        }
Методы для смены оффсета ( в данном случае меняются оффсеты двух коллайдеров местами ):
C#
1
2
3
4
5
        private void SwapCollidersOffset( CircleCollider2D left, CircleCollider2D right ) {
            var tmpOffset = left.offset;
            left.offset = right.offset;
            right.offset = tmpOffset;
        }
Не знаю как у Вас там реализовано, но какой-то должен подойти.
1
0 / 0 / 0
Регистрация: 16.12.2017
Сообщений: 10
07.01.2018, 11:14  [ТС]
Спасибо за помощь, все 3 три варианта рабочие. Я ступил конкретно с коллайдерами, буду менять параметры.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
07.01.2018, 11:14
Помогаю со студенческими работами здесь

Встроенные объекты Java Script. Объекты Array, Date
Создать массив, содержащий названия элементов, находящихся в системном блоке компьютера. Добавить к нему массив, содержащий названия ...

Функция создает объекты и указателями на них заполняет массив. При выходе из функции вызываются деструкторы объектов. Как сохранить объекты?
Вопрос прост: как при выходе из функции сохранить объекты, которые были созданы в данной функции (указатели объектов положены в массив)?

В окне перемещаются объекты, отталкиваясь от стенок окна. Каждый объект имеет свой поток, перемещающий его. Встретившись, объекты начинают двигаться
В окне перемещаются объекты, отталкиваясь от стенок окна. Каждый объект имеет свой поток, перемещающий его. Встретившись, объекты...

Перемешать
Мучаюсь с перемешиванием проект 400+ строк осталось малость: в Лист бокс добавлены 4 слова -----------------------событие...

перемешать масив
помогите перемешать масив из 28 чисел но так чтобы не повторялись {for (i=1;i&lt;28;i++) {b=i+1; ...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
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
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru