MR版Gyazo
目的
視覚記憶をあとから検索したい
理想的な体験
いまのGyazoというとスクショが目の前に浮かぶ
常に録画しておく
問題なければコメントをつけて送信する
コメントは自然言語でつけられる
ハッシュタグの予測からタップで選択できる
code:tasxtxt
x Set Up Unity Project 1h / 1h 38m 51s 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
code:.gitignore
# 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
https://gyazo.com/937d0e19050d6f9ba3f126dcb9f958ca
b. グラフィクスAPIの使用順序を手動で選んで設定するため、[Auto Graphics API (自動グラフィクスAPI)]をクリアします。リニア色空間では、OpenGL ES 3.0またはVulkanが必要です。現在のところOculus QuestでVulkanはサポートされているものの、まだ実験的な段階です。そのため、OpenGL ES 3.0を使用し、これを最初のグラフィックスAPIとして順序を設定するよう強くおすすめします
https://gyazo.com/0d26c87ee9efb33df0fad232cae1f57a
https://gyazo.com/49fefaa9632e4a89dbba46d945a983d3
d. アプリのリリースバージョンでのエラーチェックをスキップするため、[Low Overhead Mode (低オーバーヘッドモード)]を選択します。これは、OpenGL ES APIを使用するアプリに適用されます。
ここ?
https://gyazo.com/0ed8c1a2c1eaf6694b3297a8ed703347
https://gyazo.com/fcd7dea02ee45384f26b8b6a19894851
よさそう
https://gyazo.com/5da2239168145f8ed4b31657562a1fce
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に聞く
ChatGPT.icon
以下は、UnityでQuest 2のスクリーンショットにアクセスするためのC#コードの例です。このコードは、Quest 2で動作するUnityアプリケーション内で使用できます。
code: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/に保存されることに注意してください。このフォルダーが存在しない場合は、手動で作成する必要があります。
基素.icon
スクリーンショットにアクセスするための権限をUnityで設定する必要はありますか?
ChatGPT.icon
はい、UnityでQuest 2のスクリーンショットにアクセスするためには、WRITE_EXTERNAL_STORAGEの権限が必要です。この権限は、AndroidManifest.xmlファイルに追加することで設定できます。 以下は、AndroidManifest.xmlファイルに権限を追加する例です。このファイルは、UnityプロジェクトのAssets/Plugins/Android/フォルダに作成する必要があります。
code:xml
<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にも聞いておこう
基素.iconUnityでQuest2対応アプリでGyazoを使うコード
ChatGPT.icon
UnityでQuest2対応アプリでGyazoを使うためには、Gyazo APIを使用する必要があります。以下は、UnityでGyazo APIを使用してスクリーンショットを撮影する方法の例です。
1. Gyazo APIのアクセストークンを取得します。
2. UnityにGyazo APIをリクエストするためのHTTPクライアントを追加します。
code:cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Networking;
public class GyazoUploader : MonoBehaviour {
private string accessToken = "YOUR_ACCESS_TOKEN_HERE";
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. スクリーンショットを撮影するために、以下のコードをカメラにアタッチされた別のスクリプトに追加します。
code: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にスクリーンショットがアップロードされます。
注意点として、上記のコードではカメラが画面に表示されている場合にのみスクリーンショットを撮影します。カメラが非表示の場合にスクリーンショットを撮影するには、別の方法を使用する必要があります。
基素.icon
VRにも対応していますか?
ChatGPT.icon
はい、上記のコードはUnityでQuest 2向けのVRアプリでGyazo APIを使用する方法を示しています。
UnityでVRアプリを作成する場合は、通常のアプリと同様に、カメラを使用してVRシーンを描画する必要があります。
この例では、カメラが画面に表示されている場合にスクリーンショットを撮影するために、カメラにアタッチされた別のスクリプトを使用しています。
ただし、VR環境でスクリーンショットを撮影するには、通常のスクリーンショット撮影方法ではうまくいかない場合があります。
VR環境でスクリーンショットを撮影するための正しい方法は、VR SDKのドキュメントに記載されている場合がありますので、それを確認してください。