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)

pax 11.05.2016 15:28

Ответ: Вопросы от новичка
 
Думаю это зависит от того, как надо. Корабли могут менять свои курсы и ракеты в них больше не попадут, т.е. рассчитать в начале полета столкновение никак нельзя. Если ракета самонаводящаяся, то можно посчитать уйдет ли корабль от ракеты или нет и создать только событие запуска и визуализацию. Если ракета прямой наводки, то тут так не получится.

WISHMASTER35 14.05.2016 21:33

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

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

А перезапуск VS не помогает?
То, что ты описал происходит, когда ты открыл конкретный файл, а не проект.
Может ты не нажал Reload All, когда юнити изменил файл проекта.

Подскажите, из объекта можно получить ссылку на префаб?

Nex 15.05.2016 01:59

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

Сообщение от WISHMASTER35 (Сообщение 306067)
А перезапуск VS не помогает?
То, что ты описал происходит, когда ты открыл конкретный файл, а не проект.
Может ты не нажал Reload All, когда юнити изменил файл проекта.

Жму Reload All, но может быть иногда жму не то, что надо.

Цитата:

Сообщение от WISHMASTER35 (Сообщение 306067)
Подскажите, из объекта можно получить ссылку на префаб?

Попробуй это PrefabUtility.GetPrefabParent

WISHMASTER35 15.05.2016 15:01

Ответ: Вопросы от новичка
 
Никто не знает как в инспекторе отрисовать интерактивное превью GameObject'а?
Вот чтобы меш отрисовать есть класс PreviewRenderUtility.

Код:

    public override void OnInteractivePreviewGUI(Rect rect, GUIStyle background) {
        if(Event.current.type == EventType.MouseDrag) {
            angles.x += Event.current.delta.y;
            angles.x = Mathf.Clamp( angles.x, -60, 60 );
            angles.y += Event.current.delta.x;
            Event.current.Use();
        }

        if(Event.current.type == EventType.Repaint) {
            previewRender.m_Camera.transform.position = Vector3.zero;
            previewRender.m_Camera.transform.rotation = Quaternion.Euler( angles );
            previewRender.m_Camera.transform.Translate( 0, 0, -10 );
            previewRender.m_Camera.farClipPlane = 100;

            previewRender.BeginPreview( rect, null );

            Vector3 pos = -mesh.bounds.center;
            for(int i = 0; i < mesh.subMeshCount; i++) {
                previewRender.DrawMesh( mesh, pos, Quaternion.identity, materials[i], i );
            }

            previewRender.m_Camera.Render();
            var texture = previewRender.EndPreview();
            GUI.DrawTexture( rect, texture );

            Event.current.Use();
        }
    }

А как GameObject отрисовать не ясно. Можно конечно в тупую достать из него все меши и их рисовать. Но может есть способ по лучше?

pax 15.05.2016 18:55

Ответ: Вопросы от новичка
 
Если это ассет, то можно наверное этим методом получить превью:
http://docs.unity3d.com/ScriptRefere...etPreview.html

PS: а если GO поставить перед камерой previewRender.m_Camera перед строчкой previewRender.m_Camera.Render(); ничего не происходит?

WISHMASTER35 18.05.2016 17:06

Ответ: Вопросы от новичка
 
Я пока использую AssetPreview.GetAssetPreview, но это просто текстура. Никакого интерактива, еще и разрешение маленькое.

PreviewRenderUtility давно появился? Почему-то только недавно я его обнаружил.
Раньше я вручную ставил и камеру и объект, чтобы отрендерить привью, но ничего хорошего так и не вышло. Лучше обойдусь GetAssetPreview.

А как правильно по нажатию мышки удалять\добавлять GUI элементы?
В редакторе вроде никаких проблем не было, а в игре кидает ошибку, что между Layout и Repaint были изменения.
Код:

ArgumentException: Getting control 2's position in a group with only 2 controls when doing mouseDown
Aborting


