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\<会社名>\<製品名>
に写真が保存される。
ビルドしてQuest本体で実行すると、Quest内部のファイルアプリやDeveloperHubのFileManagerから見ても見つからない!!って思っていたが、Windowsのエクスプローラーで表示したら見つけた
PC\Quest 3\内部共有ストレージ\Android\data\アプリ名\files
そもそもWindowsのエクスプローラーにQuestの内部ストレージが表示されなくてそちら方面から見るのをあきらめていたが、PCにつないだ後Quest内の通知を押してそこから許可したらいい
本当はVRChatみたいに、Quest内部でもアプリ名のフォルダの下に保存されると嬉しいがまあいったんこれでいいや。
関係ないけどQuest本体のスクショ機能で縦横比が変えれるようになってる!!正方形は使いづらかったので嬉しい!