获取Unity3D虚拟摄像机的图像

      在使用Unity3D这个引擎做科研或者工程的过程中,有时候需要获得某一个虚拟摄像机实时拍到的画面并保存为图片。这里给出一种简单的实现方法。原理很简单,先将虚拟摄像机的图像转移到一个RenderTexture上,然后使用Texture2D的像素读取功能来将图像数据获取到Texture2D类型的数据中,最后保存到图片。

using UnityEngine;
using System.Collections;
using System.IO;


public class GetImage : MonoBehaviour {

    public Camera mainCam; //待截图的目标摄像机
    RenderTexture rt;  //声明一个截图时候用的中间变量 
    Texture2D t2d ;
    int num = 0;  //截图计数

    //public GameObject pl;  //一个调试用的板子
    


    void Start () {
        t2d = new Texture2D(800,600,TextureFormat.RGB24,false);
        rt = new RenderTexture(800, 600, 24);
        mainCam.targetTexture = rt;
   
    }
    
    void Update () {
        //按下空格键来截图
        if (Input.GetKeyDown(KeyCode.Space))
        {
            //将目标摄像机的图像显示到一个板子上
            //pl.GetComponent<Renderer>().material.mainTexture = rt;

            //截图到t2d中
            RenderTexture.active = rt;                    
            t2d.ReadPixels(new Rect(0, 0, rt.width, rt.height), 0, 0);
            t2d.Apply();
            RenderTexture.active = null;

            //将图片保存起来
            byte[] byt = t2d.EncodeToJPG();
            File.WriteAllBytes(Application.dataPath + "//"+ num.ToString() +".jpg", byt);


            Debug.Log("当前截图序号为:"+num.ToString());
            num++;
        }          
    }
}

posted @ 2016-11-18 12:54  雁回晴空  阅读(903)  评论(0编辑  收藏  举报