pax 18.05.2016 22:51

Ответ: Вопросы от новичка
 
Я обычно вызываю функцию GUIUtility.ExitGUI(); и потом return после таких изменений.

WISHMASTER35 21.05.2016 13:46

Ответ: Вопросы от новичка
 
В Unity 5 что-нибудь изменилось с execution order ?
Ибо в 4й версии он явно был сделан от балды.
Было бы лучше задавать execution order атрибутом для каждого класса и даже для конкретного уровня программы (namespace, например).

Сейчас же заметил, что инстансированному объекту пофиг на его execution order. Но это в юнити 4. Может в 5й уже исправили.

WISHMASTER35 25.05.2016 16:19

Ответ: Вопросы от новичка
 
А никак нельзя узнать для какого свойства было вызвано OnValidate?
Или хотя бы для свойства оно было вызвано или нет? Ибо оно вызывается перед Awake и после OnDestroy.

pax 25.05.2016 16:54

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

Сообщение от WISHMASTER35 (Сообщение 306205)
А никак нельзя узнать для какого свойства было вызвано OnValidate?
Или хотя бы для свойства оно было вызвано или нет? Ибо оно вызывается перед Awake и после OnDestroy.

Первый раз про эту функцию услышал, к сожалению видимо в ней не определить что изменилось.

WISHMASTER35 25.05.2016 18:53

Ответ: Вопросы от новичка
 
Как же мешает, что изменение GUI.matrix влияет на Area или Group, которые были заданы до изменения матрицы!!!
Т.е. чтобы было что-то типа GL.PushMatrix.
Ибо часто надо рисовать с перевернутой Y координатой и в других масштабах.
Надеялся что в Unity 5 исправят, но нет(

WISHMASTER35 29.05.2016 20:15

Ответ: Вопросы от новичка
 
Теперь EditorUtility.SetDirty не работает для объектов сцены.
Надо использовать SerializedObject, Undo.RecordObject или EditorSceneManager.MarkSceneDirty
Я теперь каждый раз должен вручную проверять принадлежит ли объект сцене или нет?!

В самой юнити, я так понял, пишут так:
Код:

        SerializedProperty damageProp;
        SerializedProperty armorProp;
        SerializedProperty gunProp;
       
        void OnEnable () {
                // Setup the SerializedProperties.
                damageProp = serializedObject.FindProperty ("damage");
                armorProp = serializedObject.FindProperty ("armor");
                gunProp = serializedObject.FindProperty ("gun");
        }

Но это же кошмар.

Жека 30.05.2016 07:21

Ответ: Вопросы от новичка
 
Я недавно увидел полезный пункт в меню Create окна Hierarchy - "Create Empty Child", это позволяет создавать пустышку внутри выделенного объекта. скрин https://yadi.sk/i/91zF1aYxs6vKV

pax 30.05.2016 09:48

Ответ: Вопросы от новичка
 
2WISHMASTER35
1. В OnGUI можно рисовать с использованием GL, это не решит проблемы? В целом можно так же рисовать в событии EventType.Repaint, когда Layout уже рассчитан, тогда изменение матрицы не должно повлиять на него, ну и в целом свои функции push и pop можно попробовать сделать.
2. В целом да, надо еще проверять, в какой сцене ты его редактируешь наверное) Но лучше использовать Undo.

Постоянно путаю ARA с Жекой по аватарке... немного бесить уже начинает

ARA 30.05.2016 18:27

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

Постоянно путаю ARA с Жекой по аватарке... немного бесить уже начинает
Как? Мы такие разные!

pax 30.05.2016 20:18

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

Сообщение от ARA (Сообщение 306259)
Как? Мы такие разные!

Все время казалось, что это твоя ава)

WISHMASTER35 30.05.2016 22:42

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

