forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Общие вопросы (http://forum.boolean.name/forumdisplay.php?f=166)
-   -   Вопросы от новичка (http://forum.boolean.name/showthread.php?t=15809)

Жека 01.03.2016 06:17

Ответ: Вопросы от новичка
 
Цитата:

Сообщение от Владимир (Сообщение 304350)
между объектами может появиться расстояние и коллизия как таковая пропадет между ними, а target у нас уже определен.

Сбросить таргет можно в функции OnCollisionExit2D
PHP код:

void OnCollisionExit2D(Collision2D collision) {
  if (
collision.gameObject == target) {
    
target null;
  }



ILonion 01.03.2016 15:58

Ответ: Вопросы от новичка
 
Доброго времени.
Подскажите, пожалуйста, вот эта штука выгружает всё что связано со сценой в которой она запущена: SceneManager.LoadSceneAsync(LevelName) ?
Мне нужно чтобы сцена '0' полностью выгрузилась из памяти перед передачей управления LevelName (смущает существование UnloadScene).
Также хочется узнать как обнулить на дефолт все static ?

UPD: обнулить на дефолт все static - только ручками?

pax 01.03.2016 20:17

Ответ: Вопросы от новичка
 
1. Выгружает, unload для выгрузки аддитивно загруженных сцен (методы additive).
2. Ручками, да. Возможно тебе подойдет паттерн Синглтон.

RegIon 01.03.2016 23:26

Ответ: Вопросы от новичка
 
Цитата:

Сообщение от pax (Сообщение 304408)
1. Выгружает, unload для выгрузки аддитивно загруженных сцен (методы additive).

Не, не только. Сейчас сцены не выгружаются при смене до какого-то момента. Словил баг, при вторичном переходе на сцену, где должно было все переинициализоваться, но этого не случилось.
Помогоает флаг LoadMethod.Single в таких случаях.

Так же можно менять сцены, которые уже загружены.


PS. Может из-за того что у меня сцены мелкие, и прыгает часто.
Unity 5.3.1

ILonion 02.03.2016 19:27

Ответ: Вопросы от новичка
 
Подскажите, с чем может быть связана такая штуковина:

Ошибок напрямую связанных с моим кодом вроде нет. Это что-то юнити внутреннее?

pax 02.03.2016 20:03

Ответ: Вопросы от новичка
 
Вероятно баг, не парься.

ILonion 02.03.2016 21:58

Ответ: Вопросы от новичка
 
pax, подскажи, пожалуйста, можно ли как-то принудительно заставить вводить пользователя латинницу для InputField, чтобы сохранять в PlayerPrefs, или можно и кириллицу сохранять и считывать без ошибок?

pax 03.03.2016 00:21

Ответ: Вопросы от новичка
 
Да вполне кирилицу можно, UTF8 же.

ILonion 04.03.2016 05:10

Ответ: Вопросы от новичка
 
Можно ли каким либо образом выключить отсюда разрешения ниже 1024ч768? И полностью убрать вкладку input?

pax 04.03.2016 06:34

Ответ: Вопросы от новичка
 
Можно отключить разрешения определенного аспект ратио либо совсем этот диалог отключить. Больше настроек нет.


ILonion 04.03.2016 17:14

Ответ: Вопросы от новичка
 
мда, если отключить полностью, то в самом рантайм придется ручками писать разрешения. эх.

ILonion 05.03.2016 14:12

Ответ: Вопросы от новичка
 
Странная штука с GUi слайдером. В редакторе работает отлично, в вин билде уползает по нажатию из под мыши до самого края почему-то. С чем может быть связано?

pax 07.03.2016 18:40

Ответ: Вопросы от новичка
 
Цитата:

Сообщение от ILonion (Сообщение 304543)
Странная штука с GUi слайдером. В редакторе работает отлично, в вин билде уползает по нажатию из под мыши до самого края почему-то. С чем может быть связано?

Какая версия Unity то? Почти каждый патч релиз выходят фиксы UI. Посмотри в истории версий, может твой баг давно починен.

ILonion 07.03.2016 22:18

Ответ: Вопросы от новичка
 
532-ая.
Родился более актуальный вопрос:
pax, если у меня в сцене два GO и на каждом свой скрипт. Есть ли возможность заставить юнити приоритетно выполнять 1-ый раньше второго? update() метод

UPD: хотя, написав пост понял, что можно, например, статик флажком.
UPD2: быть может
)

seaman 08.03.2016 00:36

Ответ: Вопросы от новичка
 
http://docs.unity3d.com/Manual/class...Execution.html

ILonion 11.03.2016 01:19

Ответ: Вопросы от новичка
 
Как будет правильнее при перезагрузке одного и того же уровня сбрасывать на дефолт все статик:
в awake() скрипта который вызывает всё, или в OnLevelWasLoaded() ?

pax 11.03.2016 02:24

Ответ: Вопросы от новичка
 
Используй Singleton паттерн. Не нужен тебе статик, если его надо сбрасывать.

ILonion 13.03.2016 02:15

Ответ: Вопросы от новичка
 
У меня на Destroy() скрипт спавнит GO. Где-то в глубинах сети раскопал способ:
Код:

    void OnApplicationQuit()
    {
        closed = true;
    }
    void OnDestroy()
    {
        if(!closed): "spawn"
    }

Используется в единств. месте.
Юнити через раз все равно плюется
Some objects were not cleaned up when closing the scene. (Did you spawn new GameObjects from OnDestroy?)
на SceneManager.LoadSceneAsync(LevelName)
Может это не тот способ? Есть какой-то вменяемый?
UPD: OnApplicationQuit() в данном случае не вызывается. чем можно заменить?

pax 13.03.2016 09:33

Ответ: Вопросы от новичка
 
Стараюсь избегать такого, не помню как решал, возможно что-то типа дополнительной проверки Application.isPlaying.

Nex 22.03.2016 13:20

Ответ: Вопросы от новичка
 
Как устроена такая конструкция AddComponent<Transform>()?
Тип компонента получают из <T> при этом в метод получается ничего не передается. Я так ничего подобного и не нагуглил.

Taugeshtu 22.03.2016 13:42

Ответ: Вопросы от новичка
 
Цитата:

Сообщение от Nex (Сообщение 304933)
Как устроена такая конструкция AddComponent<Transform>()?
Тип компонента получают из <T> при этом в метод получается ничего не передается. Я так ничего подобного и не нагуглил.

MSDN.
Дженерики - это очень удобно :)
Грубо говоря, представь, что <T> - это скрытый аргумент метода. И за счёт того, что это не System.Type, можно сразу делать:
Код:

AddComponent<T>() where T : Component {
    m_components.Add( new T() );
}

Вообще дженерики очень советую изучить, они многое облегчают. Например, всякие кастомные структуры данных типа Octree/хитрых списков.

Nex 26.03.2016 03:25

Ответ: Вопросы от новичка
 
Научите, пожалуйста, как делать методы подобно Start() или Update(), которые уже где то в Юнити объявлены, но при этом их можно использовать/не использовать без override.
Я пробовал несколько способов, но не удачно.
1) Интерфейс требует что бы было объявлено и обязательно public.
2) Если объявлено выше по иерархии, то надо перезаписать.
3) Абстрактный метод как и интерфейс - нужно объявлять.
Какие еще способы есть? :)

