Unity3d 只截取特定摄像机的截屏(已解决模型层级穿透问题)

public class TakePhoto : MonoBehaviour {
     
    public Camera arcamera;
     
    public void ScreenPicture()
    {
        CaptureCamera(arcamera, new Rect(0,0,Screen.width,Screen.height));   
    }
     
    Texture2D CaptureCamera(Camera camera, Rect rect)   
    {   
        RenderTexture rt = new RenderTexture((int)rect.width, (int)rect.height, 3);  
        camera.targetTexture = rt;  
        camera.Render();  
            
        RenderTexture.active = rt;  
        Texture2D screenShot = new Texture2D((int)rect.width, (int)rect.height, TextureFormat.RGB24,false);  
        screenShot.ReadPixels(rect, 0, 0);
        screenShot.Apply();  
        camera.targetTexture = null;  
        RenderTexture.active = null; 
        GameObject.Destroy(rt);  
        byte[] bytes = screenShot.EncodeToPNG();  
        string filename = Application.persistentDataPath + "/Screenshot.png";  
        System.IO.File.WriteAllBytes(filename, bytes);   
        return screenShot;  
    }
     
}
解决模型层级穿透问题: 

添加水印:

public Camera arcamera;//需要渲染的摄像头
 
    public Texture2D _logo;//水印
 
    public void ScreenPicture()
    {
        Capture(arcamera, new Rect(0, 0, Screen.width, Screen.height));
    }
 
    Texture2D Capture(Camera camera, Rect rect)
    {
        RenderTexture rt = new RenderTexture((int)rect.width, (int)rect.height, 3);
        camera.targetTexture = rt;
        camera.Render();
 
        RenderTexture.active = rt;
        Texture2D screenShot = new Texture2D((int)rect.width, (int)rect.height, TextureFormat.ARGB32, false);
 
        Texture2D _tex = _logo;
 
        screenShot.ReadPixels(rect, 0, 0);
 
        //合成水印和Camera渲染的图片
        for (int i = 0; i < _tex.width; i++)
        {
            for (int j = 0; j < _tex.height; j++)
            {
                if (_tex.GetPixel(i, j).a > 0.5f)
                {
                    screenShot.SetPixel((int)(i+rect.width-_tex.width), j, _tex.GetPixel(i, j));
                }
            }
        }
        screenShot.Apply();
        camera.targetTexture = null;
        RenderTexture.active = null;
        GameObject.Destroy(rt);
        byte[] bytes = screenShot.EncodeToPNG();
        string filename = Application.persistentDataPath + "/Screenshot.png";
        print(filename);
        System.IO.File.WriteAllBytes(filename, bytes);
 
        return screenShot;
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值