3

私はすでにこれに 1 週​​間を費やしましたが、私は専門家ではないので、何かを見逃したり、不可能なことをしたいとさえ思うかもしれません。

私は Unity プロジェクト (Daydream VR を使用) を持っています。私の目標は、WebView を VR モード (Android 用) の 3D サーフェス (テクスチャとして) で動作させることです。

これは私がこれまでのところです:

まず、Oculus のサンプルから始めました。彼らは、Android MediaPlayer (Android のネイティブ クラス) を Unity テクスチャにリンクするプラグインを作成しました。これは、Android のメディア プレーヤーが既に SurfaceTexture を使用してレンダリングしているため、簡単であり、プラグインを使用して 2 つの間のブリッジを作成しただけです。環境。

これは簡単に機能しました。

次に、この記事を見つけた後: http://www.felixjones.co.uk/neo%20website/Android_View/ そして、同じトリックを使用して Unity でネイティブ Android WebView を取得できる可能性があると推測しました。テクスチャ。

この記事から、必要なのは SurfaceView にレンダリングするカスタム Android WebView だけであり (Android MediaView と非常によく似ています)、それから oculus プラグインも機能すると考えました。

もちろんそんなことはなかったのですが…

ステップ 1/
Unity 用の Android プラグインを作成して、(IMHO) SurfaceView にレンダリングするカスタム WebView を公開しました (ただし、それが完全に正しいかどうかはわかりません)
=> を参照してください。JrmgxWebView.java

ステップ 2/
oculus プラグインをコンパイルしました。小さな変更を加え
て => を参照してください。*.cpp

ステップ 3/
Unity 用に Android プラグインと oculus プラグインの両方をリンクする Unity スクリプトを適合させ、それを 3D キューブ上の単純な Daydream シーンに追加しました (関連付けられたスクリプトを使用)
=>WebviewPlayerSampleWeb.cs

ログを取得しましたが、私が理解していることから、問題は SurfaceView が更新されないことです。カスタム WebView が適切にインスタンス化されていることがわかります。ほとんどのコードは機能し、エラー (クラッシュもありません) はありませんが
、テクスチャは白 (開始値) から黒 (プラグインが初期化されたとき) に変わるだけで、その後は何も起こりません。textureIdプラグインからの着信は 0 または 29 に固定され、新しい値を返すことはありませAndroidSurfaceTexture->GetNanoTimeStamp()ん。

私が遊んだ Java 側では、C++ の部分でand とand を.invalidate()使用し、各メソッド呼び出しをチェックして、すべてが呼び出されたかどうかを確認しました。私はこのコードに多くの時間を費やしているので、試したすべての組み合わせを思い出すことさえできません。.loadUrl().loadData()

これの何が問題なのですか?ここで基本的なポイントが欠けていると確信しています。

ここのほとんどのコードhttps://gist.github.com/jrmgx/019cba403769dda27a6d42e48c461b1b

PS: 仲良くしてください。1 週間が経ちました。Unity、C++、JNI、および C# を使用するのは初めてです。

前もって感謝します

4

0 に答える 0