Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何以60fps的速度制作脱机png序列记录器?_C#_Unity3d - Fatal编程技术网

C# 如何以60fps的速度制作脱机png序列记录器?

C# 如何以60fps的速度制作脱机png序列记录器?,c#,unity3d,C#,Unity3d,我想以非实时(离线)方式拍摄Unity相机的一系列图像,60fps,4k 到目前为止,我能够成功地捕获每个帧,但我不知道如何使其脱机,并符合60帧/秒 我拍摄的画面如下: //获取主摄影机并手动将场景渲染到rt Camera Camera=this.GetComponent();//注:由于原始脚本中未引用摄影机而添加;必须将此脚本添加到摄影机 camera.targetTexture=渲染器; camera.Render(); this.lastRenderTime=Time.realtime

我想以非实时(离线)方式拍摄Unity相机的一系列图像,60fps,4k

到目前为止,我能够成功地捕获每个帧,但我不知道如何使其脱机,并符合60帧/秒

我拍摄的画面如下:

//获取主摄影机并手动将场景渲染到rt
Camera Camera=this.GetComponent();//注:由于原始脚本中未引用摄影机而添加;必须将此脚本添加到摄影机
camera.targetTexture=渲染器;
camera.Render();
this.lastRenderTime=Time.realtimesincestart;
//读取像素将从当前活动的渲染纹理中读取,因此使我们的屏幕外
//“渲染纹理”处于活动状态,然后读取像素
RenderTexture.active=RenderTexture;
屏幕截图。读取像素(矩形,0,0);
//重置活动摄影机纹理和渲染纹理
camera.targetTexture=null;
RenderTexture.active=null;
//获取我们的唯一文件名
字符串文件名=唯一文件名((int)rect.width,(int)rect.height);
//拉入指定图像格式的文件头/数据字节(必须从主线程完成)
字节[]fileHeader=null;
字节[]fileData=null;
//创建新线程以将图像保存到文件(仅可在后台执行的操作)
新的System.Threading.Thread(()=>
{
//创建文件并使用图像字节写入可选头
var f=System.IO.File.Create(文件名);
if(fileHeader!=null)f.Write(fileHeader,0,fileHeader.Length);
f、 写入(fileData,0,fileData.Length);
f、 Close();
Log(string.Format(“编写的屏幕截图{0},大小为{1}”),文件名,fileData.Length));
}).Start();
有人能给我指出正确的方向吗?

在中,将所有时间步长设置为1/60(约0.016667)

然后在OnPostRender事件中显示caputre屏幕


您如何保证它在指定的机器上以60FPS的速度运行(尤其是4K图形)?这是一个棘手的问题,因为听起来你可能需要自己运行一些优化测试。这就是“离线”的意义所在。渲染时,Unity的运行速度将比60fps慢很多,但图像序列将符合60fps的画面。我是否也应该更改时间比例?此外,OnPostRender函数似乎没有被调用(我将包含脚本的脚本附加到摄影机对象,所以我不确定为什么没有调用它)。这个答案解决了我的问题。我将Timestep值更改为0.01666667。但是,我无法调用OnPostRender函数。我将单独研究。不需要更改时间刻度,并且在启用的摄影机上调用OnPostRender,如果它不起作用,您也可以使用WaitForEndOffFrame。