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)

Антихрист 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. Для фикса нужно искать левые библы, которые явно будут медленней работать.


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

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