2017-04-27 3 views
0

私はUnityプロジェクトをAndroid Studioプロジェクトにインポートしようとしています。私はすでにアクティビティを管理することでこれを行う方法を知っていますが、他の部分にいくつかのネイティブUIを表示しながら、画面の一部にのみユニティ・シーンを表示するためにフラグメントでそれをしようとしています。 これを実行するには、linkと私のコードに合わせて修正しました。UnityからのwindowsFocusChanged()は私に時々NullPointerExceptionを与えます

public class UnityManagerFragment extends MyFragmentManager { 

    protected UnityPlayer mUnityPlayer; 
    public FrameLayout unityFrameLayout; 

    public UnityManagerFragment() 
    { 

    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
    { 
     mUnityPlayer = new UnityPlayer(getActivity()); 
     View view = inflater.inflate(R.layout.unity_manager_view, container, false); 

     this.unityFrameLayout = (FrameLayout) view.findViewById(R.id.unity_fragment); 
     this.unityFrameLayout.addView(mUnityPlayer.getView(), FrameLayout.LayoutParams.MATCH_PARENT, 
      FrameLayout.LayoutParams.MATCH_PARENT); 

     mUnityPlayer.requestFocus(); 
     mUnityPlayer.windowFocusChanged(true); 
     return view; 
    } 
} 

MyFragmentManagerFragmentsを拡張し、私はこのクラスを作成する前に、実際には、問題が登場し、問題の原因となるものがありません。 私の問題は、mUnityPlayer.windowFocusChanged(true);という行にあり、Unityフラグメントを起動するボタンをクリックするとアプリケーションがクラッシュすることがあります。ログこの教えてください:

Caused by: java.lang.RuntimeException: 
Unable to start activity ComponentInfo{com.example.testfragments/com.example.testfragments.UnityFragmentContainerActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean android.os.Handler.sendMessage(android.os.Message)' on a null object reference at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3124) 
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3233) 
    at android.app.ActivityThread.access$1000(ActivityThread.java:197) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1656) 
    at android.os.Handler.dispatchMessage(Handler.java:102) 
    at android.os.Looper.loop(Looper.java:145) 
    at android.app.ActivityThread.main(ActivityThread.java:6873). 
    at java.lang.reflect.Method.invoke(Native Method) 
    at java.lang.reflect.Method.invoke(Method.java:372) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1404) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1199) 
    Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean android.os.Handler.sendMessage(android.os.Message)' on a null object reference 
    at android.os.Message.sendToTarget(Message.java:416) 
    at com.unity3d.player.UnityPlayer$b.a(Unknown Source) 
    at com.unity3d.player.UnityPlayer$b.a(Unknown Source) 
    at com.unity3d.player.UnityPlayer.windowFocusChanged(Unknown Source) 
    at com.example.testfragments.UnityManagerFragment.onCreateView(UnityManagerFragment.java:43). 
    at android.support.v4.app.Fragment.performCreateView(Fragment.java:2192) 
    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1299) 
    at android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1528) 
    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1595) 
    at android.support.v4.app.BackStackRecord.executeOps(BackStackRecord.java:758) 
    at android.support.v4.app.FragmentManagerImpl.executeOps(FragmentManager.java:2363) 
    at android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2149) 
    at android.support.v4.app.FragmentManagerImpl.optimizeAndExecuteOps(FragmentManager.java:2103) 
    at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2013) 
    at android.support.v4.app.FragmentController.execPendingActions(FragmentController.java:388) 
    at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:607) 
    at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1250) 
    at android.app.Activity.performStart(Activity.java:6588) 
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3087) 
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3233) 
    at android.app.ActivityThread.access$1000(ActivityThread.java:197) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1656) 
    at android.os.Handler.dispatchMessage(Handler.java:102) 
    at android.os.Looper.loop(Looper.java:145) 
    at android.app.ActivityThread.main(ActivityThread.java:6873) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at java.lang.reflect.Method.invoke(Method.java:372) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1404) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1199)  

方法windowsFocusChangedは、私がそのプロジェクトをエクスポートし、私はそれを変更できない場合ユニティによって生成されたユニティclasses.jarから来ています。私はそれ以外の場合は私のシーンを見るのではなく、黒い画面が表示される使用する必要があります。 私は何が起こっているのか分からない、誰かが私を助けることができますか?おかげさまで

+0

解決策を見つけましたか? –

+0

私も同じ問題に直面しています。 –

+0

iOSアプリケーションにUnityを統合する作業が必要だったので、かなりの時間を費やしても、実際には諦めていません。多分私は時間があれば... – Frobei

答えて

0

nullポインタチェックをgetActivity()に設定すると、フラグメントマネージャは、メソッドgetActivity();を使用してnull参照を返します。

+0

こんにちは、お返事ありがとうございます。 新しいNullPointerExceptionを追加して、getActivity()がnullを返すかどうかを確認し、その値をチェックしました。私のアプリがクラッシュしても、常に現在のアクティビティを返します。だから私はそれが問題の原因だとは思わない。 – Frobei

関連する問題