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

Появляется новое значение в списке

27.11.2021, 22:04. Показов 551. Ответов 6

Студворк — интернет-сервис помощи студентам
У меня есть словарь содержащий игровой объект и соответствующий ему список с его координатами. Через метод я хочу проверить, есть ли по определенным координатам какой-либо объект из списка, и если совпадений нет, то рисую квадрат на игровом поле. Я выводил значения x и y через Debug.Log (так как квадраты не рисовались вообще) и обнаружил, что текущие координаты каким-то образом появляются в списке с координатами игровых объектов на поле.

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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
 
public class BoardScript : MonoBehaviour
{
    public Dictionary<GameObject, List<float>> pos_dict_black = new Dictionary<GameObject, List<float>>();
    public GameObject brick;
 
    void Start()
    {
        GameObject[] Points_black_obj = GameObject.FindGameObjectsWithTag("Black_point");
        pos_dict_black.Add(Points_black_obj[0], new List<float> {3, -1, 1} );
        pos_dict_black.Add(Points_black_obj[1], new List<float> { 4, -1, 1 });
        pos_dict_black.Add(Points_black_obj[2], new List<float> { 5, -1, 1 });
        pos_dict_black.Add(Points_black_obj[3], new List<float> { 6, -1, 1 });
        pos_dict_black.Add(Points_black_obj[4], new List<float> { 7, -1, 1 });
        pos_dict_black.Add(Points_black_obj[5], new List<float> { 8, -1, 1 });
        pos_dict_black.Add(Points_black_obj[6], new List<float> { 9, -1, 1 });
        pos_dict_black.Add(Points_black_obj[7], new List<float> { 6, -2, 1 });
        pos_dict_black.Add(Points_black_obj[8], new List<float> { 1, -3, 1 });
        pos_dict_black.Add(Points_black_obj[9], new List<float> { 1, -4, 1 });
        pos_dict_black.Add(Points_black_obj[10], new List<float> { 1, -5, 1 });
        pos_dict_black.Add(Points_black_obj[11], new List<float> { 1, -6, 1 });
        pos_dict_black.Add(Points_black_obj[12], new List<float> { 1, -7, 1 });
        pos_dict_black.Add(Points_black_obj[13], new List<float> { 1, -8, 1 });
        pos_dict_black.Add(Points_black_obj[14], new List<float> { 1, -9, 1 });
        pos_dict_black.Add(Points_black_obj[15], new List<float> { 2, -6, 1 });
        pos_dict_black.Add(Points_black_obj[16], new List<float> { 11, -3, 1 });
        pos_dict_black.Add(Points_black_obj[17], new List<float> { 11, -4, 1 });
        pos_dict_black.Add(Points_black_obj[18], new List<float> { 11, -5, 1 });
        pos_dict_black.Add(Points_black_obj[19], new List<float> { 11, -6, 1 });
        pos_dict_black.Add(Points_black_obj[20], new List<float> { 11, -7, 1 });
        pos_dict_black.Add(Points_black_obj[21], new List<float> { 11, -8, 1 });
        pos_dict_black.Add(Points_black_obj[22], new List<float> { 11, -9, 1 });
        pos_dict_black.Add(Points_black_obj[23], new List<float> { 10, -6, 1 });
        pos_dict_black.Add(Points_black_obj[24], new List<float> { 3, -11, 1 });
        pos_dict_black.Add(Points_black_obj[25], new List<float> { 4, -11, 1 });
        pos_dict_black.Add(Points_black_obj[26], new List<float> { 5, -11, 1 });
        pos_dict_black.Add(Points_black_obj[27], new List<float> { 6, -11, 1 });
        pos_dict_black.Add(Points_black_obj[28], new List<float> { 7, -11, 1 });
        pos_dict_black.Add(Points_black_obj[29], new List<float> { 8, -11, 1 });
        pos_dict_black.Add(Points_black_obj[30], new List<float> { 9, -11, 1 });
        pos_dict_black.Add(Points_black_obj[31], new List<float> { 6, -10, 1 });
 
        foreach (GameObject i in Points_black_obj)
        {
            i.transform.position = new Vector3(pos_dict_black[i][0], pos_dict_black[i][1], pos_dict_black[i][2]);
        }
 
    }
 
    // Update is called once per frame
    void Update()
    {
        if (Input.GetMouseButtonDown(0))
        {
            Vector2 ray = Camera.main.ScreenToWorldPoint(Input.mousePosition); // Луч от текущих координат мыши вперёд
            RaycastHit2D[] raycasts = Physics2D.RaycastAll(ray, Vector2.zero); // Все объекты под лучём
            if(raycasts.Length > 0)
            {
                foreach(RaycastHit2D hit in raycasts)
                {
                    if (hit.transform.gameObject.tag == "Black_point")
                    {
                        GameObject usePoint = hit.transform.gameObject;
                        List<float> lst_plat = pos_dict_black[usePoint];
                        List<float> lst_now = lst_plat;
                        
                        for (int count = 0; count < 11; count++)
                        {
                            if (!Conformity(pos_dict_black, lst_now))
                            {
                                Instantiate(brick, new Vector3(lst_plat[0]+count, lst_plat[1], 1), Quaternion.identity);
                                lst_now = new List<float> { lst_plat[0], lst_plat[1], 1};
                            }
                            else
                            {
                                break;
                            }
                            
                        }
                    }     
                }
            }
        }
    }
 
