|
Общие вопросы вопросы не попадающие ни в один из доступных разделов |
26.03.2016, 03:25
|
#2326
|
Гигант индустрии
Регистрация: 13.09.2008
Сообщений: 2,893
Написано 1,185 полезных сообщений (для 3,298 пользователей)
|
Ответ: Вопросы от новичка
Научите, пожалуйста, как делать методы подобно Start() или Update(), которые уже где то в Юнити объявлены, но при этом их можно использовать/не использовать без override.
Я пробовал несколько способов, но не удачно.
1) Интерфейс требует что бы было объявлено и обязательно public.
2) Если объявлено выше по иерархии, то надо перезаписать.
3) Абстрактный метод как и интерфейс - нужно объявлять.
Какие еще способы есть?
|
(Offline)
|
|
26.03.2016, 08:03
|
#2327
|
Элита
Регистрация: 16.01.2010
Адрес: Новосибирск
Сообщений: 2,157
Написано 502 полезных сообщений (для 1,012 пользователей)
|
Ответ: Вопросы от новичка
Сообщение от Nex
Научите, пожалуйста, как делать методы подобно Start() или Update(), которые уже где то в Юнити объявлены, но при этом их можно использовать/не использовать без override.
Я пробовал несколько способов, но не удачно.
1) Интерфейс требует что бы было объявлено и обязательно public.
2) Если объявлено выше по иерархии, то надо перезаписать.
3) Абстрактный метод как и интерфейс - нужно объявлять.
Какие еще способы есть?
|
тоже интересно, погуглил, и все же везде нужен overide.
|
(Offline)
|
|
26.03.2016, 09:41
|
#2328
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: Вопросы от новичка
Все просто, это рефлексия
obj.GetType().GetMethod("MyMethod").Invoke(obj, arguments[])
Пара ссылок
https://msdn.microsoft.com/ru-ru/lib...eflection.aspx
https://msdn.microsoft.com/ru-ru/lib...v=vs.110).aspx
https://msdn.microsoft.com/ru-ru/lib...v=vs.110).aspx
Правда в Unity не просто рефлексия, а там несколько сложнее. Но принцип один, в Unity ничего не объявлено, все ищется по по именам.
Вот вам пример:
using UnityEngine; using System.Reflection;
/// <summary> /// Аналог SendMessage с более продвинутыми функциями. /// Посылает сообщения даже выключенным объектам. /// </summary> public static class Message {
public static void InvokeMethod(this GameObject gameObject, string methodName) { foreach (Component c in gameObject.GetComponents<Component>()) { MethodInfo m = c.GetType().GetMethod(methodName); if (m != null) m.Invoke(c, null); } }
public static void InvokeMethod(this GameObject gameObject, string methodName, params object[] parameters) { foreach (Component c in gameObject.GetComponents<Component>()) { MethodInfo m = c.GetType().GetMethod(methodName); if (m != null) m.Invoke(c, parameters); } } public static void InvokeMethodUpwards(this GameObject gameObject, string methodName) { Transform t = gameObject.transform; while (t) { foreach (Component c in t.gameObject.GetComponents<Component>()) { MethodInfo m = c.GetType().GetMethod(methodName); if (m != null) m.Invoke(c, null); } t = t.parent; } }
public static void InvokeMethodUpwards(this GameObject gameObject, string methodName, params object[] parameters) { Transform t = gameObject.transform; while (t) { foreach (Component c in t.gameObject.GetComponents<Component>()) { MethodInfo m = c.GetType().GetMethod(methodName); if (m != null) m.Invoke(c, parameters); } t = t.parent; } }
public static void BroadcastMethod(this GameObject gameObject, string methodName) { foreach (Component c in gameObject.GetComponentsInChildren<Component>()) { MethodInfo m = c.GetType().GetMethod(methodName); if (m != null) m.Invoke(c, null); } }
public static void BroadcastMethod(this GameObject gameObject, string methodName, params object[] parameters) { foreach (Component c in gameObject.GetComponentsInChildren<Component>()) { MethodInfo m = c.GetType().GetMethod(methodName); if (m != null) m.Invoke(c, parameters); } }
}
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
26.03.2016, 11:46
|
#2329
|
Элита
Регистрация: 16.01.2010
Адрес: Новосибирск
Сообщений: 2,157
Написано 502 полезных сообщений (для 1,012 пользователей)
|
Ответ: Вопросы от новичка
Рефлексия же сама по себе медленная штука. Т.е советовали избегать использование SendMessange так как он слоупочный, а тут весь MonoBech один большой слоупок?
http://www.manuelabadia.com/blog/Per...dcd8e6b5d.aspx
|
(Offline)
|
|
26.03.2016, 14:56
|
#2330
|
Гигант индустрии
Регистрация: 13.09.2008
Сообщений: 2,893
Написано 1,185 полезных сообщений (для 3,298 пользователей)
|
Ответ: Вопросы от новичка
Сообщение от RegIon
|
Все будет медленным если не кешировать.
При старте проги запустил функцию с поиском методов через рефлексию, нашел, сохранил в переменную/массив/лист и далее дергаешь их если не null или снова ищешь если все же null.
Нынче все настолько закешировано, что я как то раз зашел в VK app с мобилки, нет сообщений и новых новостей, дернул пальцем для обновления, все равно ничего нового и вышел из приложения. А оказывается, что на мобилке закончился интернет и VK app нужно ~30-60 сек работать дабы понять что доступа к интернету нет и сообщить об этом и даже принудительное обновление контента не помогает.
|
(Offline)
|
|
28.03.2016, 15:37
|
#2332
|
Элита
Регистрация: 16.01.2010
Адрес: Новосибирск
Сообщений: 2,157
Написано 502 полезных сообщений (для 1,012 пользователей)
|
Ответ: Вопросы от новичка
Никто не знает, работает ли Unity ADS вне GP, а то у меня просмотры есть, а eCPM = 0. Просто там что-то сказано, что если нету GooglePlay, то и не оплачивается реклама, т.е обязательно что бы установка с него произвелась?
|
(Offline)
|
|
29.03.2016, 09:40
|
#2333
|
Элита
Регистрация: 21.01.2010
Адрес: Россия, Рязанская область, г.Михайлов
Сообщений: 2,067
Написано 1,185 полезных сообщений (для 2,828 пользователей)
|
Ответ: Вопросы от новичка
Долго ломал голову, как сделать подобную обводку вокруг зданий без мам, пап и кредитов проекторов и шейдеров (вариант с шейдерами и проекторами нашёл очень быстро, там реализуется вообще всё что мне нужно от данного "курсора", но я же русский человек, без велосипедов - жизнь скучна ):
Сделал спрайтом, вот так оно выглядело на моих псевдоюнитах:
Но, вполне логично, что когда мне понадобилось применить эту же обводку к зданиям (соответственнно, программно увеличив в размерах спрайт), то получилась вот такая радость:
Оно, в целом, отрисовалось ровно так, как и должно было отрисоваться - я же просто использовал растянутый спрайт (в данном случае растянутый в 4 раза относительно данного спрайта у юнитов). И вот вопрос - а как сделать обводку что бы её линия была одной толщины независимо от размера самого спрайта?
Мне пока что приходит в голову только одна идея - на этапе загрузки уровня для каждого нужного размера отрисовывать в виртуальную текстуру эту "обводку" с нужной толщиной линии, а потом её просто назначать на спрайт. Шойдеров не хочу лишний раз касаться - пока ещё не решил сколько объектов можно будет выделять одновременно, потому не знаю как к большому количеству таких обводок мобилки будут относиться (а игрулину хочется очень мультиплатформенную сделать). Данная "обводка" должна лежать на земле строго под требуемым юнитом и зданием (в идеале, конечно, огибать всё её выпуклости и впуклостивпадины, но это я сделаю своими силами), по слоям она отрисовывается выше чем земля, потому видно её будет всегда (если, конечно, она не перекрыта более большим юнитом или зданием.)
__________________
Main PC:
Intel Core i5 4260U 1.44 GHz + LPDDR3 1x4096 1600 MHz + Intel HD Graphics 5000.
Asus Ёжик T101-MT:
Intel Atom N-570 1.66 Ghz + DDR2 2x1024 800 Mhz + Intel GMA 3150 128 Mb DDR2
Скачать Doom 2D: Remake v0.3.8a
|
(Offline)
|
|
29.03.2016, 11:00
|
#2334
|
Элита
Регистрация: 16.01.2010
Адрес: Новосибирск
Сообщений: 2,157
Написано 502 полезных сообщений (для 1,012 пользователей)
|
Ответ: Вопросы от новичка
Сообщение от St_AnGer
Долго ломал голову, как сделать подобную обводку вокруг зданий без мам, пап и кредитов проекторов и шейдеров (вариант с шейдерами и проекторами нашёл очень быстро, там реализуется вообще всё что мне нужно от данного "курсора", но я же русский человек, без велосипедов - жизнь скучна ):
Вложение 22321
Сделал спрайтом, вот так оно выглядело на моих псевдоюнитах:
Вложение 22322
Но, вполне логично, что когда мне понадобилось применить эту же обводку к зданиям (соответственнно, программно увеличив в размерах спрайт), то получилась вот такая радость:
Вложение 22323
Оно, в целом, отрисовалось ровно так, как и должно было отрисоваться - я же просто использовал растянутый спрайт (в данном случае растянутый в 4 раза относительно данного спрайта у юнитов). И вот вопрос - а как сделать обводку что бы её линия была одной толщины независимо от размера самого спрайта?
Мне пока что приходит в голову только одна идея - на этапе загрузки уровня для каждого нужного размера отрисовывать в виртуальную текстуру эту "обводку" с нужной толщиной линии, а потом её просто назначать на спрайт. Шойдеров не хочу лишний раз касаться - пока ещё не решил сколько объектов можно будет выделять одновременно, потому не знаю как к большому количеству таких обводок мобилки будут относиться (а игрулину хочется очень мультиплатформенную сделать). Данная "обводка" должна лежать на земле строго под требуемым юнитом и зданием (в идеале, конечно, огибать всё её выпуклости и впуклостивпадины, но это я сделаю своими силами), по слоям она отрисовывается выше чем земля, потому видно её будет всегда (если, конечно, она не перекрыта более большим юнитом или зданием.)
|
а чем не нравится lineRenderer с 32 секторами? я бы его заюзал. Ну или генерировал меш-колечко динамически и накладывал self-illuminte шейдер.
На самом деле я как-то так делал, необходимо было рисовать колечки разного диаметра, но одной толщины.
У меня где-то есть скрипт, который генерить всякие bezie-кривые, спокойной можоно научить генерировать и колечки. Толщина сохраняется, UV накладывается.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
29.03.2016, 14:28
|
#2335
|
Элита
Регистрация: 21.01.2010
Адрес: Россия, Рязанская область, г.Михайлов
Сообщений: 2,067
Написано 1,185 полезных сообщений (для 2,828 пользователей)
|
Ответ: Вопросы от новичка
Сообщение от RegIon
а чем не нравится lineRenderer с 32 секторами? я бы его заюзал. Ну или генерировал меш-колечко динамически и накладывал self-illuminte шейдер.
На самом деле я как-то так делал, необходимо было рисовать колечки разного диаметра, но одной толщины.
У меня где-то есть скрипт, который генерить всякие bezie-кривые, спокойной можоно научить генерировать и колечки. Толщина сохраняется, UV накладывается.
|
Собственно, lineRenderer пока что и заюзал (с изменяемым количеством секторов).
Вопрос только что будет с мобилкой если одновременно штук 30 этих lineRenderer будет на экране, помимо прочей геометрии. Наверно, версия с пререндеренными кругами в текстуру натянутую на спрайты будет немного легче для gpu, но я пока что не умею рендерить в текстуру в Unity .
__________________
Main PC:
Intel Core i5 4260U 1.44 GHz + LPDDR3 1x4096 1600 MHz + Intel HD Graphics 5000.
Asus Ёжик T101-MT:
Intel Atom N-570 1.66 Ghz + DDR2 2x1024 800 Mhz + Intel GMA 3150 128 Mb DDR2
Скачать Doom 2D: Remake v0.3.8a
Последний раз редактировалось St_AnGer, 29.03.2016 в 15:30.
|
(Offline)
|
|
29.03.2016, 16:41
|
#2336
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: Вопросы от новичка
Легче будет сгенерировать меши для этих кругов вручную. Зачем тебе делать кучу текстур? Достаточно материала без текстуры и сгенерированного меша.
|
(Offline)
|
|
29.03.2016, 16:49
|
#2337
|
Гигант индустрии
Регистрация: 13.09.2008
Сообщений: 2,893
Написано 1,185 полезных сообщений (для 3,298 пользователей)
|
Ответ: Вопросы от новичка
Сообщение от St_AnGer
Собственно, lineRenderer пока что и заюзал (с изменяемым количеством секторов).
Вложение 22324
Вопрос только что будет с мобилкой если одновременно штук 30 этих lineRenderer будет на экране, помимо прочей геометрии. Наверно, версия с пререндеренными кругами в текстуру натянутую на спрайты будет немного легче для gpu, но я пока что не умею рендерить в текстуру в Unity .
|
Это же генерированные меши вроде как. Если не изменять количество сегментов, то все должно быть норм. Другое дело как я помню LineRenderer в любом случае дает 1dc так что у тебя будет +30dc, что будет не лучше простого шейдера.
|
(Offline)
|
|
31.03.2016, 18:01
|
#2338
|
Элита
Регистрация: 16.01.2010
Адрес: Новосибирск
Сообщений: 2,157
Написано 502 полезных сообщений (для 1,012 пользователей)
|
Ответ: Вопросы от новичка
Ситуация, есть куча (~100-150) объектов с одной анимацией и аниматором, но большую часть времени они за кадром, объекты статичны в определенной небольшой зоне (не выходят за нее), меньше чем один экран. Будет ли приростом в скорости, если у объектов, которые не в зоне полезной работы отключать аниматор? Или только лаги будут из-за его включения/выключения?
(задачка из раздела выключать или не выключать лампочку, если постоянно бегаешь из комнаты в комнату )
Померить профайлером пытался, не особо заметил разницы, правда что иногда пики появлялись, но сложно сделать чистый тест, всегда рандомно раскидываются объекты.
|
(Offline)
|
|
31.03.2016, 20:31
|
#2339
|
Разработчик
Регистрация: 20.01.2007
Сообщений: 485
Написано 182 полезных сообщений (для 412 пользователей)
|
Ответ: Вопросы от новичка
Сообщение от RegIon
Ситуация, есть куча (~100-150) объектов с одной анимацией и аниматором, но большую часть времени они за кадром, объекты статичны в определенной небольшой зоне (не выходят за нее), меньше чем один экран. Будет ли приростом в скорости, если у объектов, которые не в зоне полезной работы отключать аниматор? Или только лаги будут из-за его включения/выключения?
(задачка из раздела выключать или не выключать лампочку, если постоянно бегаешь из комнаты в комнату )
Померить профайлером пытался, не особо заметил разницы, правда что иногда пики появлялись, но сложно сделать чистый тест, всегда рандомно раскидываются объекты.
|
http://docs.unity3d.com/ScriptRefere...llingMode.html
Не подойдёт?
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
31.03.2016, 21:24
|
#2340
|
Элита
Регистрация: 16.01.2010
Адрес: Новосибирск
Сообщений: 2,157
Написано 502 полезных сообщений (для 1,012 пользователей)
|
Ответ: Вопросы от новичка
Ща проверю. Если не будет дрыгаться - как доктор прописал, не нужен будет кастыль. Не знал о такой хрени.
UPD. Хорошая штука, но анимация встает на паузу , а так как на всех она одна, то все выглядит как под копирку.
Как задать рандомное смещение по времени в аниматоре? Костыль: - после старта отключить аниматор,
- запустить на рандомное (небольшое) время корутину
- Включить в корутине аниматор
- Профит. Инстансы аниматора запустятся в разное время.
А можно как-то иначе?
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 18:13.
|