Сообщение от pax (Сообщение 306258)
2WISHMASTER35
1. В OnGUI можно рисовать с использованием GL, это не решит проблемы? В целом можно так же рисовать в событии EventType.Repaint, когда Layout уже рассчитан, тогда изменение матрицы не должно повлиять на него, ну и в целом свои функции push и pop можно попробовать сделать.

GL текстуру вроде бы не может нарисовать. Разве через какие-то ухищрения.

А вот вторая идея - интересная. Странно, что сам не догадался, что можно изменять матрицу не для всех событий)


pax, ты уже работал с новым UNET?
Как при спавне передать некоторые параметры (цвет, имя)?
В фотоне были photonView.owner.customProperties. И то мне этот способ не нравился ибо эти свойства будут там постоянно висеть.

pax 31.05.2016 07:42

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

Сообщение от WISHMASTER35 (Сообщение 306261)
GL текстуру вроде бы не может нарисовать. Разве через какие-то ухищрения.


GL использует любой материал с любыми текстурами. Смотри пример Material.SetPass

UPD: Собственно еще вариант для отрисовки текстуры кверху ногами GUI.DrawTextureWithTexCoords

Цитата:

Сообщение от WISHMASTER35 (Сообщение 306261)
pax, ты уже работал с новым UNET?
Как при спавне передать некоторые параметры (цвет, имя)?
В фотоне были photonView.owner.customProperties. И то мне этот способ не нравился ибо эти свойства будут там постоянно висеть.

C UNET не работал, жду серверную библиотеку, а до того времени он пока для меня бесполезен. Мне нужны авторитарные сервера, а не облако.

Что на счет фотона, там было несколько способов.

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

Еще вариант - посылать сообщения [RPC] с буферизацией. Новые игроки при подключении должны так же получать буферизированные сообщения. Такое было в стандартной сети Unity, думаю такое можно сделать и в UNET. Собственно можно даже самому написать отправлялку всем при подключении к комнате и новым игрокам при их подключении.

WISHMASTER35 02.06.2016 11:13

Ответ: Вопросы от новичка
 
Кто-нибудь понимает, что такое Relay Server и зачем он нужен при мачмейкинге?

seaman 02.06.2016 19:10

Ответ: Вопросы от новичка
 
"Промежуточный сервер". Используется например, когда невозможно прямое соединение между компьютерами (в торрентах например). Если Ваш комп за NAT, proxy, файрволом то peer-to-peer соединения невозможны, а через Relay сервер - пожалуйста.

WISHMASTER35 03.06.2016 11:24

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

Сообщение от seaman (Сообщение 306289)
"Промежуточный сервер". Используется например, когда невозможно прямое соединение между компьютерами (в торрентах например). Если Ваш комп за NAT, proxy, файрволом то peer-to-peer соединения невозможны, а через Relay сервер - пожалуйста.

Т.е. весь трафик пересылается через этот сервер?
Чем это тогда отличается от платного лобби?

seaman 03.06.2016 13:22

Ответ: Вопросы от новичка
 
Вообще я с этим в Юнити не работал. Опишу как понимаю.
1. В игре вообще может не быть выделенного сервера. Следовательно все клиенты просто взаимодействуют друг с другом. Возможно один из клиентов - "главный", но это не принципиально.
В этом случае все клиенты которые за NAT просто не смогут играть. Для таких клиентов делаем Relay сервер, который совсем не обрабатывает ничего, просто через него происходит общение с такими ущемленными клиентами.
При этом нормальные клиенты могут между собой общаться как и раньше - без сервера.
2. Даже если у Вас есть выделенный сервер, какая то часть общения клиентов может вынесена peer2peer, например чат группы.
Для такого общения все вышесказанное тоже верно.

Т.е. через Relay сервер может идти не весь трафик, а только нужный для спецклиентов. Если таких клиентов не будет - он может вообще простаивать.

WISHMASTER35 03.06.2016 15:50

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

