Форум программистов, компьютерный форум, киберфорум
Unity, Unity3D
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.91/88: Рейтинг темы: голосов - 88, средняя оценка - 4.91
2 / 2 / 2
Регистрация: 24.12.2017
Сообщений: 70

Определение нажатого button'a в Unity3D C#

24.12.2017, 18:51. Показов 19089. Ответов 20
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый вечер, уважаемые форумчане. Делаю простенькую игру. Есть 40 button'ов и все они выполняют одну и ту же функцию в скрипте. Моя проблема в том, что я незнаю как реализовать такое: когда человек нажимает на любую кнопку, нужно узнать на какую именно он нажал(по тегу или названию button'а). Заранее спасибо.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
24.12.2017, 18:51
Ответы с готовыми решениями:

Определение себя на карте и построение этой карты в Unity3d
добрый вечер. возник такой вопрос: каким образом можно реализовать определение себя на карте и построение этой карты в Unity3d? суть:...

Процедура для Buttona
http://s42.***********/i095/1212/3d/9c9f872dd169.jpg Подскажите пожалуйста какие процедуры нужно вписать в Button что бы при нажатие он...

QML создание эфекта buttona
Есть rectangle , и из него нужно сделать кнопку. как с помощью qml сделать эффект буттона ? (эфект нажатия и отпускания) Спасибо

20
58 / 57 / 15
Регистрация: 15.09.2012
Сообщений: 557
24.12.2017, 20:26
C#
1
2
3
4
5
6
7
8
9
void OnClick()
{
string nameButton = EventSystem.current.currentSelectedGameObject.name;
   if(nameButton == "First"){
      DoSomething();
   }else if (...){
      ...
   }
}
1
 Аватар для Cr0c
753 / 600 / 204
Регистрация: 06.08.2015
Сообщений: 2,432
24.12.2017, 21:36
Много геморроя с получением го кнопки. Лучше на кнопку вешать метод с параметром, разным у каждой кнопки.
0
136 / 131 / 43
Регистрация: 07.11.2017
Сообщений: 553
25.12.2017, 11:42
на кнопку можно поцепить скрипт и там хранить информацию:
id, name, другие параметры.
и при нажатии обрабатывать что было нажато.
я вышел из ситуации как в этой теме ( через gameobject)
Как словить объект при нажатии?
0
2 / 2 / 2
Регистрация: 24.12.2017
Сообщений: 70
25.12.2017, 12:06  [ТС]
Спасибо большое
0
 Аватар для Cr0c
753 / 600 / 204
Регистрация: 06.08.2015
Сообщений: 2,432
26.12.2017, 21:51
Цитата Сообщение от f3hler Посмотреть сообщение
на кнопку можно поцепить скрипт и там хранить информацию
Зачем, если можно без скрипта просто передать id и по нему в контроллере делать что надо без лишних скриптов?
0
2 / 2 / 2
Регистрация: 24.12.2017
Сообщений: 70
26.12.2017, 23:27  [ТС]
Подскажите пожалуйста, как это реализовать?
0
 Аватар для Cr0c
753 / 600 / 204
Регистрация: 06.08.2015
Сообщений: 2,432
27.12.2017, 12:01
Массив с ивентами, чтобы в инспекторе настраивать методы.
В кнопке инт - элемент из массива для вызова.
Самый просто вариант:
C#
1
2
3
4
5
public UnityEvents[] myActions;
public void ButtonClick(int value) {
 if (value >= 0 && value < myActions.Legth)
  myActions[value]();
}
0
136 / 131 / 43
Регистрация: 07.11.2017
Сообщений: 553
28.12.2017, 12:08
Цитата Сообщение от Cr0c Посмотреть сообщение
Массив с ивентами
Cr0c, а как правильно заполнить?
0
 Аватар для Prog_maker
459 / 403 / 153
Регистрация: 23.01.2011
Сообщений: 1,054
28.12.2017, 13:21
Цитата Сообщение от Cr0c Посмотреть сообщение
myActions[value]();
чуток не дописал )))
C#
1
myActions [value].Invoke();
0
 Аватар для Prog_maker
459 / 403 / 153
Регистрация: 23.01.2011
Сообщений: 1,054
28.12.2017, 13:46
Цитата Сообщение от f3hler Посмотреть сообщение
а как правильно заполнить?
Как то так

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
using UnityEngine;
using UnityEngine.Events;
 
public class EventsController : MonoBehaviour {
 
    public UnityEvent[] myActions;
 
