2017-10-11 1 views
0

Ich mache ein topdown-basiertes 2D-Spiel. In diesem Spiel möchte ich 1 der Wände zu einem Spiegel machen, wie Sie auf this Video sehen können. Jetzt weiß ich, dass das Spiel im Trailer im RPG Maker gemacht wird, aber ich möchte mein Spiel in Unity 3D machen.Einheit - Kann ich einen Spiegel in 2D machen?

Ich habe versucht, eine Kamera direkt neben dem Spiegel zu setzen, ein RenderTexture auf die Kamera zu setzen und diese Textur auf den Sprite zu setzen, aber natürlich ist es nicht möglich, ein RenderTexture in einen Sprite zu konvertieren am Ende arbeiten.

Also meine Frage ist, ist es möglich, einen Spiegel wie im Trailer zu erstellen?

+0

Sie sollten diese Frage bei https://gamedev.stackexchange.com/ – neuhaus

+0

* „ist es nicht möglich, eine RenderTexture zu einem Sprite zu umwandeln“ * Es ist möglich, und Sie sind auf dem richtigen Weg. Bitte posten Sie diesen Code und teilen Sie uns mit, wo Sie steckengeblieben sind. – Programmer

+0

@Programmer Ich habe derzeit keinen Code. Ich dachte, der Spiegel sollte wie eine Minikarte funktionieren, also entschied ich mich, diesem Tutorial zu folgen: www.youtube.com/watch?v=3-CN2DXqJjM&t – FlorisdG

Antwort

1

Es ist möglich, diesen Effekt zu erhalten. Einfach die zweite Kamera an deinen Charakter anschließen und ihn mit deinem Charakter bewegen lassen.

Es ist möglich, RenderTexture in eine Sprite umzuwandeln. Konvertieren Sie zuerst die RenderTexture to Texture2D und dann die Texture2D in Sprite mit der Sprite.Create Funktion.

Es ist besser, die zweite oder gespiegelte Kamera zu deaktivieren und dann mirrorCam.Render() manuell zu verwenden, um es nur bei Bedarf wiederzugeben. Das folgende Skript sollte Ihnen den Einstieg erleichtern. Befestigen Sie es an einem leeren GameObject und weisen Sie dann die Spiegelkamera und das Zielobjekt SpriteRenderer dem Editor zu. Es sollte die Sicht der Kamera auf die SpriteRenderer widerspiegeln. Vergessen Sie nicht, RenderTexture an die Spiegelkamera anzuschließen.

public class CameraToSpriteMirror: MonoBehaviour 
{ 
    public SpriteRenderer spriteToUpdate; 
    public Camera mirrorCam; 

    void Start() 
    { 
     StartCoroutine(waitForCam()); 
    } 

    WaitForEndOfFrame endOfFrame = new WaitForEndOfFrame(); 

    IEnumerator waitForCam() 
    { 
     //Will run forever in this while loop 
     while (true) 
     { 
      //Wait for end of frame 
      yield return endOfFrame; 

      //Get camera render texture 
      RenderTexture rendText = RenderTexture.active; 
      RenderTexture.active = mirrorCam.targetTexture; 

      //Render that camera 
      mirrorCam.Render(); 

      //Convert to Texture2D 
      Texture2D text = renderTextureToTexture2D(mirrorCam.targetTexture); 

      RenderTexture.active = rendText; 

      //Convert to Sprite 
      Sprite sprite = texture2DToSprite(text); 

      //Apply to SpriteRenderer 
      spriteToUpdate.sprite = sprite; 

     } 
    } 

    Texture2D renderTextureToTexture2D(RenderTexture rTex) 
    { 
     Texture2D tex = new Texture2D(rTex.width, rTex.height, TextureFormat.RGB24, false); 
     tex.ReadPixels(new Rect(0, 0, rTex.width, rTex.height), 0, 0); 
     tex.Apply(); 
     return tex; 
    } 

    Sprite texture2DToSprite(Texture2D text2D) 
    { 
     Sprite sprite = Sprite.Create(text2D, new Rect(0, 0, text2D.width, text2D.height), Vector2.zero); 
     return sprite; 
    } 
} 
+1

Dies hat mir sehr geholfen! Vielen Dank – FlorisdG

0

Sie könnten es die gute alte Super Mario 64 Weise tun und die Wand haben, ein Schirm zu sein, der andere Perspektive der Kamera eines anderen Charakters zeigt.

Einheit ist ziemlich gut bei PIP (Picture In Picture) von dem, was ich gehört habe, so kann einen Versuch wert sein.

+0

Ja, das ist, was ich versuche zu tun – FlorisdG

+0

Sorry, dass sollte mehr sorgfältig gelesen haben. Wirklich, die Art, wie Mario gearbeitet hat, war nicht von PIP, der Raum (und Mario) wurde nur kopiert und umgedreht, also im Wesentlichen kontrollierst du zwei Charaktere, nur dass einer umgedreht wird. Kein PIP benötigt, nur ein transparentes Sprite für einen Glaseffekt, und das ist es. Keine zusätzliche Kamera sollte auch benötigt werden – Will

+0

Zusätzlich fand ich diesen Thread: http://adventure-creator.wikia.com/wiki/2D_Mirror/Water_reflexes_(Shader_and_script_by_Hedgefield) – Will

Verwandte Themen