В этом случае все клиенты которые за NAT просто не смогут играть.
По-моему клиентам как раз должно быть все равно за NAT они или нет.
Ведь порты случает только сервер.

seaman 04.06.2016 00:26

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

Ведь порты случает только сервер.
Цитата:

В игре вообще может не быть выделенного сервера.
Противоречия не видите?
Relay сервер как раз для этого и есть.

Жека 23.06.2016 19:20

Ответ: Вопросы от новичка
 
Проблема с git merge.

1. Перевёл тип данных проекта из Mixed в Force Text.
2. Заюзал SmartMerge for SourceTree.
При слиянии сцен через Resolve Conflicts -> Launch External Merge Tools получаю табличку с ошибкой.
А при обычном sourcetree'шном мердже просираются изменения, сделанные товарищем.

Кто как мерджит, подскажите.

WISHMASTER35 28.06.2016 23:26

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

Сообщение от Жека (Сообщение 306589)
Проблема с git merge.

1. Перевёл тип данных проекта из Mixed в Force Text.
2. Заюзал SmartMerge for SourceTree.
При слиянии сцен через Resolve Conflicts -> Launch External Merge Tools получаю табличку с ошибкой.
А при обычном sourcetree'шном мердже просираются изменения, сделанные товарищем.

Кто как мерджит, подскажите.

Ну а что за ошибки?
Наверно же не может какие-то объекты смержить.

WISHMASTER35 29.06.2016 01:19

Ответ: Вопросы от новичка
 
В Unity 4 кажется можно было отключить Skybox в Gizmos, но сейчас такого не вижу.
Unity убрали эту функцию или ее и не было?

Жека 29.06.2016 10:41

Ответ: Вопросы от новичка
 
> Ну а что за ошибки?

"Не найдено правило мерджа для .tmp файлов 'в таком-то файле в папке с юнити'".
Я открывал, там ни для каких файлов нет правил.
Да и нет у меня tmp файлов, видимо утилита сама их сгенерила.

Жека 29.06.2016 10:47

Ответ: Вопросы от новичка
 
Скайбокс тут - https://yadi.sk/i/AmkyfxRissHZ5

WISHMASTER35 29.06.2016 12:04

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

Сообщение от Жека (Сообщение 306700)
> Ну а что за ошибки?

"Не найдено правило мерджа для .tmp файлов 'в таком-то файле в папке с юнити'".
Я открывал, там ни для каких файлов нет правил.
Да и нет у меня tmp файлов, видимо утилита сама их сгенерила.

Что вообще за tmp файлы? Unity создает только meta файлы.

Жека 29.06.2016 15:08

Ответ: Вопросы от новичка
 
А вот хрен его знает. Т.к. мы доделали демку, то я пока забил на эту тему.

Ещё вариант - юзать мультисцену. Каждый работает в рамках своей сцены. Но всё равно свет и камера общие - приведут к коллизии при мердже.

Ещё вариант - создать объекты пустышки для разных частей-модулей, и динамически фигарить через префабы.

Неудобство, кароче.

Taugeshtu 29.06.2016 17:18

Ответ: Вопросы от новичка
 
Мы пользуем SourceTree + P4Merge, все ассеты сериализуются в текст, мета-файлы видимы - почти никаких траблов с мерджем сцен. Единственный нюанс - нужно когда все синхронизированны на одном коммите перевести проект на текстовую сериализацию, и всем обновиться. По умолчанию юнити использует то ли смешанную, то ли бинарную сериализацию.

RegIon 01.07.2016 23:18

Ответ: Вопросы от новичка
 
Unity 5.3.5. + 2 монитра.
Поставил второй монитор и словил баг - UI перестает работать если например перенести окно на другой монитор, или даже просто запускать несколько раз (ничего не нажимается, от eventTriger тишина). Это лечится? Ну кроме как перезапуском редактора. Я вот боюсь что отвалится оно в билде, когда я буду использовать несколько мониторов (в доках сказано что так можно - по камере на монитор).
Причем если второй отрубить,то вроде и работает нормально.

