私はすでにこれに 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# を使用するのは初めてです。
前もって感謝します