generated at
MR版Gyazo
目的
視覚記憶をあとから検索したい

理想的な体験
いまのGyazoというとスクショが目の前に浮かぶ
常に録画しておく
問題なければコメントをつけて送信する
コメントは自然言語でつけられる
ハッシュタグの予測からタップで選択できる


tasxtxt
[x] Set Up Unity Project 1h / 1h 38m 51s [x] setup git [x] setup gitignore [x] try unity chan Research Passthrough API 1h / 58m 57s Get image from Passthrough API Upload to Gyazo from Quest App Integrate these apps capture Passthrough and upload to gyazo investigate language input - standalone or server(postprocess)




PoC
仕様
ボイスコマンドでGyazoれる
その場でテキストを入れて確認できる
コメントをその場で入れられないと困る
部屋の位置情報をメタ情報に入れられる
台所
風呂場
寝室


Unity setup
Make Git Repository
.gitignore
/[Aa]ssets/[Oo]culus # Ignore these Oculus files because they store your secret App ID Assets/Resources/OvrAvatarSettings.asset Assets/Resources/OculusPlatformSettings.asset Assets/Resources/OculusPlatformSettings.asset.meta
setup Unity Project settings
>b. グラフィクスAPIの使用順序を手動で選んで設定するため、[Auto Graphics API (自動グラフィクスAPI)]をクリアします。リニア色空間では、OpenGL ES 3.0またはVulkanが必要です。現在のところOculus QuestでVulkanはサポートされているものの、まだ実験的な段階です。そのため、OpenGL ES 3.0を使用し、これを最初のグラフィックスAPIとして順序を設定するよう強くおすすめします
>d. アプリのリリースバージョンでのエラーチェックをスキップするため、[Low Overhead Mode (低オーバーヘッドモード)]を選択します。これは、OpenGL ES APIを使用するアプリに適用されます。
ここ?
よさそう
Oculus Developer Hubの動画録画機能が動かない



