forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Unity (http://forum.boolean.name/forumdisplay.php?f=144)
-   -   Фак по Юнити. (http://forum.boolean.name/showthread.php?t=12966)

Amatsu 12.04.2012 09:55

Ответ: Фак по Юнити.
 
Пытаюсь вставить в созданную в юнити анимацию Animation Event. Пишет, что не может найти скрипты для прикрепления к ивенту. Может кто знает правило написание скрипта с функцией на C#, чтобы интерфейс Animation Event его увидел?

pax 12.04.2012 10:38

Ответ: Фак по Юнити.
 
Должно увидеть:

PHP код:

public void MyEvent1()
{

}

public 
void MyEvent2(int param)
{

}

public 
IEnumerator MyEvent3(string param)
{



Но учти, что скрипт должен висеть на том же объекте что и Animation с редактируемым клипом.

Amatsu 12.04.2012 10:53

Ответ: Фак по Юнити.
 
Скорее всего из–за последнего пункта и не видело, спасибо

WISHMASTER35 12.04.2012 13:45

Ответ: Фак по Юнити.
 
вот думаю как сделать систему отслеживания нажатия на элементы моего gui.
Делаю так:
В одном скрипте, в LateUpdate пускать от курсора луч и если была коллизия с какой-то кнопкой, то поднять у нее флаг, что над ней мышка или она нажат.
А в следующем кадре в Update опрашивать эти кнопки. Только будет запаздывать на кадр, но думаю это не страшно.
Но вот не пойму когда кнопка должна сбрасывать у себя эти флаги? В Update нельзя т.к. идет их опрос, в LateUpdate нельзя т.к. можно сбросить новые данные. Наверно я что-то делаю абсолютно не так.

Можно было бы сделать, что бы каждая кнопка сама пускала в себя луч, но хочу это выделить в отдельный скрипт, который бы потом мог хранить данные о том, что мышка или тач над элементом gui или свободен и передавать его в игру.

pax 12.04.2012 14:07

Ответ: Фак по Юнити.
 
зачем в GUI лучи?

WISHMASTER35 12.04.2012 14:16

Ответ: Фак по Юнити.
 
Цитата:

зачем в GUI лучи?
коллизию с кнопками проверять. Конечно в 2д это не имеет смысла, но вопрос не в этом.

pax 12.04.2012 14:19

Ответ: Фак по Юнити.
 
Если это 3d объекты, то симитировать мышь можно достаточно просто:

1. Сначала мышь ни над чем.
2. Ты кидаешь луч каждый FixedUpdate, если во что-то попал - то OnMouseEnter для этого объекта.
3. Запоминаешь объект.
4. Если в следующем цикле попал в тот же объект - OnMouseOver
5. Если в другой, то тому что запомнен - OnMouseExit, новый запоминаешь и ему OnMouseEnter.
6. Если Input.GetMouseDown и есть запомненный объект - OnMouseDown
7. и т.д.

А почему тебе не подходят эти события?
http://unity3d.com/support/documenta...MouseExit.html
http://unity3d.com/support/documenta...MouseDown.html
http://unity3d.com/support/documenta...MouseDrag.html
http://unity3d.com/support/documenta...ouseEnter.html
http://unity3d.com/support/documenta...MouseOver.html
http://unity3d.com/support/documenta...OnMouseUp.html

WISHMASTER35 12.04.2012 16:06

Ответ: Фак по Юнити.
 
Цитата:

А почему тебе не подходят эти события?
Я хочу что бы и на сенсорном экране работало. Тем более в этом случае пришлось бы вешать на каждую кнопку обработчик ее нажатия.
У меня такая структура:
_рутовый объект
____меню 1 и его обработчик
_______кнопки
____меню 2 и его обработчик
_______кнопки
т.е. обработчик и не на самой кнопке и не на самом рутовом объекте. Тут если посылать события, то всем потомкам рутового объекта, а это медленно. Вот и хочу, что бы из любого места можно было узнать состояние кнопки.

Запоминать объекты это то же не очень. Тем более в каждом FixedUpdate луч пускать.
Хорошо бы в последнем FixedUpdate пустить луч, в Update обработать все кнопки, а в LateUpdate сбросить флаги. Но как узнать, что FixedUpdate последний?

WISHMASTER35 12.04.2012 18:25

Ответ: Фак по Юнити.
 
Блин! FixedUpdate не перед каждым Update вызывается. Из-за этого не всегда срабатывает нажатие на кнопку( Это ппц(
Может можно как-то из главного скрипта отсылать сообщения только объектам, которые будут обрабатывать его, а не всем подряд?

pax 12.04.2012 20:54

Ответ: Фак по Юнити.
 
FixedUpdate срабатывает 100 раз в секунду.
Причем здесь каждый FixedUpdate? Все что я написал надо сделать в одном скрипте. И про сообщения писал только тому объекту под которым луч. Хоть пытайся понимать что тебе предлагают.

Andvrok 19.04.2012 00:15

Ответ: Фак по Юнити.
 
Можно как-то ограничить скорость GUI.RepeatButton?

WISHMASTER35 19.04.2012 00:18

Ответ: Фак по Юнити.
 
Есть у меня TileSet со списком объектов класса Tile.
Tile это обычный класс, ни от чего не унаследованный. У каждого тайла есть свой id.
И есть скрипт Map, у которой есть ссылка на TileSet и поля в которые нужно записывать id тайлов. Сейчас мне эти id приходится вручную писать. Можно ли сделать, что бы id можно было выбрать TileSet'а, а не писать их вручную?
id - это сейчас просто int.

Делать в Editor'е редактирование каждого поля - не выход т.к. поля могут удаляться\добавляться или просто их быть много.

Или лучше тайл наследовать от ScriptableObject и как обычно записывать каждый объект в ссылку?

pax 19.04.2012 07:03

Ответ: Фак по Юнити.
 
Цитата:

Сообщение от Andvrok (Сообщение 225876)
Можно как-то ограничить скорость GUI.RepeatButton?

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

Цитата:

Сообщение от WISHMASTER35 (Сообщение 225877)
Есть у меня TileSet со списком объектов класса Tile.
Tile это обычный класс, ни от чего не унаследованный. У каждого тайла есть свой id.
И есть скрипт Map, у которой есть ссылка на TileSet и поля в которые нужно записывать id тайлов. Сейчас мне эти id приходится вручную писать. Можно ли сделать, что бы id можно было выбрать TileSet'а, а не писать их вручную?
id - это сейчас просто int.

Делать в Editor'е редактирование каждого поля - не выход т.к. поля могут удаляться\добавляться или просто их быть много.

Или лучше тайл наследовать от ScriptableObject и как обычно записывать каждый объект в ссылку?

Мало что понял, но я бы для назначения id сделал бы выпадающее меню.

WISHMASTER35 19.04.2012 14:31

Ответ: Фак по Юнити.
 
Мне надо как-то в Editor'е определить нажал ли я на id тайла или что-то другое. Для этого id придется сделать специальным классом, что бы отличать от других int'ов.
И потом в Editor'е как-то переопределить поле редактирования для этого типа элемента.
Тогда должно получится.

WISHMASTER35 20.04.2012 21:46

Ответ: Фак по Юнити.
 
Решил я достать все SerializedProperty из скрипта и вручную все поля рисовать, что бы можно было изменить в инспекторе поле для моего типа.
Только не пойму как проверить поле какого типа храниться в SerializedProperty? Т.е. мне надо это SerializedProperty сравнить с typeof(MyClass).


Часовой пояс GMT +4, время: 16:08.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot