为了账号安全,请及时绑定邮箱和手机立即绑定

Unity以特定速率保存相机图像

Unity以特定速率保存相机图像

C#
森林海 2021-04-10 22:19:28
在我的项目中,我将相机图像保存到一个文件夹中,但是每秒可节省约60。如何将保存的图像数量减少到每秒10张左右?void Update(){     if (TLB)    {        DirectoryInfo p = new DirectoryInfo(path);        FileInfo[] files = p.GetFiles();        saveFrame(path, "TLB", fileCounter);        fileCounter = files.Length + 1;    }}    void saveFrame(string path, string type, int counter){    RenderTexture rt = new RenderTexture(frameWidth, frameHeight, 24);    GetComponentInChildren<Camera>().targetTexture = rt;    Texture2D frame = new Texture2D(frameWidth, frameHeight, TextureFormat.RGB24, false);    GetComponentInChildren<Camera>().Render();    RenderTexture.active = rt;    frame.ReadPixels(new Rect(0, 0, frameWidth, frameHeight), 0, 0);    GetComponentInChildren<Camera>().targetTexture = null;    RenderTexture.active = null;    Destroy(rt);    byte[] bytes = frame.EncodeToPNG();    string filename = path + type + "/" + "/" + frameName(type, counter);    File.WriteAllBytes(filename, bytes);}
查看完整描述

1 回答

?
慕斯709654

TA贡献1840条经验 获得超5个赞

在Unity中一定时间间隔后重复执行代码

使用Update()方法:


// Invoke the method after interval seconds

public float interval = 0.1f;


// time counter

float elapsed = 0f;


void Update() 

{

    elapsed += Time.deltaTime;


    // if time is elapsed, reset the time counter and call the method.

    if (elapsed >= interval) 

    {

        elapsed = 0;

        TakeShot();

    }

}


void TakeShot() 

{

   // do your thing here...

}

使用InvokeRepeating()方法:


// Invoke the method after interval seconds

public float interval = 0.1f;


float delaySeconds = 0f; // delay the first call by seconds


void Start()

{

    InvokeRepeating("TakeShot", delaySeconds, interval);

}


void TakeShot() 

{

   // do your thing here...

}

注意:这两种方法都是framerate和time-scale依赖的。


查看完整回答
反对 回复 2021-04-17
  • 1 回答
  • 0 关注
  • 241 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号