RegIon 26.03.2016 08:03

Ответ: Вопросы от новичка
 
Цитата:

Сообщение от Nex (Сообщение 305000)
Научите, пожалуйста, как делать методы подобно Start() или Update(), которые уже где то в Юнити объявлены, но при этом их можно использовать/не использовать без override.
Я пробовал несколько способов, но не удачно.
1) Интерфейс требует что бы было объявлено и обязательно public.
2) Если объявлено выше по иерархии, то надо перезаписать.
3) Абстрактный метод как и интерфейс - нужно объявлять.
Какие еще способы есть? :)

:4to: тоже интересно, погуглил, и все же везде нужен overide.

pax 26.03.2016 09:41

Ответ: Вопросы от новичка
 
Все просто, это рефлексия
PHP код:

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 ничего не объявлено, все ищется по по именам.

Вот вам пример:
PHP код:

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);
        }
    }




RegIon 26.03.2016 11:46

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

http://www.manuelabadia.com/blog/Per...dcd8e6b5d.aspx

Nex 26.03.2016 14:56

Ответ: Вопросы от новичка
 
Цитата:

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

http://www.manuelabadia.com/blog/Per...dcd8e6b5d.aspx

Все будет медленным если не кешировать.
При старте проги запустил функцию с поиском методов через рефлексию, нашел, сохранил в переменную/массив/лист и далее дергаешь их если не null или снова ищешь если все же null.

