Android Fragment中加载,嵌套Unity视图

最近发现android 程序上面嵌套unity视图挺火 我目前公司做这个项目 也是属于android Fragment嵌套unity的视图 我把嵌套的步骤分享给大家 … 以及与unity3D的交互也分享出来…

第一步 ;公司做unity开发的先将unity程序导出来(导成android项目)
具体如下图
这里写图片描述

把assets文件夹拷贝到自己项目的main文件夹下 与java文件夹同级(如下图)

这里写图片描述

然后把第一张截图(unity导出的文件夹)的libs文件夹下的{armeabi-v7a,x86,unity-classes}将这三个拷贝到自己项目的libs文件夹下(如下图)

这里写图片描述

下面开始就是代码了
第二步: 创建一个类

My_unity

public class My_unity {

	public static UnityPlayer mUnityPlayer;

	public My_unity() {
		
	}

}

在主activity里配置 也就是自己想要嵌套的Fragment的主activity

在MainActivity onCreate方法里加入

    My_unity.mUnityPlayer = new UnityPlayer(this);
    getWindow().setFormat(PixelFormat.RGBX_8888);

在其他生命周期里加入

    @Override
    protected void onDestroy() {
        My_unity.mUnityPlayer.quit();
        super.onDestroy();
    }
    @Override
    protected void onPause() {
        super.onPause();
        Constants.mUnityPlayer.pause();
    }


    @Override
    protected void onResume() {
        super.onResume();
        My_unity.mUnityPlayer.resume();
    }


    @Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
        My_unity.mUnityPlayer.configurationChanged(newConfig);
    }


    @Override
    public void onWindowFocusChanged(boolean hasFocus) {
        super.onWindowFocusChanged(hasFocus);
        My_unity.mUnityPlayer.windowFocusChanged(hasFocus);
    }


    @Override
    public boolean dispatchKeyEvent(KeyEvent event) {
        if (event.getAction() == KeyEvent.ACTION_MULTIPLE)
            return My_unity.mUnityPlayer.injectEvent(event);
        return super.dispatchKeyEvent(event);
    }


    @Override
    public boolean onKeyUp(int keyCode, KeyEvent event) {
        return My_unity.mUnityPlayer.injectEvent(event);
    }


    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        return My_unity.mUnityPlayer.injectEvent(event);
    }
    @Override
    public boolean onTouchEvent(MotionEvent event) {
        return My_unity.mUnityPlayer.injectEvent(event);
    }

   
    public boolean onGenericMotionEvent(MotionEvent event) {
        return My_unity.mUnityPlayer.injectEvent(event);
    }   

要展示Unity的Fragment的中写一下代码

  View playerView;
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle            savedInstanceState) {
        // TODO Auto-generated method stub
    
        playerView = My_unity.mUnityPlayer.getView();
                                             //具体参数 跟自己公司Unity开发人员协商
                                             //第一个参数是unity那边的挂载脚本名字 
                                             //第二个参数是 unity提供的方法名
                                             //第三个参数是 自己要给unity传的值 
        My_unity.mUnityPlayer.UnitySendMessage("Main Camera","Id","1");
      
        return playerView;
    }

最后一步:
千万不要忘记 在app文件夹下的 build.gradle里配置 sourceSets
(sourceSets和 buildTypes 同级)

   sourceSets {
        main {
            //unity3D 
            jniLibs.srcDirs = ['libs', 'libs-sdk']
        }
    }

这样运行 就ok了… 下面我放一张效果图…(红线里面都是unity视图)
这里写图片描述

在这里插入图片描述

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
以下是一个例子: 1. 在res/layout文件夹创建一个名为fragment_webview.xml的布局文件,用于包含WebView。 ``` <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <WebView android:id="@+id/webview" android:layout_width="match_parent" android:layout_height="match_parent" /> <ProgressBar android:id="@+id/progressBar" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" /> </LinearLayout> ``` 2. 在Fragment,声明WebView和ProgressBar,并在onCreateView方法将它们实例化并添加到布局。 ``` public class WebViewFragment extends Fragment { private WebView mWebView; private ProgressBar mProgressBar; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_webview, container, false); mWebView = view.findViewById(R.id.webview); mProgressBar = view.findViewById(R.id.progressBar); mWebView.setWebViewClient(new MyWebViewClient()); mWebView.loadUrl("https://www.example.com"); return view; } private class MyWebViewClient extends WebViewClient { @Override public void onPageStarted(WebView view, String url, Bitmap favicon) { mProgressBar.setVisibility(View.VISIBLE); } @Override public void onPageFinished(WebView view, String url) { mProgressBar.setVisibility(View.GONE); } } } ``` 3. 在WebViewClient重写onPageStarted和onPageFinished方法,以显示和隐藏ProgressBar。 这样,当WebView开始加载页面时,ProgressBar将显示在心,并在页面加载完成后自动消失。 注意:需要在AndroidManifest.xml文件添加Internet权限,以便WebView可以加载网页。 ``` <uses-permission android:name="android.permission.INTERNET" /> ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值