Unity | 部分区域自由截图

一、固定区域截屏:

Unity三种截屏方法

二、自由截图

using System.Collections;
using UnityEngine;

///挂在摄像机上
///如果要截图UI,需将Canvas的RenderMode设置为Screen Space-Camera,并将Render Camera设置为挂该脚本的摄像机

public class Capture : MonoBehaviour {
    public Color rColor = Color.green;//截图框颜色
    public Vector3 start = Vector3.zero;//开始位置
    public Vector3 end = Vector3.zero;//结束位置
    public Material rMat = null;//截图框材质,shader为"UI/Default"即可
    public bool drawFlag = false;//是否开始截图
    private Rect rect;//截图区域
    private Texture2D cutImage;//图片
    byte[] bytes;//图片byte
  
    void Update()
    {
        //按下鼠标左键开始截图
        if (Input.GetMouseButtonDown(0) && SecondPageManager._instance. ToCapture)
        {
            SecondPageManager._instance.CapturePanel.SetActive(false);
            drawFlag = true;
            start = Input.mousePosition;
        }
        //抬起鼠标左键结束截图
        if (Input.GetMouseButtonUp(0) && SecondPageManager._instance.ToCapture && drawFlag)
        {
            SecondPageManager._instance.ToCapture = false;
            drawFlag = false;
            StartCoroutine(CutImage());
        }
        //点击鼠标右键取消截图
        if (Input.GetMouseButtonDown(1) && SecondPageManager._instance.ToCapture)
        {
            SecondPageManager._instance.CapturePanel.transform.parent.gameObject.SetActive(false);
            SecondPageManager._instance.CapturePanel.SetActive(false);
            SecondPageManager._instance.ToCapture = false;
            drawFlag = false;
        }
    }
    //绘制框选  
    void OnPostRender()
    { 
        if (drawFlag)
        {
            end = Input.mousePosition;//鼠标当前位置  
            GL.PushMatrix();//保存摄像机变换矩阵  
            if (!rMat)
                return;
            rMat.SetPass(0);
            GL.LoadPixelMatrix();//设置用屏幕坐标绘图  
            GL.Begin(GL.QUADS);
            GL.Color(new Color(rColor.r, rColor.g, rColor.b, 0.2f));//设置颜色和透明度,方框内部透明  
            GL.Vertex3(start.x, start.y, 0);
            GL.Vertex3(end.x, start.y, 0);
            GL.Vertex3(end.x, end.y, 0);
            GL.Vertex3(start.x, end.y, 0);
            GL.End();
            GL.Begin(GL.LINES);
            GL.Color(rColor);//设置方框的边框颜色 边框不透明  
            GL.Vertex3(start.x, start.y, 0);
            GL.Vertex3(end.x, start.y, 0);
            GL.Vertex3(end.x, start.y, 0);
            GL.Vertex3(end.x, end.y, 0);
            GL.Vertex3(end.x, end.y, 0);
            GL.Vertex3(start.x, end.y, 0);
            GL.Vertex3(start.x, end.y, 0);
            GL.Vertex3(start.x, start.y, 0);
            GL.End();
            GL.PopMatrix();//恢复摄像机投影矩阵  
        }
    }
    IEnumerator CutImage()
    {

        string date = System.DateTime.Now.ToString("yyyyMMddHHmmss");
        //图片大小    
        if (end.x > start.x&& start.y > end.y)
        {
            cutImage = new Texture2D((int)(end.x - start.x), (int)(start.y - end.y), TextureFormat.RGB24, true);
            //坐标左下角为(0,0)点
            rect = new Rect((int)start.x,
                Screen.height - (int)(Screen.height - end.y), 
                (int)(end.x - start.x),
                (int)(start.y - end.y));
            yield return new WaitForEndOfFrame();
            cutImage.ReadPixels(rect, 0, 0, false);
            cutImage.Apply();
            yield return cutImage;
            bytes = cutImage.EncodeToPNG();
            //保存截图    
            //File.WriteAllBytes("D:/CutImage" + date + ".png", bytes);
            //公式识别
            StartCoroutine(FormulaRecognize._instance.OCRIdentify(bytes));
        }
        else
        {
            StartCoroutine(FormulaRecognize._instance.OCRIdentify(null));
            Debug.Log("请按照左上角到右下角的方式截图"); 
        }
    }
}

                                        

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Unity中,要让片的某个区域透明度变高,可以通过修改片的Alpha通道来实现。 首先,确保你的片格式支持Alpha通道,比如PNG格式,这样才能给片的不同区域设置透明度。 接下来,在Unity中打开你的片资源,选择该片,在Inspector面板中,可以看到Texture Type选项。确保该选项的值为Advanced。 然后,在Inspector面板中,展开Advanced选项,可以看到Alpha Source选项。将其设置为"From Gray Scale",这样片的透明度将会根据Gray Scale颜色来决定。 接下来,在Unity的编辑器中,选中你的片,会在Scene视中出现一个GUI Texture或Raw Image组件,你可以将其作为UI对象添加到Canvas上,或者将其作为游戏世界中的物体添加到场景中。 然后,为该GUI Texture或Raw Image组件创建一个新的材质。在Unity的Project窗口中右键点击,选择Create->Material选项。将新材质的Shader设置为UI/Unlit/Transparent或Sprites/Default,这样材质才能支持透明度。 接下来,将这个材质应用到GUI Texture或Raw Image组件上。选中GUI Texture或Raw Image组件,在Inspector面板中的Material字段中,将之前创建的材质拖放到该字段中。 最后,通过在材质的颜色属性或主纹理属性中调整Alpha通道的值,来改变片的某个区域的透明度。你可以使用颜色选择器或直接在材质属性中输入具体的Alpha值来调整透明度。 这样,你就可以在Unity中实现部分区域透明度变高的效果了。记得保存你的场景和材质,然后运行游戏或查看场景,就能看到片的部分区域的透明度变高了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

烫青菜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值