Нынче все настолько закешировано, что я как то раз зашел в VK app с мобилки, нет сообщений и новых новостей, дернул пальцем для обновления, все равно ничего нового и вышел из приложения. А оказывается, что на мобилке закончился интернет и VK app нужно ~30-60 сек работать дабы понять что доступа к интернету нет и сообщить об этом и даже принудительное обновление контента не помогает.

pax 26.03.2016 15:12

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

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

Естественно все не так просто. Читайте подробнее как оно в Unity работает: http://blogs.unity3d.com/2015/12/23/1k-update-calls/

RegIon 28.03.2016 15:37

Ответ: Вопросы от новичка
 
Никто не знает, работает ли Unity ADS вне GP, а то у меня просмотры есть, а eCPM = 0. Просто там что-то сказано, что если нету GooglePlay, то и не оплачивается реклама, т.е обязательно что бы установка с него произвелась?

St_AnGer 29.03.2016 09:40

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

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

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

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

Мне пока что приходит в голову только одна идея - на этапе загрузки уровня для каждого нужного размера отрисовывать в виртуальную текстуру эту "обводку" с нужной толщиной линии, а потом её просто назначать на спрайт. Шойдеров не хочу лишний раз касаться - пока ещё не решил сколько объектов можно будет выделять одновременно, потому не знаю как к большому количеству таких обводок мобилки будут относиться (а игрулину хочется очень мультиплатформенную сделать). Данная "обводка" должна лежать на земле строго под требуемым юнитом и зданием (в идеале, конечно, огибать всё её выпуклости и впуклостивпадины, но это я сделаю своими силами), по слоям она отрисовывается выше чем земля, потому видно её будет всегда (если, конечно, она не перекрыта более большим юнитом или зданием.)

RegIon 29.03.2016 11:00

Ответ: Вопросы от новичка
 
Цитата:

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

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

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

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

Мне пока что приходит в голову только одна идея - на этапе загрузки уровня для каждого нужного размера отрисовывать в виртуальную текстуру эту "обводку" с нужной толщиной линии, а потом её просто назначать на спрайт. Шойдеров не хочу лишний раз касаться - пока ещё не решил сколько объектов можно будет выделять одновременно, потому не знаю как к большому количеству таких обводок мобилки будут относиться (а игрулину хочется очень мультиплатформенную сделать). Данная "обводка" должна лежать на земле строго под требуемым юнитом и зданием (в идеале, конечно, огибать всё её выпуклости и впуклостивпадины, но это я сделаю своими силами), по слоям она отрисовывается выше чем земля, потому видно её будет всегда (если, конечно, она не перекрыта более большим юнитом или зданием.)

а чем не нравится lineRenderer с 32 секторами? я бы его заюзал. Ну или генерировал меш-колечко динамически и накладывал self-illuminte шейдер.
На самом деле я как-то так делал, необходимо было рисовать колечки разного диаметра, но одной толщины.
У меня где-то есть скрипт, который генерить всякие bezie-кривые, спокойной можоно научить генерировать и колечки. Толщина сохраняется, UV накладывается.