    public void ButtonClick (int value)
    {
        if (value >= 0 && value < myActions.Length)
        {
            myActions [value].Invoke();
        }     
    }
}
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
using UnityEngine;
 
public class EventKeeper : MonoBehaviour {
 
    public void EventOne ()
    {
        Debug.Log ("EventOne");
    }
 
    public void EventTwo ()
    {
        Debug.Log ("EventTwo");
    }
 
    public void EventThree ()
    {
        Debug.Log ("EventThree");
    }
 
    public void EventFour ()
    {
        Debug.Log ("EventFour");
    }
Миниатюры
Определение нажатого button'a в Unity3D C#   Определение нажатого button'a в Unity3D C#   Определение нажатого button'a в Unity3D C#  

Определение нажатого button'a в Unity3D C#  
0
136 / 131 / 43
Регистрация: 07.11.2017
Сообщений: 553
28.12.2017, 16:09
та ну... это скучно каждому ставить.. 40 обьектов замучаешся
0
 Аватар для Cr0c
753 / 600 / 204
Регистрация: 06.08.2015
Сообщений: 2,432
28.12.2017, 18:56
Prog_maker, привык к делегатам, а не ивентам ))

Добавлено через 57 секунд
f3hler, надо веселый и радостный пример привести?
1
136 / 131 / 43
Регистрация: 07.11.2017
Сообщений: 553
29.12.2017, 10:18
Цитата Сообщение от Cr0c Посмотреть сообщение
f3hler, надо веселый и радостный пример привести?
Cr0c, буду благодарен))
0
 Аватар для Cr0c
753 / 600 / 204
Регистрация: 06.08.2015
Сообщений: 2,432
29.12.2017, 11:29
На все кнопки рандомные методы накидываются:
C#
1
2
3
4
5
6
public UnityEvent[] events;
public void WhatAnswer() {
 Button[] bs = GameObject.FindObjectsOfType(Button) as Button[];
 foreach (Button b in bs)
  b.onClick.AddListener(events[RandomRange(0, events.Length)].Invoke());
}
0
136 / 131 / 43
Регистрация: 07.11.2017
Сообщений: 553
29.12.2017, 11:35
как их присобачить к кнопке это понятно, а как заполнить вот это?
Цитата Сообщение от Cr0c Посмотреть сообщение
public UnityEvent[] events;
0
 Аватар для Cr0c
753 / 600 / 204
Регистрация: 06.08.2015
Сообщений: 2,432
29.12.2017, 11:55
f3hler, в инспекторе, как на кнопке onClick
0
136 / 131 / 43
Регистрация: 07.11.2017
Сообщений: 553
29.12.2017, 11:59
то есть снова руками
0
 Аватар для Cr0c
753 / 600 / 204
Регистрация: 06.08.2015
Сообщений: 2,432
29.12.2017, 12:12
C#
1
2
3
4
5
6
7
8
9
10
11
12
public string[] texts;
public void SetTexts() {
 Button[] bs = GameObject.FindObjectsOfType(Button) as Button[];
 foreach (Button b in bs) {
  int i = Random.Range(0, texts.Length);
  b.onClick.AddListener( delegate (this.ButtonClick(i) ) );
  b.caption = texts[i];
 }
}
public void ButtonClick(int value) {
 Debug.Log(value + " : " + texts[value]);
}
Добавлено через 48 секунд
С кнопки инт передается в метод, делай что хочешь...
1
29.12.2017, 12:48

Не по теме:

спасибо)
прям щас впихну в свою игрульку для осовения материала))
бо забываю слишком быстро, если не использовать.

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
29.12.2017, 12:48
Помогаю со студенческими работами здесь

Стиль нажатого ImageView
Всем привет! Полторы недели начал как изучать java и сделал маленькую прогу ,так вот у меня есть GridView и внем уже ImageView c TextView...

Индекс нажатого submit
Здравствуйте, имеется форма с таблицей, метод post: &lt;?php echo &quot;&lt;form action='action.php' method='post'&gt;&quot;; $result =...

Вытащить параметр из нажатого StackPanel
Здравствуйте. У меня есть GridView, который заполняется StackPanel'ами, а тот заполняется классом вида Name, Title, Img. Берётся всё это из...

Поменять класс у нажатого элемента
Всем привет! Написал такой код &lt;div class=&quot;services&quot;&gt; &lt;div...

Проверка нажатого элемента в колекции ContextMenuStrip
Как программно узнать какой элемент был нажат после закрытия контекстной менюшки? Допустим, если я нажал &quot;Вставить&quot;


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
И ясному Солнцу
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. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru