如何阻止我的相机输出到Unity中相同的渲染纹理?

时间:2016-04-21 09:21:49

标签: c# unity3d

我的场景中有两个渲染器对象(A和B)连接到两个不同的摄像头(绿色方块和红色方块):

Camera Example

我在两个渲染对象上使用以下脚本在相应的相机上创建渲染纹理,然后在每个帧的对象上绘制为纹理:

using UnityEngine;
using System.Collections;

[ExecuteInEditMode]
public class CameraRenderer : MonoBehaviour 
{
    public Camera Camera;
    public Renderer Renderer;

    void Start()
    {
        RenderTexture renderTexture = new RenderTexture (256, 256, 16, RenderTextureFormat.ARGB32);
        renderTexture.Create ();
        Camera.targetTexture = renderTexture;
    }

    void Update () 
    {
        Renderer.sharedMaterial.mainTexture = GetCameraTexture ();
    }

    Texture2D GetCameraTexture()
    {
        RenderTexture currentRenderTexture = RenderTexture.active;
        RenderTexture.active = Camera.targetTexture;
        Camera.Render();
        Texture2D texture = new Texture2D(Camera.targetTexture.width, Camera.targetTexture.height);
        texture.ReadPixels(new Rect(0, 0, Camera.targetTexture.width, Camera.targetTexture.height), 0, 0);
        texture.Apply();
        RenderTexture.active = currentRenderTexture;
        return texture;
    }
}

我期待在不同的相机上看到A和B上的两个不同的图像,但我看到的是相同的图像。我最初使用的是我在附加到相机的编辑器中创建的渲染纹理,但是这可能是导致它们呈现相同内容的原因所以我尝试在每个对象上创建一个新纹理。可悲的是,这仍然导致了同样的结果。

我对团结很陌生,所以我的想法很快就会用完 - 任何建议都会很棒!

2 个答案:

答案 0 :(得分:2)

尝试,

Renderer.material.mainTexture = GetCameraTexture ();

而不是,

Renderer.sharedMaterial.mainTexture = GetCameraTexture ();

答案 1 :(得分:2)

我不建议为你的对象命名你的类名。无论如何我认为渲染器使用相同的材​​质,它们都会渲染相同的纹理,无论相机最后给它们。

使用Renderer.material自动创建材质的新实例,或手动为2个渲染器指定不同的材质。