St_AnGer 29.03.2016 14:28

Ответ: Вопросы от новичка
 
Вложений: 1
Цитата:

Сообщение от RegIon (Сообщение 305072)
а чем не нравится lineRenderer с 32 секторами? я бы его заюзал. Ну или генерировал меш-колечко динамически и накладывал self-illuminte шейдер.
На самом деле я как-то так делал, необходимо было рисовать колечки разного диаметра, но одной толщины.
У меня где-то есть скрипт, который генерить всякие bezie-кривые, спокойной можоно научить генерировать и колечки. Толщина сохраняется, UV накладывается.

Собственно, lineRenderer пока что и заюзал (с изменяемым количеством секторов).
Вложение 22324
Вопрос только что будет с мобилкой если одновременно штук 30 этих lineRenderer будет на экране, помимо прочей геометрии. Наверно, версия с пререндеренными кругами в текстуру натянутую на спрайты будет немного легче для gpu, но я пока что не умею рендерить в текстуру в Unity :).

pax 29.03.2016 16:41

Ответ: Вопросы от новичка
 
Легче будет сгенерировать меши для этих кругов вручную. Зачем тебе делать кучу текстур? Достаточно материала без текстуры и сгенерированного меша.

Nex 29.03.2016 16:49

Ответ: Вопросы от новичка
 
Цитата:

Сообщение от St_AnGer (Сообщение 305077)
Собственно, lineRenderer пока что и заюзал (с изменяемым количеством секторов).
Вложение 22324
Вопрос только что будет с мобилкой если одновременно штук 30 этих lineRenderer будет на экране, помимо прочей геометрии. Наверно, версия с пререндеренными кругами в текстуру натянутую на спрайты будет немного легче для gpu, но я пока что не умею рендерить в текстуру в Unity :).

Это же генерированные меши вроде как. Если не изменять количество сегментов, то все должно быть норм. Другое дело как я помню LineRenderer в любом случае дает 1dc так что у тебя будет +30dc, что будет не лучше простого шейдера. :-)

RegIon 31.03.2016 18:01

Ответ: Вопросы от новичка
 
Ситуация, есть куча (~100-150) объектов с одной анимацией и аниматором, но большую часть времени они за кадром, объекты статичны в определенной небольшой зоне (не выходят за нее), меньше чем один экран. Будет ли приростом в скорости, если у объектов, которые не в зоне полезной работы отключать аниматор? Или только лаги будут из-за его включения/выключения?
(задачка из раздела выключать или не выключать лампочку, если постоянно бегаешь из комнаты в комнату )
Померить профайлером пытался, не особо заметил разницы, правда что иногда пики появлялись, но сложно сделать чистый тест, всегда рандомно раскидываются объекты.

Антихрист 31.03.2016 20:31

Ответ: Вопросы от новичка
 
Цитата:

Сообщение от RegIon (Сообщение 305131)
Ситуация, есть куча (~100-150) объектов с одной анимацией и аниматором, но большую часть времени они за кадром, объекты статичны в определенной небольшой зоне (не выходят за нее), меньше чем один экран. Будет ли приростом в скорости, если у объектов, которые не в зоне полезной работы отключать аниматор? Или только лаги будут из-за его включения/выключения?
(задачка из раздела выключать или не выключать лампочку, если постоянно бегаешь из комнаты в комнату )
Померить профайлером пытался, не особо заметил разницы, правда что иногда пики появлялись, но сложно сделать чистый тест, всегда рандомно раскидываются объекты.

http://docs.unity3d.com/ScriptRefere...llingMode.html
Не подойдёт?

RegIon 31.03.2016 21:24

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

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

Как задать рандомное смещение по времени в аниматоре? Костыль:
  • после старта отключить аниматор,
  • запустить на рандомное (небольшое) время корутину
  • Включить в корутине аниматор
  • Профит. Инстансы аниматора запустятся в разное время.
