Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > Unity > Общие вопросы

Общие вопросы вопросы не попадающие ни в один из доступных разделов

Ответ
 
Опции темы
Старый 26.03.2016, 03:25   #2326
Nex
Гигант индустрии
 
Аватар для Nex
 
Регистрация: 13.09.2008
Сообщений: 2,893
Написано 1,185 полезных сообщений
(для 3,298 пользователей)
Ответ: Вопросы от новичка

Научите, пожалуйста, как делать методы подобно Start() или Update(), которые уже где то в Юнити объявлены, но при этом их можно использовать/не использовать без override.
Я пробовал несколько способов, но не удачно.
1) Интерфейс требует что бы было объявлено и обязательно public.
2) Если объявлено выше по иерархии, то надо перезаписать.
3) Абстрактный метод как и интерфейс - нужно объявлять.
Какие еще способы есть?
(Offline)
 
Ответить с цитированием
Старый 26.03.2016, 08:03   #2327
RegIon
Элита
 
Аватар для RegIon
 
Регистрация: 16.01.2010
Адрес: Новосибирск
Сообщений: 2,157
Написано 502 полезных сообщений
(для 1,012 пользователей)
Ответ: Вопросы от новичка

Сообщение от Nex Посмотреть сообщение
Научите, пожалуйста, как делать методы подобно Start() или Update(), которые уже где то в Юнити объявлены, но при этом их можно использовать/не использовать без override.
Я пробовал несколько способов, но не удачно.
1) Интерфейс требует что бы было объявлено и обязательно public.
2) Если объявлено выше по иерархии, то надо перезаписать.
3) Абстрактный метод как и интерфейс - нужно объявлять.
Какие еще способы есть?
тоже интересно, погуглил, и все же везде нужен overide.
__________________
Сайт: http://iexpo.ml
(Offline)
 
Ответить с цитированием
Старый 26.03.2016, 09:41   #2328
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Ответ: Вопросы от новичка

Все просто, это рефлексия
obj.GetType().GetMethod("MyMethod").Invoke(objarguments[]) 
Пара ссылок
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 gameObjectstring methodName)
    {
        foreach (
Component c in gameObject.GetComponents<Component>())
        {
            
MethodInfo m c.GetType().GetMethod(methodName);
            if (
!= null)
                
m.Invoke(cnull);
        }
    }

    public static 
void InvokeMethod(this GameObject gameObjectstring methodNameparams object[] parameters)
    {
        foreach (
Component c in gameObject.GetComponents<Component>())
        {
            
MethodInfo m c.GetType().GetMethod(methodName);
            if (
!= null)
                
m.Invoke(cparameters);
        }
    }
    
    public static 
void InvokeMethodUpwards(this GameObject gameObjectstring methodName)
    {
        
Transform t gameObject.transform;
        while (
t)
        {
            foreach (
Component c in t.gameObject.GetComponents<Component>())
            {
                
MethodInfo m c.GetType().GetMethod(methodName);
                if (
!= null)
                    
m.Invoke(cnull);
            }
            
t.parent;
        }
    }

    public static 
void InvokeMethodUpwards(this GameObject gameObjectstring methodNameparams object[] parameters)
    {
        
Transform t gameObject.transform;
        while (
t)
        {
            foreach (
Component c in t.gameObject.GetComponents<Component>())
            {
                
MethodInfo m c.GetType().GetMethod(methodName);
                if (
!= null)
                    
m.Invoke(cparameters);
            }
            
t.parent;
        }
    }

    public static 
void BroadcastMethod(this GameObject gameObjectstring methodName)
    {
        foreach (
Component c in gameObject.GetComponentsInChildren<Component>())
        {
            
MethodInfo m c.GetType().GetMethod(methodName);
            if (
!= null)
                
m.Invoke(cnull);
        }
    }

    public static 