need to research
スクショをアプリに渡す方法は?
iOSのシェアボタンみたいなものがなさそう
パススルーの画像をスクショする方法は?
Passthrough APIはつかえる?
>An app cannot access images or videos of a user’s physical environment. Instead, the application creates a special Passthrough layer.
おわ〜
Quest Proのpassthroughの録画はできるはずなので保存したものをアップすることにしよう
アプリから画像フォルダアクセスする方法は?
>スクリーンショットを撮るには
アクセスするには?
ググってもでない
ChatGPTに聞く
ChatGPT
以下は、UnityでQuest 2のスクリーンショットにアクセスするためのC#コードの例です。このコードは、Quest 2で動作するUnityアプリケーション内で使用できます。
cs
using UnityEngine; using UnityEngine.XR; public class ScreenshotController : MonoBehaviour { private string screenshotFilename; // Start is called before the first frame update void Start() { // Quest 2では、スクリーンショットは"/sdcard/oculus/screenshots/"フォルダに保存されます。 screenshotFilename = "/sdcard/oculus/screenshots/screenshot.png"; } // Update is called once per frame void Update() { // もしOculus Quest 2のスクリーンショットボタンが押された場合 if (Input.GetKeyDown(KeyCode.JoystickButton0)) { // スクリーンショットを撮影する StartCoroutine(TakeScreenshot()); } } private IEnumerator TakeScreenshot() { // カメラのレンダリングを完了するために、1フレーム待機する yield return new WaitForEndOfFrame(); // スクリーンショットを撮影する ScreenCapture.CaptureScreenshot(screenshotFilename); // スクリーンショットが保存されるまで少し待機する yield return new WaitForSeconds(1f); // スクリーンショットを表示する Debug.Log("Screenshot captured: " + screenshotFilename); } }
このコードでは、スクリーンショットを撮影するために Input.GetKeyDown(KeyCode.JoystickButton0) を使用しています。これは、Quest 2コントローラーのAボタンに相当します。他のボタンを使用する場合は、キーコードを変更してください。また、 /sdcard/oculus/screenshots/ に保存されることに注意してください。このフォルダーが存在しない場合は、手動で作成する必要があります。
基素
スクリーンショットにアクセスするための権限をUnityで設定する必要はありますか?
ChatGPT
はい、UnityでQuest 2のスクリーンショットにアクセスするためには、 WRITE_EXTERNAL_STORAGE の権限が必要です。この権限は、AndroidManifest.xmlファイルに追加することで設定できます。
以下は、AndroidManifest.xmlファイルに権限を追加する例です。このファイルは、Unityプロジェクトの Assets/Plugins/Android/ フォルダに作成する必要があります。
xml
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.yourcompany.yourgame"> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <application ... </application> </manifest>
上記の例では、 <uses-permission> 要素を使用して、 WRITE_EXTERNAL_STORAGE 権限を設定しています。これにより、アプリケーションはスクリーンショットを保存するために必要な権限を持つことになります。
フェイストラッキング





Mono or IL2CPP?
>(5) 「Scripting Backend」に「IL2CPP」を指定し、「Target Architectures」で「ARM64」のみチェック。
this step doesn't show in official document.


ChatGPTにも聞いておこう
基素UnityでQuest2対応アプリでGyazoを使うコード
ChatGPT
UnityでQuest2対応アプリでGyazoを使うためには、Gyazo APIを使用する必要があります。以下は、UnityでGyazo APIを使用してスクリーンショットを撮影する方法の例です。
1. Gyazo APIのアクセストークンを取得します。
2. UnityにGyazo APIをリクエストするためのHTTPクライアントを追加します。
cs
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.Networking; public class GyazoUploader : MonoBehaviour { private string accessToken = "YOUR_ACCESS_TOKEN_HERE"; private string uploadUrl = "https://upload.gyazo.com/api/upload"; public void UploadScreenshot(byte[] screenshotBytes) { StartCoroutine(UploadScreenshotCoroutine(screenshotBytes)); } IEnumerator UploadScreenshotCoroutine(byte[] screenshotBytes) { UnityWebRequest request = new UnityWebRequest(uploadUrl, UnityWebRequest.kHttpVerbPOST); request.SetRequestHeader("Authorization", "Bearer " + accessToken); request.SetRequestHeader("Content-Type", "image/png"); request.uploadHandler = new UploadHandlerRaw(screenshotBytes); request.downloadHandler = new DownloadHandlerBuffer(); yield return request.SendWebRequest(); if (request.result == UnityWebRequest.Result.Success) { Debug.Log("Upload successful!"); Debug.Log(request.downloadHandler.text); } else { Debug.Log("Upload failed."); } } }
3. GyazoUploaderスクリプトをカメラにアタッチします。
4. スクリーンショットを撮影するために、以下のコードをカメラにアタッチされた別のスクリプトに追加します。
cs
using System.Collections; using System.Collections.Generic; using UnityEngine; public class ScreenshotTaker : MonoBehaviour { public GyazoUploader gyazoUploader; void Update() { if (Input.GetKeyDown(KeyCode.Space)) { StartCoroutine(TakeScreenshot()); } } IEnumerator TakeScreenshot() { yield return new WaitForEndOfFrame(); Texture2D screenshotTexture = new Texture2D(Screen.width, Screen.height, TextureFormat.RGB24, false); screenshotTexture.ReadPixels(new Rect(0, 0, Screen.width, Screen.height), 0, 0); screenshotTexture.Apply(); byte[] screenshotBytes = screenshotTexture.EncodeToPNG(); gyazoUploader.UploadScreenshot(screenshotBytes); } }
これで、Spaceキーを押すとGyazoにスクリーンショットがアップロードされます。
注意点として、上記のコードではカメラが画面に表示されている場合にのみスクリーンショットを撮影します。カメラが非表示の場合にスクリーンショットを撮影するには、別の方法を使用する必要があります。
基素
VRにも対応していますか?
ChatGPT
はい、上記のコードはUnityでQuest 2向けのVRアプリでGyazo APIを使用する方法を示しています。
UnityでVRアプリを作成する場合は、通常のアプリと同様に、カメラを使用してVRシーンを描画する必要があります。
この例では、カメラが画面に表示されている場合にスクリーンショットを撮影するために、カメラにアタッチされた別のスクリプトを使用しています。
ただし、VR環境でスクリーンショットを撮影するには、通常のスクリーンショット撮影方法ではうまくいかない場合があります。
VR環境でスクリーンショットを撮影するための正しい方法は、VR SDKのドキュメントに記載されている場合がありますので、それを確認してください。