А можно как-то иначе?

Антихрист 31.03.2016 22:08

Ответ: Вопросы от новичка
 
Цитата:

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

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

Как задать рандомное смещение по времени в аниматоре? Костыль:
  • после старта отключить аниматор,
  • запустить на рандомное (небольшое) время корутину
  • Включить в корутине аниматор
  • Профит. Инстансы аниматора запустятся в разное время.
А можно как-то иначе?

GetComponent<Animator>().Play("Idle",0,Random.Rang e(0,1f));

Жека 02.04.2016 19:11

Ответ: Вопросы от новичка
 
Нашёл полезный класс, может кому-то тоже пригодится ColorUtility .
В частности, функция TryParseHtmlString.

RegIon 08.04.2016 00:16

Ответ: Вопросы от новичка
 
Это нормально, что иногда PlayerPrefe забивает на некоторые сохраненные ключи, причем рандомно на разных устройствах?
Пишу и читаю не в Awake, после установки ключей сохраняю на диск. Все происходит по событиям (не в Update)

Вот у меня 4 параметра, пишу так:
PHP код:

public static void SaveOnlySettings ()
    {
        
PlayerPrefs.SetInt ("settings_cheater"CheaterMode1:0);
        
PlayerPrefs.SetInt ("settings_tilt"useTilt 0);
        
PlayerPrefs.SetInt ("settings_music"useMusic 0);
        
PlayerPrefs.SetInt ("settings_vibration"useVibration 0);
        
PlayerPrefs.Save ();
    } 

Читаю так:
PHP код:

public static void LoadParams ()
    {
        
CheaterMode PlayerPrefs.GetInt ("settings_cheater"0) == 1;
        
MoneyCount PlayerPrefs.GetInt ("game_money"0);
        
useTilt PlayerPrefs.GetInt ("settings_tilt"1) == 1;
        
useMusic PlayerPrefs.GetInt ("settings_music"1) == 1;
        
useVibration PlayerPrefs.GetInt ("settings_vibration"1) == 1;
        
rocketConfig = new RocketConfig ();
        
rocketConfig.LoadConfig ();
        
Debug.Log ("[GLOBAL] LOAD SETTINGS");
    } 

Во втором случае читаю все параметры махом, которые существуют, а пишу только настройки, так как они чаще меняются.

Так вот useMusic и useVibration на компе иногда не читаются как бы, useTilt всегда нормально работает.
Еще у друга на HTC не читается useVibration в определенных случаях, а на моем он не может воспроизвести баг.

Что за фигня такая и как лечится, а то проще сериализовать в json наверное будет.

pax 08.04.2016 01:41

Ответ: Вопросы от новичка
 
Выведи в дебаг, в каком порядке вызываются твои события. Есть вероятность что сохранение раньше загрузки вызывается?

RegIon 08.04.2016 08:03

Ответ: Вопросы от новичка
 
Цитата:

Сообщение от pax (Сообщение 305297)
Выведи в дебаг, в каком порядке вызываются твои события. Есть вероятность что сохранение раньше загрузки вызывается?

Да, неожиданно вышло так, а все из-за того, что изменение Toogle.isOn вызывает событие OnChange даже если объект выключен, я через событие делал запись параметров. Можно как-то подавить колбек?
С одной стороны удобно, что можно поменять вручную, и зависимости выполнятся, а с другой стороны плохо:dontknow:

UPD. Убрал логику сохранения из обработчиков, сохраняю по OK.

pax 08.04.2016 11:30

Ответ: Вопросы от новичка
 
Я обычно при инициализации ставлю флаг, который обозначает не обрабатывать события (в событиях выхожу по флагу). Как все загрузил - убираю флаг.

Nex 14.04.2016 13:49

Ответ: Вопросы от новичка
 