    public bool Conformity(Dictionary<GameObject, List<float>> dict, List<float> lst)
    {
        bool res = false;
 
        
        Debug.Log(lst[0]);
        Debug.Log(lst[1]);
        Debug.Log(1000000);
        foreach (List<float> k in dict.Values)
        {
            Debug.Log(k[0]);
            Debug.Log(k[1]);
            if (k[0] == lst[0] && k[1] == lst[1])
            {
                res = true;
            }
        }
        
        return res;
    }
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
27.11.2021, 22:04
Ответы с готовыми решениями:

Виджет Android 4.1 не появляется в списке
Добрый вечер, уважаемые форумчане. Учусь создавать приложения для андройда, добрался до виджетов. В уроке размещенном на сайте...

Виджет не появляется в списке виджетов
Разбираю урок 117 проекта startandroid, делаю все как в уроке, но виджет не появляется в списке. Мне кажется, дело в том, что у меня в...

Не появляется запись в списке access
Здравствуйте . помогите пожалуйста. сделала список в форме и по списку поиск. открывала форму для добавления. добавляла имена и все...

6
 Аватар для samana
2639 / 1567 / 853
Регистрация: 23.02.2019
Сообщений: 3,876
27.11.2021, 22:22
Я пропущу реализацию всей этой затеи, просто хочу напомнить следующее. Этот кусочек кода может оказаться проблемным
C#
1
2
List<float> lst_plat = pos_dict_black[usePoint];
List<float> lst_now = lst_plat;
Причина в том, что коллекции в C# имеют ссылочный тип. То-есть сейчас ваши переменные lst_plat, lst_now и pos_dict_black[usePoint] ссылаются на один и тот же список в памяти и все вместе им манипулируют одновременно.
1
0 / 0 / 0
Регистрация: 04.02.2021
Сообщений: 13
27.11.2021, 22:53  [ТС]
Не подскажете, как можно решить эту проблему в таком случае? Для моей задачи очень удобны коллекции, не хотелось бы заменять на что-либо другое
0
 Аватар для 1max1
3362 / 1775 / 1028
Регистрация: 26.10.2018
Сообщений: 5,204
27.11.2021, 23:08
Если нужна копия, а не ссылка на тот же объект, делай клона.
C#
1
List<float> list = new List<float>(other_list);
2
0 / 0 / 0
Регистрация: 04.02.2021
Сообщений: 13
27.11.2021, 23:12  [ТС]
Точнее... как можно скопировать значение из словаря, а не ссылку?
0
 Аватар для samana
2639 / 1567 / 853
Регистрация: 23.02.2019
Сообщений: 3,876
28.11.2021, 11:35
Emmer, Вы могли бы подробнее описать саму идею того, чего хотите получить? Потому что сейчас совершенно непонятно зачем при попадании лучом в объект, проверять заранее подготовленные координаты этого объекта из словаря? Ведь если луч попал в объект - значит мы уже получаем информацию об этом объекте, и лезть в словарь каких-то координат просто нет нужды.
В виду игра похожа на какой-то Маджонг, но я не смог понять логику происходящего в коде. Скорее всего ваш код можно переписать совершенно иначе, но сначала нужно чётко узнать - что он должен делать.
0
0 / 0 / 0
Регистрация: 04.02.2021
Сообщений: 13
30.11.2021, 23:03  [ТС]
Я создаю аналог игры викингов - Tafle. Мне нужно было каким-то образом реализовать перемещение фигур строго по сетке. Для этого создал скрипт, который расставляет заранее фигуры на нужные места и записывает их координаты в словарь. А для передвижения просто меняет их позиции в словаре и производит перемещение. А проверка координат нужна только для отображения возможных клеточек перемещения (если в словаре есть фигура по каким-то координатам, то клеточка не рисуется). Вообще, это моя первая пошаговая игра и я не нашел выхода лучше. Могу выложить полную информацию по игре, если интересно). Проблему темы я решил, просто заменив лист в значениях словаря на массив.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
30.11.2021, 23:03
Помогаю со студенческими работами здесь

На телефоне виджет не появляется в списке виджетов
Добрый день! Сделал виджет - устанавливается и работает на планшете Asus Transformer Устанавливаю на телефон Fly IQ444 Quattro -...

Прибор с FT232RL не появляется в списке устройств.
Имеется прибор респектабельной фирмы, проработал у клиента более двух лет и недавно перестал определяться. При подключении прибора к USB...

Не могу сменить программу по умолчанию (не появляется в списке)
Друзья, подскажите, как справиться с проблемой: есть 64-битная Windows 7 Максимальная, в какой-то момент времени (может быть после переноса...

Каким оператором можно изменить значение поля Fa объекта а на новое ненулевое значение?
Правильный ли ответ? Дано следующее описание: T = class Fa: real; constructor Create(p: real); end; var a:T; Изменить...

При запуске вручную squid не появляется в списке процессов
Здравствуйте уважаемые, помогите разобраться в сложившейся ситуации: Собсно поставил SQUID на новую систему(10.04), сделал минимальные...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки на предмет заполнения реквизитов реализован с целью установки значения по умолчанию,. . .
Команды "Заполнить" и "Очистить" на форме документа
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". На примере нетипового документа разработанного в конфигурации КА2. В качестве источника данных указан регистр накопления, в который записываются данные о. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru