Получить gameobject в котором сработало событие OnMouseDown
|
|
timur2008 | Дата: Воскресенье, 01 Мая 2016, 19:02 | Сообщение # 1 |
частый гость
Сейчас нет на сайте
| Здравствуйте ,подскажите пожалуйста как получить объект по которому пользователь кликнул мышью. До меня дошло что нужно на все объекты повесить скрипт примерно такой
Код if (Input.GetMouseButtonDown(0)) Debug.Log("Pressed left click.");
Это срабатывает, но как мне потом получить доступ к геймобъекту на котором сработала эта проверка, чтобы уже работать непосредственно с ним ?
|
|
| |
8Observer8 | Дата: Воскресенье, 01 Мая 2016, 19:22 | Сообщение # 2 |
заслуженный участник
Сейчас нет на сайте
| С помощью Physics.Raycast
Повесьте, например, на камеру следующий скрипт. Как видите, здесь получают gameObject и скрипт, который на нём висит:
Код void Update() { var ray = Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit hit = new RaycastHit();
if (Physics.Raycast(ray, out hit)) { var clickMove = hit.collider.gameObject.GetComponent<ClickMove>(); clickMove.OnClick(hit.point); } }
Сообщение отредактировал 8Observer8 - Воскресенье, 01 Мая 2016, 19:23 |
|
| |
timur2008 | Дата: Воскресенье, 01 Мая 2016, 20:31 | Сообщение # 3 |
частый гость
Сейчас нет на сайте
| это не сработает мне нужно что бы я мог поменять у того геймобджекта высоту и ширину, а именно у инпутфиэлда. У меня задумка такая, юзер тыкает по одному из инпутфиэлдов и тот разворачивается на весь экран, затем он может подредактировать и сохранить его либо просто посмотреть и закрыть без изменений.
|
|
| |
8Observer8 | Дата: Воскресенье, 01 Мая 2016, 20:56 | Сообщение # 4 |
заслуженный участник
Сейчас нет на сайте
| А если для UI то должно так сработать:
Код void OnMouseOver() { // Left Mouse Button if (Input.GetMouseButtonDown(0)) { // Проводим нужные действия с данным объектом } }
Сообщение отредактировал 8Observer8 - Воскресенье, 01 Мая 2016, 20:56 |
|
| |
timur2008 | Дата: Воскресенье, 01 Мая 2016, 21:02 | Сообщение # 5 |
частый гость
Сейчас нет на сайте
| ну оно и работает, но я споткнулся на том что мне теперь нужно получить сам геймобджект у которого сработало это условие чтобы у него высоту и ширину поменять. У меня много динамически создающихся геймобжектов которые состоят из канваса и внутри него находится инпутфиэлд.
|
|
| |
8Observer8 | Дата: Воскресенье, 01 Мая 2016, 21:04 | Сообщение # 6 |
заслуженный участник
Сейчас нет на сайте
| Вот так протестируйте:
Код void OnMouseOver() { // Left Mouse Button if (Input.GetMouseButtonDown(0)) { Debug.Log(this.gameobject.name); } }
Сообщение отредактировал 8Observer8 - Воскресенье, 01 Мая 2016, 21:05 |
|
| |
timur2008 | Дата: Воскресенье, 01 Мая 2016, 21:10 | Сообщение # 7 |
частый гость
Сейчас нет на сайте
| Вво классно работает спасибо большое , забыл про this , блин. Только нужно в Update его пихать :)
Код
void Update () { if (Input.GetMouseButtonDown(0)) Debug.Log(this.gameObject.name); }
|
|
| |
8Observer8 | Дата: Воскресенье, 01 Мая 2016, 21:24 | Сообщение # 8 |
заслуженный участник
Сейчас нет на сайте
| Цитата timur2008 ( ) забыл про this
Цитата timur2008 ( ) Только нужно в Update его пихать :) И в Update можно и через MouseOver будет работать. И кстати, this необязательно писать:
Код public class Element : MonoBehaviour { void OnMouseOver() { // Left Mouse Button if (Input.GetMouseButtonDown(0)) { Debug.Log(gameobject.name); } } }
Добавлено (01 мая 2016, 21:24) ---------------------------------------------
Цитата timur2008 ( ) Только нужно в Update его пихать :) Ещё такой момент, что если делать через Update, то сработают все Input.GetMouseButtonDown(0) у всех объектов, а если через MouseOver, то только один над которым курсор
Сообщение отредактировал 8Observer8 - Воскресенье, 01 Мая 2016, 21:18 |
|
| |
timur2008 | Дата: Понедельник, 02 Мая 2016, 19:22 | Сообщение # 9 |
частый гость
Сейчас нет на сайте
| Спасибо, ноблин какой то косяк, не отрабатывает почему то событие. На созданных объектах висит скрипт с событием OnMouseOver() но он почему-то не срабатывает
|
|
| |
beril | Дата: Понедельник, 02 Мая 2016, 22:06 | Сообщение # 10 |
Я не ленивый, я — энергосберегающий
Сейчас нет на сайте
| Цитата timur2008 ( ) Спасибо, ноблин какой то косяк, не отрабатывает почему то событие. На созданных объектах висит скрипт с событием OnMouseOver() но он почему-то не срабатывает sad А коллайдеры висят на созданных обьектах ?
Накодил? Убери за собой! Инвентарь в Unity(UI) Инвентарь в Unity(GUI)
|
|
| |
timur2008 | Дата: Вторник, 03 Мая 2016, 08:11 | Сообщение # 11 |
частый гость
Сейчас нет на сайте
| эмм а как посмотреть есть ли колайдр на инпутбоксе ? Добавлено (03 мая 2016, 08:11) --------------------------------------------- и если нет то как его добавить ??
|
|
| |
Lertmind | Дата: Вторник, 03 Мая 2016, 08:31 | Сообщение # 12 |
заслуженный участник
Сейчас нет на сайте
| timur2008, это элемент UI, ему не нужен коллайдер. Чтобы узнать, когда произошёл клик на элемент UI, реализуешь интерфейс IPointerClickHandler, и этот скрипт вешаешь на элемент, например:
Код using UnityEngine; using UnityEngine.EventSystems;
public class Test1 : MonoBehaviour, IPointerClickHandler { #region IPointerClickHandler implementation
public void OnPointerClick(PointerEventData eventData) { Debug.Log("Click"); }
#endregion }
Как вариант, добавляешь на InputField компонент EventTrigger, там добавляешь событие PointerClick, потом выбираешь объект на сцене и метод у одного из его компонентов, который будет вызван при клике. На этом видео это происходит для Image https://youtu.be/3NBYqPAA5Es?t=221
Сообщение отредактировал Lertmind - Вторник, 03 Мая 2016, 08:34 |
|
| |
8Observer8 | Дата: Вторник, 03 Мая 2016, 10:37 | Сообщение # 13 |
заслуженный участник
Сейчас нет на сайте
| Lertmind, да вы правы, OnMouseOver не работает с UI. Тогда за одно покажите TC как увеличивать InputField при клике, как он писал:
Цитата timur2008 ( ) я споткнулся на том что мне теперь нужно получить сам геймобджект у которого сработало это условие чтобы у него высоту и ширину поменять. У меня много динамически создающихся геймобжектов которые состоят из канваса и внутри него находится инпутфиэлд
|
|
| |
Lertmind | Дата: Вторник, 03 Мая 2016, 18:47 | Сообщение # 14 |
заслуженный участник
Сейчас нет на сайте
| 8Observer8, мог бы сам) Если что, вот так при клике меняется размер InputField для первого способа:
Код using UnityEngine; using UnityEngine.EventSystems;
public class Test1 : MonoBehaviour, IPointerClickHandler { #region IPointerClickHandler implementation
public void OnPointerClick(PointerEventData eventData) { // RectTransform наследуется от Transform, значит можем привести RectTransform rt = (RectTransform)transform; // Свойства Width и Height у RectTransform в Инспекторе rt.sizeDelta = new Vector2(300f, 100f); }
#endregion } для второго способа:
Код using UnityEngine; using UnityEngine.EventSystems;
public class Test2 : MonoBehaviour { public void PointerClick(PointerEventData eventData) { // Получаем GO на который кликнули GameObject go = eventData.selectedObject; // Делаем тоже самое, что в OnPointerClick RectTransform rt = (RectTransform)go.transform; rt.sizeDelta = new Vector2(300f, 100f); } }
|
|
| |
timur2008 | Дата: Среда, 04 Мая 2016, 07:10 | Сообщение # 15 |
частый гость
Сейчас нет на сайте
| Спасибо огромное !!!, сегодня попробую так сделать Добавлено (04 мая 2016, 07:10) --------------------------------------------- Сработало спамтбо большое!!!
|
|
| |