UPD. Не работает если даже просто долго с ним взаимодействовать.
UPD. Теперь так даже если отключить второй монитор.
UPD. Случается со всеми версиями. Перешел на 5.3.4 -такая же шляпа. Ошибок нет.

Upd. abd на последней версии СДК порой вешает юнити, походу он и блокирует эвент систем, наверное Юнити ждет подключение устройства (ну когда она отправляет картинку на мобилку)

Собственно баг.

Жека 04.07.2016 09:41

Ответ: Вопросы от новичка
 
Я тоже наблюдал такой баг. Лечение не искал, просто рестартил юнити.

RegIon 04.07.2016 23:43

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

Сообщение от Жека (Сообщение 306834)
Я тоже наблюдал такой баг. Лечение не искал, просто рестартил юнити.

Еслсои есть Android SDK - переименуй adb. Unity его всегда дергает и он висит на последних версиях порой. Помогло.

WISHMASTER35 05.07.2016 23:08

Ответ: Вопросы от новичка
 
Как работает GL.MultMatrix ? Такое чувство, что он не умножает матрицу, а просто задает новую.

Можно написать:
Код:

GL.MultMatrix( Matrix4x4.Scale( new Vector3( 10, 1, 1 ) ) );
GL.MultMatrix( Matrix4x4.Scale( new Vector3( 10, 1, 1 ) ) );
GL.MultMatrix( Matrix4x4.Scale( new Vector3( 10, 1, 1 ) ) );

Но эффект будет, как от одного MultMatrix.

Здесь http://www.cnblogs.com/wantnon/p/5066203.html описывается такая проблема.

pax 06.07.2016 07:19

Ответ: Вопросы от новичка
 
По идее должно множить несколько раз...
Можно наверное умножать несколько раз саму матрицу:
PHP код:

GL.modelview *= Matrix4x4.Scale( new Vector3101) );
GL.modelview *= Matrix4x4.Scale( new Vector3101) );
GL.modelview *= Matrix4x4.Scale( new Vector3101) ); 

Не проверял.

WISHMASTER35 06.07.2016 22:00

Ответ: Вопросы от новичка
 
pax, похоже GL.MultMatrix просто умножает GL.modelview на свою.
Это работает.
Код:

GL.modelview *= matrix;
GL.MultMatrix( matrix2 );


WISHMASTER35 10.07.2016 00:54

Ответ: Вопросы от новичка
 
Еще во времена Unity 3 я нашел такой код, который не дает переключится на другой объект. Т.е. можно клацать по чем угодно в сцене, но выбранный объект не переключится.
Код:

HandleUtility.AddDefaultControl( GUIUtility.GetControlID( FocusType.Passive ) );
Но вот как оно работает, я до сих пор и не понял.

Сейчас надо что-то подобное сделать, только чтобы при нажатии shift + right mouse не срабатывало вращение камеры.

Жека 10.07.2016 05:56

Ответ: Вопросы от новичка
 
Можно на камеру кинуть скрипт, выполняемый во время редактора. И в нём в LateUpdate проверять шифт+мышь. Если есть, то ставим rotation из предыдущего кадра.

WISHMASTER35 10.07.2016 12:17

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

Сообщение от Жека (Сообщение 307011)
Можно на камеру кинуть скрипт, выполняемый во время редактора. И в нём в LateUpdate проверять шифт+мышь. Если есть, то ставим rotation из предыдущего кадра.

Да уж лучше просто Event.current.Use(). Но в таком случае курсор так же меняется на иконку обзора.

UPDATE
Так можно отключить и выбор объектов и вращение камеры. Но как оно работает я все равно не пойму.
Код:

        int controlId = GUIUtility.GetControlID(FocusType.Passive);
        if(Event.current.type == EventType.MouseDown) {
            GUIUtility.hotControl = controlId;
            Event.current.Use();
        }