Подскажите как рендерить из юнити в видео файл?
Можно конечно рендерить отдельно по кадрам, но так не будет звука и нужен софт для создания видео файла из картинок. :(

Andvrok 14.04.2016 14:43

Ответ: Вопросы от новичка
 
Запиши чем-то внешним, OBS тот же, зачем тебе именно рендер из юнити?

Nex 14.04.2016 14:50

Ответ: Вопросы от новичка
 
Цитата:

Сообщение от Andvrok (Сообщение 305511)
Запиши чем-то внешним, OBS тот же, зачем тебе именно рендер из юнити?

1) Нужно разбираться с настройками этой проги для лучшего качества.
2) Надо много ресурсов компа (или хорошую видеокарту в зависимости от настроек захвата). С этим как раз могут возникнуть проблемы.
3) Нельзя отрендерить в разрешении больше чем монитор.
4) Через Юнити рендер как я понимаю можно рендерить даже с 1 фпс/сек, а видео будет с нормальным фпс (подобно рендеру 3дмакс).
???
Много профита в общем.

pax 14.04.2016 15:10

Ответ: Вопросы от новичка
 
Ничего встроенного нет для этого, можешь смело идти на ассетстор искать готовые вещи.

Nex 15.04.2016 03:05

Ответ: Вопросы от новичка
 
Цитата:

Сообщение от pax (Сообщение 305515)
Ничего встроенного нет для этого, можешь смело идти на ассетстор искать готовые вещи.

Все только за даллары. От 150-400$, что сильно много для создания короткого промо-ролика бесплатной игры на Android.


С захватом видео частично проблема решена. Рендер кадров через RenderTexture с записью на диск.

Плюсы:
Фпс можно задавать любой.
Размер кадра ограничивается только видеокартой.
Не сильно тормозно.
Можно "измазать сцену жиром" и рендерить даже с 1фпс/сек и на выходе все будет хорошо.

Минусы:
Для гарантированной плавности все надо двигать и вращать в FixedUpdate используя Time.fixedDeltaTime или через Rigidbody.MovePosition и Rigidbody.MoveRotation.
Нужно иметь VirtualDub что бы создать видос из кадров при этом нужно попотеть с кодеком иначе ролик будет очень много весить.
Нельзя сворачивать и снимать фокус с Юнити иначе получим много одинаковых кадров.

PHP код:

using UnityEngine;

