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を使用するアプリに適用されます。
ここ?
よさそう
need to research
スクショをアプリに渡す方法は?
iOSのシェアボタンみたいなものがなさそう
パススルーの画像をスクショする方法は?
>An app cannot access images or videos of a user’s physical environment. Instead, the application creates a special Passthrough layer.
おわ〜
アプリから画像フォルダアクセスする方法は?
アクセスするには?
ググってもでない
ChatGPTに聞く
以下は、UnityでQuest 2のスクリーンショットにアクセスするためのC#コードの例です。このコードは、Quest 2で動作するUnityアプリケーション内で使用できます。
csusing 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で設定する必要はありますか?
はい、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
権限を設定しています。これにより、アプリケーションはスクリーンショットを保存するために必要な権限を持つことになります。
フェイストラッキング
>(5) 「Scripting Backend」に「IL2CPP」を指定し、「Target Architectures」で「ARM64」のみチェック。
this step doesn't show in official document.
ChatGPTにも聞いておこう
UnityでQuest2対応アプリでGyazoを使うコード
UnityでQuest2対応アプリでGyazoを使うためには、Gyazo APIを使用する必要があります。以下は、UnityでGyazo APIを使用してスクリーンショットを撮影する方法の例です。
1. Gyazo APIのアクセストークンを取得します。
2. UnityにGyazo APIをリクエストするためのHTTPクライアントを追加します。
csusing 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. スクリーンショットを撮影するために、以下のコードをカメラにアタッチされた別のスクリプトに追加します。
csusing 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にも対応していますか?
はい、上記のコードはUnityでQuest 2向けのVRアプリでGyazo APIを使用する方法を示しています。
UnityでVRアプリを作成する場合は、通常のアプリと同様に、カメラを使用してVRシーンを描画する必要があります。
この例では、カメラが画面に表示されている場合にスクリーンショットを撮影するために、カメラにアタッチされた別のスクリプトを使用しています。
ただし、VR環境でスクリーンショットを撮影するには、通常のスクリーンショット撮影方法ではうまくいかない場合があります。
VR環境でスクリーンショットを撮影するための正しい方法は、VR SDKのドキュメントに記載されている場合がありますので、それを確認してください。