2016-04-21 2 views
0

Ich habe zwei Renderer Objekte (A und B) in meiner Szene zu zwei verschiedenen Kameras (grünes Quadrat und rotes Quadrat) verbunden:Wie kann ich verhindern, dass meine Kameras in Unity auf dieselbe Render-Textur ausgeben?

Camera Example

ich auf beiden das folgende Skript verwenden Objekte render a zu erstellen texure auf die entsprechende Kamera machen und diese dann auf jeden Rahmen auf das Objekt als Textur zeichnen:

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; 
    } 
} 

ich erwarte zwei verschiedene Bilder auf A und B von den verschiedenen Kameras zu sehen, aber ich das gleiche sehe Bild. Ich habe ursprünglich eine Render-Textur verwendet, die ich in dem Editor erstellt habe, der an die Kamera angehängt ist, aber obwohl das das sein könnte, was sie dazu brachte, dasselbe zu rendern, habe ich versucht, für jedes Objekt eine neue Textur zu erstellen. Leider führte dies immer noch zu dem gleichen Ergebnis.

Ich bin ziemlich neu in der Einheit, so dass mir die Ideen ziemlich schnell ausgehen - alle Vorschläge wären großartig!

Antwort

2

ich nicht raten würde Ihre Objekte Ihre Klassennamen zu benennen. Jedenfalls denke ich, dass die Renderer das gleiche Material verwenden und beide die gleiche Textur wiedergeben, je nachdem, welche Kamera sie zuletzt liefert.

Verwenden Sie entweder Renderer.material, um automatisch eine neue Instanz des Materials zu erstellen, oder weisen Sie den beiden Renderern manuell unterschiedliche Materialien zu.

+0

Ja, es war genau das - ich habe diese Antwort akzeptiert, da ich es tatsächlich auf die zweite Art und Weise gelöst habe, indem du das Originalmaterial instanziiert hast, um das Ergebnis im Editor beobachten zu können - Prost! – TVOHM

2

Versuchen,

Renderer.material.mainTexture = GetCameraTexture(); 

statt,

Renderer.sharedMaterial.mainTexture = GetCameraTexture(); 
Verwandte Themen