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

Сообщение от pax Посмотреть сообщение
Ничего встроенного нет для этого, можешь смело идти на ассетстор искать готовые вещи.
Все только за даллары. От 150-400$, что сильно много для создания короткого промо-ролика бесплатной игры на Android.


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

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

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

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 требует мощный проц(?) иначе видео будет рывками.

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

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