- 需求分析
有时候,我们的策划同学需要对摄像机渲染的图像进行截屏保存,然后从这张图片中提取出我们想要的内容,以做后面的其他用途(比如用于展示、美术再加工处理,等等)。
这个需求中,对于我们程序来说,可以拆解长两个问题:第一,如何截屏;第二,如何提取截图中指定的内容。这两个问题不能分割开来看待。如果单独考虑使用Unity的API截屏很简单,但是这就给第二个问题的解决造成了很大的困难。后面我们详细说明为什么。
- 问题之如何截屏
本文截屏采取的方式是,使用主摄像机之外的摄像机的渲染结果TargetTexture,通过这张RenderTexture读取所有的像素,转换成同样大小的 一张Texture2D。该摄像机只负责渲染需要截图的物体。
该摄像机的特殊之处在于,仅渲染特定的Layer层(shapes),该Layer层就是我们需要渲染的物体的层,并且该Layer作为专属层不与其他层混用。摄像机的背景色(Background)设置成容易标识的颜色,相机背景色会跟着物体一起被渲染到targetTexture中。这跟Photoshop中选取特定区域,我们希望是纯的背景色是一样的道理。