团结 - 我可以在2D制作镜子吗?

时间:2017-10-11 12:07:20

标签: c# unity3d 2d

我正在做一个自上而下的基于图标的2D游戏。在这个游戏中,我想把一面墙变成镜子,就像你可以在this视频上看到的那样。现在,我知道预告片中的游戏是在RPG Maker中制作的,但我想在Unity 3D中制作我的游戏。

我试图在镜子旁边设置一个相机,在相机上添加一个RenderTexture并在Sprite上设置该纹理,但当然不可能将RenderTexture转换为Sprite,所以这并没有结束工作。

所以我的问题是,是否可以在预告片中创建一个镜像?

2 个答案:

答案 0 :(得分:1)

有可能获得这种效果。只需将第二个相机放在角色的父母身上,然后让它与你的角色一起移动。

可以将RenderTexture转换为Sprite。首先,转换RenderTexture to Texture2D,然后使用Sprite.Create函数将Texture2D转换为Sprite

最好禁用第二台或镜像相机,然后使用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 :(得分:0)

你可以用漂亮的旧超级马里奥64方式做到这一点,并让墙壁成为一个屏幕,显示另一个相机对另一个角色的看法。

Unity从我所听到的PIP(画中画)非常擅长,所以可能值得一试。