void BroadcastMethod(this GameObject gameObjectstring methodNameparams object[] parameters)
    {
        foreach (
Component c in gameObject.GetComponentsInChildren<Component>())
        {
            
MethodInfo m c.GetType().GetMethod(methodName);
            if (
!= null)
                
m.Invoke(cparameters);
        }
    }


__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Nex (26.03.2016)
Старый 26.03.2016, 11:46   #2329
RegIon
Элита
 
Аватар для RegIon
 
Регистрация: 16.01.2010
Адрес: Новосибирск
Сообщений: 2,157
Написано 502 полезных сообщений
(для 1,012 пользователей)
Ответ: Вопросы от новичка

Рефлексия же сама по себе медленная штука. Т.е советовали избегать использование SendMessange так как он слоупочный, а тут весь MonoBech один большой слоупок?

http://www.manuelabadia.com/blog/Per...dcd8e6b5d.aspx
__________________
Сайт: http://iexpo.ml
(Offline)
 
Ответить с цитированием
Старый 26.03.2016, 14:56   #2330
Nex
Гигант индустрии
 
Аватар для Nex
 
Регистрация: 13.09.2008
Сообщений: 2,893
Написано 1,185 полезных сообщений
(для 3,298 пользователей)
Ответ: Вопросы от новичка

Сообщение от RegIon Посмотреть сообщение
Рефлексия же сама по себе медленная штука. Т.е советовали избегать использование SendMessange так как он слоупочный, а тут весь MonoBech один большой слоупок?

http://www.manuelabadia.com/blog/Per...dcd8e6b5d.aspx
Все будет медленным если не кешировать.
При старте проги запустил функцию с поиском методов через рефлексию, нашел, сохранил в переменную/массив/лист и далее дергаешь их если не null или снова ищешь если все же null.

Нынче все настолько закешировано, что я как то раз зашел в VK app с мобилки, нет сообщений и новых новостей, дернул пальцем для обновления, все равно ничего нового и вышел из приложения. А оказывается, что на мобилке закончился интернет и VK app нужно ~30-60 сек работать дабы понять что доступа к интернету нет и сообщить об этом и даже принудительное обновление контента не помогает.
(Offline)
 
Ответить с цитированием
Старый 26.03.2016, 15:12   #2331
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Ответ: Вопросы от новичка

Я не говорил что в Unity просто рефлексия. Из MethodInfo можно сделать делегат для быстрого вызова.

https://msdn.microsoft.com/ru-ru/lib...v=vs.110).aspx

Естественно все не так просто. Читайте подробнее как оно в Unity работает: http://blogs.unity3d.com/2015/12/23/1k-update-calls/
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
RegIon (26.03.2016)
Старый 28.03.2016, 15:37   #2332
RegIon
Элита
 
Аватар для RegIon
 
Регистрация: 16.01.2010
Адрес: Новосибирск
Сообщений: 2,157
Написано 502 полезных сообщений
(для 1,012 пользователей)
Ответ: Вопросы от новичка

Никто не знает, работает ли Unity ADS вне GP, а то у меня просмотры есть, а eCPM = 0. Просто там что-то сказано, что если нету GooglePlay, то и не оплачивается реклама, т.е обязательно что бы установка с него произвелась?
__________________
Сайт: http://iexpo.ml
(Offline)
 
Ответить с цитированием
Старый 29.03.2016, 09:40   #2333
St_AnGer
Элита
 
Аватар для St_AnGer
 
Регистрация: 21.01.2010
Адрес: Россия, Рязанская область, г.Михайлов
Сообщений: 2,067
Написано 1,185 полезных сообщений
(для 2,828 пользователей)
Ответ: Вопросы от новичка

Долго ломал голову, как сделать подобную обводку вокруг зданий без мам, пап и кредитов проекторов и шейдеров (вариант с шейдерами и проекторами нашёл очень быстро, там реализуется вообще всё что мне нужно от данного "курсора", но я же русский человек, без велосипедов - жизнь скучна ):
Нажмите на изображение для увеличения
Название: Снимок экрана 2016-03-29 в 8.30.14.png
Просмотров: 1447
Размер:	138.8 Кб
ID:	22321