RegIon 17.07.2016 21:39

Ответ: Вопросы от новичка
 
Корутина WWW неплохо нагружает поток,FPS падает до 15.
Загружаю встречно основным действиям картинку с диска.
До этого грузил по необходимости (т.е нужно сменит - останавливаю обработку, загружаю, обновляю), сейчас решил сделать как-то так:
Работаю с текущим изображением + гружу новое, а потом обновляю, когда нужно. Но это нехило грузит.

Что посоветуете?


Taugeshtu 18.07.2016 13:10

Ответ: Вопросы от новичка
 
Я делал как-то сериализацию текстур в байты и загрузку из байтов, работало шустро (главное не пролюбить задать принимающей текстуре все-все-все параметры как у отдающей байты); плюс загрузку байтов можно перекинуть в другой поток (не уверен, что с загрузкой текстуры проканает, но можешь попробовать)

Если самому лень с тредами копаться - в ассет сторе есть хорошее расширение со скриптом MagicThread, пример исполья - тут.

RegIon 24.01.2017 13:26

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


pax 24.01.2017 15:56

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

UPD: Еще вариант. Те поля, которые красные делай приватными с атрибутом SerializeField и будет тебе счастье.

Evgen 31.01.2017 10:12

Ответ: Вопросы от новичка
 
Для чего серализацию используете? Я так понимаю чтобы сохранять уровни?

pax 31.01.2017 10:50

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

Nex 03.02.2017 14:49

Ответ: Вопросы от новичка
 
При использовании ScriptableObject для инвентаря столкнулся с проблемой получения нужного ScriptableObject'а через код. Сделал костыль-базу_данных где есть List<>, который заполняю всеми доступными для инвентаря ScriptableObject'ами через редактор и далее в коде уже ищу по имени нужное. Есть ли еще какие-нибудь варианты поиска нужного ScriptableObject через код?

pax 03.02.2017 18:36

Ответ: Вопросы от новичка
 
Помести в Resources и делай загрузку из ресурсов по имени.
PHP код:

var inventoryItem Resources.Load<MyScriptableObject>("inventory_items/"+itemName


Mimi Neko 06.02.2017 01:59

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

Сообщение от RegIon (Сообщение 307202)
Корутина WWW неплохо нагружает поток,FPS падает до 15.
Загружаю встречно основным действиям картинку с диска.
До этого грузил по необходимости (т.е нужно сменит - останавливаю обработку, загружаю, обновляю), сейчас решил сделать как-то так:
Работаю с текущим изображением + гружу новое, а потом обновляю, когда нужно. Но это нехило грузит.

Что посоветуете?

Можно попробовать без корутин, в отдельном потоке.
корутина-то в общем потоке работает.

Nex 06.02.2017 12:53

Ответ: Вопросы от новичка
 
Как из unity3d editor выгружать не нужное? При запуске юнити занимает в памяти 176мб, но после работы в течении дня начинает занимать в памяти уже ~500мб. Так же замечал иногда, что каждую секунду процесс начинает потреблять на пару килобайт больше и через какое то время начинает отжирать довольно много памяти. Никаких юзер скриптов работающих в редакторе у меня нет за исключением атрибута [CreateAssetMenu] в одном из скриптов. Так же никаких левых ассетов из стора и кряков не использую.

RegIon 06.02.2017 14:04

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

Сообщение от Nex (Сообщение 311724)
Как из unity3d editor выгружать не нужное? При запуске юнити занимает в памяти 176мб, но после работы в течении дня начинает занимать в памяти уже ~500мб. Так же замечал иногда, что каждую секунду процесс начинает потреблять на пару килобайт больше и через какое то время начинает отжирать довольно много памяти. Никаких юзер скриптов работающих в редакторе у меня нет за исключением атрибута [CreateAssetMenu] в одном из скриптов. Так же никаких левых ассетов из стора и кряков не использую.

Иногда не выгружаю Unity по 3дня и не замечал такой проблемы. Папка Temp растет конечно катастрофично.

Nex 18.03.2017 16:26

Ответ: Вопросы от новичка
 
Как в играх делают частичную паузу допустим при диалогах, всплывающих окнах при которой всё кроме ключевых персонажей, объектов останавливается?
Время ставить в ноль получается не вариант, ибо остановится вся игра. А делать в каждом скрипте проверку на что то типа GameController.IsPause как то бредово.

Taugeshtu 18.03.2017 18:50

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

Сообщение от Nex (Сообщение 312518)
Как в играх делают частичную паузу допустим при диалогах, всплывающих окнах при которой всё кроме ключевых персонажей, объектов останавливается?
Время ставить в ноль получается не вариант, ибо остановится вся игра. А делать в каждом скрипте проверку на что то типа GameController.IsPause как то бредово.

Вот именно поэтому имеет смысл не пользоваться стандартными Update() напрямую. Мне довольно удобно работать когда у меня есть выделенный класс, который занимается инстанциированием, другой - запуском игровых процессов, третий - обращением к хранилищам данных.

Если у тебя запуск игровой логики на обсчёт сконцентрирован в одном месте (или хотя бы в Update() класса, от которого всё игровое наследуется, и внутри родительского Update() происходит запуск виртуального DoLogic()) - это легко решается. Оверхед от вкручивания чуть более громоздкой архитектуры окупается :)

