Integrate Unity3d view into Android activity

前端 未结 1 478
名媛妹妹
名媛妹妹 2020-12-15 12:30

I\'m currently working on a small AR app for Android and am facing the problem of integrating Unity3d into an activity. The requirements indicate that I need to be able to p

相关标签:
1条回答
  • 2020-12-15 13:04

    While I still don't know why it works like that, I've found a way of fixing it.

    Instead of simply using setContentView() in onCreate(), extend onResume() and in that method recursively look through all the available views to find the parent view of the UnityPlayer object. Once that's found, layouts and other views can be inflated and added to that parent view.

    Here's the link with a code example - I've used this to make my app work: https://developer.vuforia.com/resources/dev-guide/extending-unity-android-activity-and-adding-custom-views-eclipse

    Edit: Here's a code snippet showing my solution.

    @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);
    
            }
        }
    }
    

    and

    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 讨论(0)
提交回复
热议问题