2017-10-11 19 views
0

私はトップダウンのタイルベースの2Dゲームを作っています。このゲームでは、私はthisビデオで見ることができるように、1つの壁を鏡にしたいと思います。今、トレーラーのゲームはRPG Makerで作られていますが、私はUnity 3Dで自分のゲームを作りたいと思っています。ユニティ - 2Dでミラーを作ることはできますか?

ミラーのすぐ隣にカメラを設定しようとしましたが、レンダリングテクスチャをカメラに追加し、そのテクスチャをスプライトに設定しましたが、RenderTextureをスプライトに変換することはできません最終的に働く。

私の質問は、トレーラーのようなミラーを作成することは可能ですか?

+0

あなたは*ことが可能です*「スプライトにRenderTextureを変換することはできません」とあなたは正しい軌道に乗っているhttps://gamedev.stackexchange.com/ – neuhaus

+0

でこの質問をする必要があります。そのコードを掲示し、あなたがどこにいるのか教えてください。 – Programmer

+0

@Programmer私は現在、コードを持っていません。私はミラーがミニマップのように動作するはずだと思ったので、このチュートリアルに従うことにしました:www.youtube.com/watch?v=3-CN2DXqJjM&t – FlorisdG

答えて

1

その効果を得ることができます。あなたのキャラクターに2番目のカメラを親にして、それをあなたのキャラクターと一緒に動かしてみましょう。

RenderTextureSpriteに変換することは可能です。まず、RenderTexture to Texture2Dを変換してTexture2DSpriteに変換し、Sprite.Create機能を使用します。

第2カメラまたはミラーカメラを無効にしてから、mirrorCam.Render()を使用して手動でレンダリングしてください。以下のスクリプトはあなたを始めさせるはずです。それを空のGameObjectにアタッチし、ミラーカメラとターゲットをSpriteRendererにエディタから割り当て、カメラが見ているものをSpriteRendererに反映させる必要があります。 RenderTextureをミラーカメラに差し込むことを忘れないでください。

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

これは私を助けてくれました!ありがとう – FlorisdG

0

良い古いスーパーマリオ64の方法で、壁を別のキャラクターの別のカメラの視点を示す画面にすることができます。

ユニティは、私が聞いたことからPIP(ピクチャーインピクチャーズ)でかなり良いので、ショットに値するかもしれません。

+0

ええ、それは私がやろうとしているものです。 – FlorisdG

+0

ごめんなさい、もっと慎重に読んでください。 実際には、Marioの働き方はPIPではなく、ルーム(とMario)はちょうどコピーされて反転していたので、基本的に2人のキャラクターをコントロールしています。 PIPは必要ありません。ガラス効果のための透明なスプライトだけです。そうです。余分なカメラは必要ありません – Will

+0

また、私はこのスレッドを発見しました:http://adventure-creator.wikia.com/wiki/2D_Mirror/Water_reflections_(Shader_and_script_by_Hedgefield) – Will

関連する問題