seaman 18.03.2017 22:42

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

Время ставить в ноль получается не вариант, ибо остановится вся игра.
В скриптах, которые не должны останавливаться использовать вмеcто deltatime - Time.unscaledTime

RegIon 16.05.2017 17:50

Ответ: Вопросы от новичка
 
Блин, никак не пойму как крутить объект типа LookAt вокруг определенной оси. Типа как вращается LineRenderer. Т.е вокруг оси направления dращается LineRenderer.

Красные - как есть, голубые - как надо.



Это квады, кручу выставляя ось right.

pax 16.05.2017 18:28

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

RegIon 16.05.2017 18:55

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

Сообщение от pax (Сообщение 313613)
Не особо понял что там нарисовано и как что крутишь, я обычно прибегаю к векторному произведению и восстанавливаю нужной мне осью не правильную.
А в твоем случае - сделай пустышку (парента), поверни внутри нее свой квад как надо и делай лук эт этой пустышке.

Нужно крутить Квад со стримерами (электроразряды) по оси образованной усам подков (от красной к синей) к камере.
Что бы стримеры всегда располагались на этой оси и смотрели на камеру.

Логично, что если 2 подковы будут параллельны взору, то я не увижу эти квады, но этого и не нужно.

Taugeshtu 16.05.2017 19:35

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

Сообщение от RegIon (Сообщение 313615)
Нужно крутить Квад со стримерами (электроразряды) по оси образованной усам подков (от красной к синей) к камере.
Что бы стримеры всегда располагались на этой оси и смотрели на камеру.

Логично, что если 2 подковы будут параллельны взору, то я не увижу эти квады, но этого и не нужно.

Посмотри вот на этот метод.
Вторым параметром можно задать плоскость относительно Look-вектора. Скорее всего в твоём случае будет что-то типа:
Код:

var magnetPoseDiff = magnetB.position - magnetA.position;
var cameraDiff = Camera.main.transform.position - magnetA.position;
var rotation = Quaternion.LookRotation( magnetPoseDiff, cameraDiff );
m_quadTransform.rotation = rotation; // обрати внимание, что здесь в глобальных координатах действуем
// опционально может понадобиться довернуть квад на 90 градусов:
m_quadTransform.localRotation *= Quaternion.Euler( Vector3.right *90f );



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

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