Сделал спрайтом, вот так оно выглядело на моих псевдоюнитах:
Нажмите на изображение для увеличения
Название: Снимок экрана 2016-03-29 в 8.30.30.png
Просмотров: 1401
Размер:	45.2 Кб
ID:	22322

Но, вполне логично, что когда мне понадобилось применить эту же обводку к зданиям (соответственнно, программно увеличив в размерах спрайт), то получилась вот такая радость:
Нажмите на изображение для увеличения
Название: Снимок экрана 2016-03-29 в 8.30.36.png
Просмотров: 1415
Размер:	133.3 Кб
ID:	22323

Оно, в целом, отрисовалось ровно так, как и должно было отрисоваться - я же просто использовал растянутый спрайт (в данном случае растянутый в 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
RegIon
Элита
 
Аватар для RegIon
 
Регистрация: 16.01.2010
Адрес: Новосибирск
Сообщений: 2,157
Написано 502 полезных сообщений
(для 1,012 пользователей)
Ответ: Вопросы от новичка

Сообщение от St_AnGer Посмотреть сообщение
Долго ломал голову, как сделать подобную обводку вокруг зданий без мам, пап и кредитов проекторов и шейдеров (вариант с шейдерами и проекторами нашёл очень быстро, там реализуется вообще всё что мне нужно от данного "курсора", но я же русский человек, без велосипедов - жизнь скучна ):
Вложение 22321

Сделал спрайтом, вот так оно выглядело на моих псевдоюнитах:
Вложение 22322

Но, вполне логично, что когда мне понадобилось применить эту же обводку к зданиям (соответственнно, программно увеличив в размерах спрайт), то получилась вот такая радость:
Вложение 22323

Оно, в целом, отрисовалось ровно так, как и должно было отрисоваться - я же просто использовал растянутый спрайт (в данном случае растянутый в 4 раза относительно данного спрайта у юнитов). И вот вопрос - а как сделать обводку что бы её линия была одной толщины независимо от размера самого спрайта?

Мне пока что приходит в голову только одна идея - на этапе загрузки уровня для каждого нужного размера отрисовывать в виртуальную текстуру эту "обводку" с нужной толщиной линии, а потом её просто назначать на спрайт. Шойдеров не хочу лишний раз касаться - пока ещё не решил сколько объектов можно будет выделять одновременно, потому не знаю как к большому количеству таких обводок мобилки будут относиться (а игрулину хочется очень мультиплатформенную сделать). Данная "обводка" должна лежать на земле строго под требуемым юнитом и зданием (в идеале, конечно, огибать всё её выпуклости и впуклостивпадины, но это я сделаю своими силами), по слоям она отрисовывается выше чем земля, потому видно её будет всегда (если, конечно, она не перекрыта более большим юнитом или зданием.)
а чем не нравится lineRenderer с 32 секторами? я бы его заюзал. Ну или генерировал меш-колечко динамически и накладывал self-illuminte шейдер.
На самом деле я как-то так делал, необходимо было рисовать колечки разного диаметра, но одной толщины.
У меня где-то есть скрипт, который генерить всякие bezie-кривые, спокойной можоно научить генерировать и колечки. Толщина сохраняется, UV накладывается.
__________________
Сайт: http://iexpo.ml
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
St_AnGer (29.03.2016)
Старый 29.03.2016, 14:28   #2335
St_AnGer
Элита
 
Аватар для St_AnGer
 
Регистрация: 21.01.2010
Адрес: Россия, Рязанская область, г.Михайлов
Сообщений: 2,067
Написано 1,185 полезных сообщений
(для 2,828 пользователей)
Ответ: Вопросы от новичка

Сообщение от RegIon Посмотреть сообщение
а чем не нравится lineRenderer с 32 секторами? я бы его заюзал. Ну или генерировал меш-колечко динамически и накладывал self-illuminte шейдер.
На самом деле я как-то так делал, необходимо было рисовать колечки разного диаметра, но одной толщины.
У меня где-то есть скрипт, который генерить всякие bezie-кривые, спокойной можоно научить генерировать и колечки. Толщина сохраняется, UV накладывается.
Собственно, lineRenderer пока что и заюзал (с изменяемым количеством секторов).
Нажмите на изображение для увеличения
Название: Снимок экрана 2016-03-29 в 13.38.47.png
Просмотров: 1421
Размер:	121.7 Кб
ID:	22324
Вопрос только что будет с мобилкой если одновременно штук 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
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Ответ: Вопросы от новичка

Легче будет сгенерировать меши для этих кругов вручную. Зачем тебе делать кучу текстур? Достаточно материала без текстуры и сгенерированного меша.
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Старый 29.03.2016, 16:49   #2337
Nex
Гигант индустрии
 
Аватар для Nex
 
Регистрация: 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
RegIon
Элита
 
Аватар для RegIon
 
Регистрация: 16.01.2010
Адрес: Новосибирск
Сообщений: 2,157
Написано 502 полезных сообщений
(для 1,012 пользователей)
Ответ: Вопросы от новичка

Ситуация, есть куча (~100-150) объектов с одной анимацией и аниматором, но большую часть времени они за кадром, объекты статичны в определенной небольшой зоне (не выходят за нее), меньше чем один экран. Будет ли приростом в скорости, если у объектов, которые не в зоне полезной работы отключать аниматор? Или только лаги будут из-за его включения/выключения?
(задачка из раздела выключать или не выключать лампочку, если постоянно бегаешь из комнаты в комнату )
Померить профайлером пытался, не особо заметил разницы, правда что иногда пики появлялись, но сложно сделать чистый тест, всегда рандомно раскидываются объекты.
__________________
Сайт: http://iexpo.ml
(Offline)
 
Ответить с цитированием
Старый 31.03.2016, 20:31   #2339
Антихрист
Разработчик
 
Регистрация: 20.01.2007
Сообщений: 485
Написано 182 полезных сообщений
(для 412 пользователей)
Ответ: Вопросы от новичка

Сообщение от RegIon Посмотреть сообщение
Ситуация, есть куча (~100-150) объектов с одной анимацией и аниматором, но большую часть времени они за кадром, объекты статичны в определенной небольшой зоне (не выходят за нее), меньше чем один экран. Будет ли приростом в скорости, если у объектов, которые не в зоне полезной работы отключать аниматор? Или только лаги будут из-за его включения/выключения?
(задачка из раздела выключать или не выключать лампочку, если постоянно бегаешь из комнаты в комнату )
Померить профайлером пытался, не особо заметил разницы, правда что иногда пики появлялись, но сложно сделать чистый тест, всегда рандомно раскидываются объекты.
http://docs.unity3d.com/ScriptRefere...llingMode.html
Не подойдёт?
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
RegIon (31.03.2016)
Старый 31.03.2016, 21:24   #2340
RegIon
Элита
 
Аватар для RegIon
 
Регистрация: 16.01.2010
Адрес: Новосибирск
Сообщений: 2,157
Написано 502 полезных сообщений
(для 1,012 пользователей)
Ответ: Вопросы от новичка

Ща проверю. Если не будет дрыгаться - как доктор прописал, не нужен будет кастыль. Не знал о такой хрени.

UPD. Хорошая штука, но анимация встает на паузу , а так как на всех она одна, то все выглядит как под копирку.

Как задать рандомное смещение по времени в аниматоре? Костыль:
  • после старта отключить аниматор,
  • запустить на рандомное (небольшое) время корутину
  • Включить в корутине аниматор
  • Профит. Инстансы аниматора запустятся в разное время.
А можно как-то иначе?
__________________
Сайт: http://iexpo.ml
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


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


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com