public class 
Capture MonoBehaviour {
    public 
int frameRate 30;

    public 
string folder "ScreenshotFolder";
    private 
string realFolder "";

    public 
bool isRec;

    private 
RenderTexture rt;
    private 
Texture2D screenShot;

    
void Start () {
        
rt = new RenderTexture(Screen.widthScreen.height24);
        
screenShot = new Texture2D(Screen.widthScreen.heightTextureFormat.RGB24false);

        
Time.captureFramerate frameRate;

        
realFolder folder;
        
int count 1;
        while (
System.IO.Directory.Exists(realFolder)) {
            
realFolder folder count;
            
count++;
        }
        
System.IO.Directory.CreateDirectory(realFolder);
    }
    
    
void LateUpdate() {
        if (
isRec) {
            
string name string.Format("{0}/shot {1:D04}.png"realFolderTime.frameCount);

            
Screenshot();
            
byte[] bytes screenShot.EncodeToPNG();
            
System.IO.File.WriteAllBytes(namebytes);
        }
    }

    private 
void Screenshot() {
        
Camera.main.targetTexture rt;
        
Camera.main.Render();
        
RenderTexture.active rt;

        
screenShot.ReadPixels(new Rect(00Screen.widthScreen.height), 00);

        
Camera.main.targetTexture null;
        
RenderTexture.active null;
    }




Если еще нужно будет делать монтаж видео, то получается весьма геморно и возможно потеря качества при перегоне из кадров во временное видео. Так же предпросмотр полученных кадров например в VirtualDub требует мощный проц(?) иначе видео будет рывками.

Может знатоки напишут код где кадры будут сохранятся сразу в видео файл хотя бы без сжатия? Ну или подскажите по каким словам гуглить это дело...

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

RegIon 15.04.2016 06:23

Ответ: Вопросы от новичка
 
А гуглить не пытался?http://www.nrecosite.com/video_converter_net.aspx
Кстати, xvid кодек оказался самым менее энергозатратным, при записи, на моём 2x2Gh потребляет 30% , другие гонят ЦП до 100. Размер файла раза в 1.5 больше чем h263.

Nex 15.04.2016 08:41

Ответ: Вопросы от новичка
 
Цитата:

Сообщение от RegIon (Сообщение 305524)
А гуглить не пытался?http://www.nrecosite.com/video_converter_net.aspx
Кстати, xvid кодек оказался самым менее энергозатратным, при записи, на моём 2x2Gh потребляет 30% , другие гонят ЦП до 100. Размер файла раза в 1.5 больше чем h263.

Если бы нагугли, то не спрашивал бы жи.

У этого nreco семплы за отдельную плату. Без семплов не совсем понятно как это правильно использовать.

RegIon 15.04.2016 10:02

Ответ: Вопросы от новичка
 
Цитата:

Сообщение от Nex (Сообщение 305525)
Если бы нагугли, то не спрашивал бы жи.

У этого nreco семплы за отдельную плату. Без семплов не совсем понятно как это правильно использовать.

блин, и это не проблема.
http://stackoverflow.com/questions/2...g-through-rtmp

На таких ленивых и держится AssetStore

Nex 15.04.2016 11:39

Ответ: Вопросы от новичка
 
Цитата:

Сообщение от RegIon (Сообщение 305526)
блин, и это не проблема.
http://stackoverflow.com/questions/2...g-through-rtmp

На таких ленивых и держится AssetStore

Получается если понадобилась горсть гвоздей, то надо построить станок по их производству?

На самом деле затуп вышел смешной. Оказывается я все правильно изначально делал, но юнити тыкал ошибкой связанной со Stream и из за этого я думал, что делаю не так. Но оказалось что в юнити старый mono и какие то затупы с IO.Compression. Для фикса нужно искать левые библы, которые явно будут медленней работать.

Lowlet 16.04.2016 03:21

Ответ: Вопросы от новичка
 
https://github.com/unity3d-jp/FrameCapturer

LLI.T.A.L.K.E.R. 28.04.2016 00:35

Ответ: Вопросы от новичка
 
Привет всем! Я окончательно перешёл на Юнити =)
Потому что поддерживает GoldSrc исходники моделей и карт =)

Nex 01.05.2016 05:08

Ответ: Вопросы от новичка
 
После долгой работы (~пол дня) в VS2015 + Unity3d часто перестает работать подсветка и проверка на ошибки в реалтайме. Что бы проверить на ошибки нужно каждый раз переключаться на unity3d и ждать пока editor проверит и VS перезапускать каждый раз долго и нудно. (При работе без unity3d с form или xna такого не разу не возникало). Плагин для работы с unity3d поставлен по дефолту.
Подскажите как пофиксить это?

RegIon 01.05.2016 12:45

Ответ: Вопросы от новичка
 
Цитата:

Сообщение от Nex (Сообщение 305878)
После долгой работы (~пол дня) в VS2015 + Unity3d часто перестает работать подсветка и проверка на ошибки в реалтайме. Что бы проверить на ошибки нужно каждый раз переключаться на unity3d и ждать пока editor проверит и VS перезапускать каждый раз долго и нудно. (При работе без unity3d с form или xna такого не разу не возникало). Плагин для работы с unity3d поставлен по дефолту.
Подскажите как пофиксить это?

Никак , я всегда сначала студию запускаю (сек 10), а потом из Unity открываю проект, запускается вторая копия, но гораздо быстрее, чем если из Юнити.
А с пропаданием подцветки перезагрузка проекта помогает иногда, из VS

Жека 06.05.2016 11:01

