将多个相机渲染的图像显示在UI上

已知到可以创建一个RenderTexture赋值给Camera后,就可以将这个Camera渲染的内容填充到这个RenderTexture中了。但是这是针对某个相机的,如果是要显示多个相机的,就不能这样子做了,办法就是在层次较高的相机上加上后处理方法OnRenderImage,然后将source(RenderTexture)转换为Texture2D,然后赋值给用来显示的UITexture就可以了。为什么不直接把source直接赋值给UITexture,因为我试过了,Editor上是正常的,到手机上就会显示所有相机渲染后的内容,然后就会产生镜像的叠加。

using System.Collections;
using UnityEngine;

public class CreateMJShareTex : MonoBehaviour {

    public UITexture tex;
    private bool isTurnTexture = false;

    private void OnEnable()
    {
        StartCoroutine(WaitOne());
    }

    IEnumerator WaitOne()
    {
        yield return new WaitForEndOfFrame();
        isTurnTexture = true;
    }

    private void OnRenderImage(RenderTexture source, RenderTexture destination)
    {
        if (isTurnTexture)
        {
            RenderTexture curTex = RenderTexture.active;
            Texture2D tex2d = new Texture2D(source.width, source.height);
            RenderTexture.active = source;
            tex2d.ReadPixels(new Rect(0, 0, source.width, source.height), 0, 0);
            tex2d.Apply();
            RenderTexture.active = curTex;
            tex.mainTexture = tex2d;
            isTurnTexture = false;
        }

        Graphics.Blit(source, destination);
    }
}

首页 我的博客
粤ICP备17103704号