2014-01-20 10 views
6

私は現在、Android用の小さなARアプリケーションを開発中で、Unity3dをアクティビティに統合するという問題に直面しています。要件は、私がAndroid UIをいくつか提示できる必要があることを示しています。メニューとアクションバーを表示し、ターゲットが検出されたときにUnity3dで作成されたモデルを表示するカメラビュー。Unity3dビューをAndroidアクティビティに統合

私は多くの助けをしたリンクを見つけました:Unity3d forums。そこにいたユーザーの1人が私が今でも持っているのと同じ質問をしましたが、適切な答えが得られませんでした。

問題:

私は基本的にホワイトキューブで小さなUnity3dプロジェクトを持って、私のAndroidの活動の一つで、それを表示しようとしています。 onCreate()メソッドにアクティビティにsetContentView()が含まれていない場合はモデルが正常に見えますが、XMLファイルでレイアウトを指定できません。

setContentView()メソッドを追加すると、キューブが表示されますが、サイズは非常に小さく、実際にサイズを変更する方法はないようです。

XMLファイル:アクティビティ・インプリメンテーションの

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/unityView" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" > 
</FrameLayout> 

第1版:

public class HomeActivity extends UnityPlayerActivity { 

     UnityPlayer unityPlayer; 

     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     } 
    } 

、そして得られたスクリーンショット:アクティビティ・インプリメンテーションのenter image description here

第二版:

public class HomeActivity extends UnityPlayerActivity { 

     UnityPlayer unityPlayer; 

     @Override 
     protected void onCreate(Bundle savedInstanceState) { 

      super.onCreate(savedInstanceState); 

      setContentView(R.layout.activity_home); 
      unityPlayer = new UnityPlayer(this); 
      int glesMode = unityPlayer.getSettings().getInt("gles_mode", 1); 
      unityPlayer.init(glesMode, false); 

      FrameLayout layout = (FrameLayout) findViewById(R.id.unityView); 
      LayoutParams lp = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT); 
      layout.addView(unityPlayer.getView(), 0, lp); 
     } 

    @Override 
    public void onWindowFocusChanged(boolean hasFocus) { 

     super.onWindowFocusChanged(hasFocus); 
     unityPlayer.windowFocusChanged(hasFocus); 

    } 
} 

、そして得られたスクリーンショット:

enter image description here

ことがあり、それを修正する方法を、なぜ誰も私に説明してもらえますか?

答えて

3

私はまだそれがなぜそれのように動作するのかわかりませんが、私はそれを修正する方法を見つけました。

onCreate()で単にsetContentView()を使用する代わりに、onResume()を拡張し、その方法で再利用可能なすべてのビューを調べて、UnityPlayerオブジェクトの親ビューを検索します。それが見つかると、レイアウトやその他のビューを膨張させてその親ビューに追加することができます。ここで

は、コード例とのリンクだ - 私は私のアプリを動作させるために、これを使用しました:https://developer.vuforia.com/resources/dev-guide/extending-unity-android-activity-and-adding-custom-views-eclipse

編集:ここに私の解決策を示すコードスニペットがあります。

@Override 
public void onResume() { 

    super.onResume(); 

    if (unityPlayer == null) { 

     View rootView = findViewById(android.R.id.content); 
     unityPlayer = findUnityPlayerView(rootView); 

     if (unityPlayer != null) { 

      ViewGroup unityPlayerParentView = (ViewGroup)(unityPlayer.getParent()); 

      View mainHomeView = getLayoutInflater().inflate(R.layout.activity_main, null); 
      LayoutParams layoutParams = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT); 
      unityPlayerParentView.addView(mainHomeView, layoutParams); 

     } 
    } 
} 

private UnityPlayer findUnityPlayerView(View view) { 

    if (view instanceof UnityPlayer) { 

     return (UnityPlayer) view; 
    } 
    if (view instanceof ViewGroup) { 

     ViewGroup childrenViews = (ViewGroup) view; 

     for (int i = 0; i < childrenViews.getChildCount(); i++) { 

      UnityPlayer foundView = findUnityPlayerView(childrenViews.getChildAt(i)); 

      if (foundView != null) { 

       return foundView; 
      } 
     } 
    } 

    return null; 
} 
+0

Unity3dフォーラムは、あなたが言及したことをリンクし、私はUnity5 に私のプロジェクトを実行すると、私は見つけることができませんそれはまた、どのように伝え、地域のフォルダをステージングからファイルをコピーするように要求されますEclipseでそれを使用する。私はAndroid Studioを使用しています。 Unity5とAndroid Studioで同じことを行う方法に関するアップデートガイドを提供できますか? – Ishan

関連する問題