Ответ: Вопросы от новичка
 
Интересную штуку прочитал в книге:
Цитата:

Совет:
Код может быть дополнительно оптимизирован с помощью кэширования компонента Transform.
Основная идея заключается в том, что каждый вызов свойств из transform, таких как transform.position.х, и так далее - влечёт за собой внутренний вызов GetComponent<Transform>().
Чтобы избежать эти издержки мы можем использовать событие Start для кэширования ссылки на компонент Transform.
Я отказываюсь верить в то, что в геттере юнити сам не кэширует, но кто знает?

Nex 06.05.2016 12:08

Ответ: Вопросы от новичка
 
Цитата:

Сообщение от Жека (Сообщение 305956)
Я отказываюсь верить в то, что в геттере юнити сам не кэширует, но кто знает?

До 5 версии так и было. Сейчас все кэшируется.

Жека 07.05.2016 16:12

Ответ: Вопросы от новичка
 
Альтернатива VS2015 - младший брат VS Code.
Я до недавних пор использовал mono, т.к. проекты мелкие вполне хватало.
Сейчас начал юзать vs code.
vs2015 бесит своей непомерной жирностью.

Nex 07.05.2016 16:32

Ответ: Вопросы от новичка
 
Цитата:

Сообщение от Жека (Сообщение 305971)
Альтернатива VS2015 - младший брат VS Code.
Я до недавних пор использовал mono, т.к. проекты мелкие вполне хватало.
Сейчас начал юзать vs code.
vs2015 бесит своей непомерной жирностью.

В VS Code как помню подсветка синтаксиса довольно скудная. Чем то даже напоминает Блокнот или стандартный IDE блитза. :)

Taugeshtu 07.05.2016 16:43

Ответ: Вопросы от новичка
 
Зато автокомплит вполне себе адекватный, в отличии от блокнота (при установке расширения "omnisharp").

Вообще, пересел на VSCode уже наверное полгода как (с самой-самой 0.1 сижу), зависимость есть, брат и вся команда тоже сидит. Единственный удручающий сейчас минус - на большом (400+ классов) проекте текущая версия омнишарпа сходит с ума(

Жека 07.05.2016 21:16

Ответ: Вопросы от новичка
 
Цитата:

Сообщение от Taugeshtu (Сообщение 305973)
Единственный удручающий сейчас минус - на большом (400+ классов) проекте текущая версия омнишарпа сходит с ума(

это как-то лечится? (больше оперативы, мощнее проц)

Taugeshtu 08.05.2016 02:43

Ответ: Вопросы от новичка
 
Цитата:

Сообщение от Жека (Сообщение 305978)
это как-то лечится? (больше оперативы, мощнее проц)

В issue на гитхабе народ пишет, что откат до 0.10 помогает; а так - ждём фикса. Внутри омнишарпа какая-то чушь случается, дело не в ресурсах.

pax 08.05.2016 08:38

Ответ: Вопросы от новичка
 
А я пробовал VSCode и у меня не пошло, ресурсов компа (памяти) жрет столько же что и студия. Так что сэкономить на ней не получилось (на работе всего 4 гб памяти на компе, вместе с Unity уже не хватает). Еще меня в VSCode не устроило то, что нормального поиска я там не нашел как в студии (в солюшн эксплорере). Запускается быстрее, это да, но я привык уже к ReSharper'у. Очень жду выхода C# IDE от реактивных мозгов.

Nex 11.05.2016 12:47

Ответ: Вопросы от новичка
 
Не совсем про Юнити, но все же. Преимущественно в космических стратегиях используется большое количество снарядов (лазеры, ракеты, торпеды и т.д) на поле боя. И получается все эти снаряды обсчитывают столкновения с другими объектами и в случае попадания рассчитывается и отнимается урон или же они (снаряды) все только для визуальной части, а столкновение происходит через какое то время, которое рассчитывается при начале полета типа скорость/расстояние?


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

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