トマシープが学ぶ

Unity/VR/AR/デザイン好きのミーハー 記事内容は自分用のメモです

Unity×QuestでRenderTextureの写真をQuestローカルに保存する

RenderTextureの写真をQuestローカルに保存する

Copilotが作ってくれた。

 

    public RenderTexture renderTexture; // 保存するRenderTexture
    public Camera camera; // カメラオブジェクト

 

    void Update()
    {

        // デバッグ用にPキーを押したら撮影
        if (Input.GetKeyDown(KeyCode.P))
        {
            SaveRenderTextureToFile();
        }
    }

   public void SaveRenderTextureToFile()
    {
        // 現在の時間を使ってファイル名を作成
        string fileName = $"SavedImage_{System.DateTime.Now:yyyyMMdd_HHmmss}.png";

        // RenderTextureの内容をTexture2Dにコピー
        RenderTexture currentRT = RenderTexture.active;
        RenderTexture.active = renderTexture;
        Texture2D texture = new Texture2D(renderTexture.width, renderTexture.height, TextureFormat.RGB24, false);
        texture.ReadPixels(new Rect(0, 0, renderTexture.width, renderTexture.height), 0, 0);
        texture.Apply();
        RenderTexture.active = currentRT;

        // Texture2DをPNG形式でエンコード
        byte[] bytes = texture.EncodeToPNG();
        Destroy(texture);

        // ファイルに保存
        string path = Path.Combine(Application.persistentDataPath, fileName);
        File.WriteAllBytes(path, bytes);
        Debug.Log($"Saved RenderTexture to {path}");
    }

 

Editorだと C:\Users\<ユーザー名>\AppData\LocalLow\<会社名>\<製品名>

に写真が保存される。

docs.unity3d.com

ビルドしてQuest本体で実行すると、Quest内部のファイルアプリやDeveloperHubのFileManagerから見ても見つからない!!って思っていたが、Windowsのエクスプローラーで表示したら見つけた

PC\Quest 3\内部共有ストレージ\Android\data\アプリ名\files



そもそもWindowsのエクスプローラーにQuestの内部ストレージが表示されなくてそちら方面から見るのをあきらめていたが、PCにつないだ後Quest内の通知を押してそこから許可したらいい

detail.chiebukuro.yahoo.co.jp


本当はVRChatみたいに、Quest内部でもアプリ名のフォルダの下に保存されると嬉しいがまあいったんこれでいいや。

teratail.com

 

関係ないけどQuest本体のスクショ機能で縦横比が変えれるようになってる!!正方形は使いづらかったので嬉しい!