设为首页 加入收藏

TOP

Unity Android Studio 混合开发实践(Unity工程导入Android项目进行开发)(二)
2023-09-09 10:25:31 】 浏览:357
Tags:Unity Android Studio 程导入 项目进
kListener(new AndroidNativeAdCallbackListener());

注:以上的 GetUnityConnector() 方法表示在C#中获取aar文件中的UnityConnector,具体代码如下:

	//C#中获取UnityConnector
    public static AndroidJavaObject GetUnityConnector() {
        AndroidJavaClass unityConnector = new AndroidJavaClass("com.andcash.unity.UnityConnector");
        if (unityConnector == null)
        {
            Debug.Log("GetUnityConnector failed: unityConnector is null");
        }
        AndroidJavaObject instance = unityConnector.CallStatic<AndroidJavaObject>("getInstance");
        if (instance == null)
        {
            Debug.Log("GetUnityConnector failed: instance is null");
        }
        return instance;
    }
	
	//java中 UnityConnector
	private static UnityConnector instance;
	public static UnityConnector getInstance() {
        if (instance == null) {
            instance = new UnityConnector();
        }
        return instance;
    }

实际项目中的方法可能比较多,但是大体上离不开这几种。

参考文章:
https://www.cnblogs.com/zhxmdefj/p/13273560.html
https://blog.csdn.net/u014361280/article/details/91888091
https://blog.csdn.net/qq_33337811/article/details/87815573

这里我没有使用Android调Unity,但是查阅文档可以知道Unity是支持的,它支持你向某个游戏对象发送消息。具体代码如下:

    public void sendMessageToUnity(
            String gameObject,
            String method,
            String value
    ) {
        if (TextUtils.isEmpty(gameObject) || TextUtils.isEmpty(method)) {
            printLog("sendMessageToUnity failed: gameObject or method is empty.");
            return;
        }
        if (value == null) value = "";
        UnityPlayer.UnitySendMessage(gameObject, method, value);
    }

4. 错误处理

从Unity游戏中退出到Android页面时发生了崩溃?

Unity退出游戏后会结束当前运行的进程,所以退出后由于进程被杀导致崩溃。
解决方案:将 com.unity3d.player.UnityPlayerActivity设置为单独一个进程,在清单中添加 android:process=":gameProcess",例如:

<activity
            android:name="com.unity3d.player.UnityPlayerActivity"
            android:configChanges="mcc|mnc|locale|touchscreen|keyboard|keyboardHidden|navigation|orientation|screenLayout|uiMode|screenSize|smallestScreenSize|fontScale|layoutDirection|density"
            android:exported="true"
            android:hardwareAccelerated="false"
            android:launchMode="singleTask"
            android:resizeableActivity="false"
            android:process=":gameProcess"
	    //....

注意:新进程与默认进程之间的数据是默认分隔的,如果想通信的话需要使用进程之间通信。

Unity游戏中的广告展示会黑屏?

这是由于多进程导致,如果你还遇到崩溃那么应该是Android P之后Webview处理多进程导致的。
解决方案:
针对Webview可以在Applicantion中加入:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
            if (packageName != Application.getProcessName()) {
                WebView.setDataDirectorySuffix(Application.getProcessName())
            }
        }

针对广告黑屏,例如我这里使用的是Applovin,那么我可以对它的广告页面添加android:multiprocess="true",例如:

<activity
            android:name="com.applovin.adview.AppLovinFullscreenActivity"
            android:configChanges="fontScale|keyboard|keyboardHidden|locale|orientation|screenLayout|screenSize|smallestScreenSize|uiMode"
            android:exported="false"
            android:hardwareAccelerated="true"
            android:launchMode="singleTop"
            android:screenOrientation="behind"
            android:multiprocess="true"
            />

如果你使用的是Admob,也同理对Admob的具体广告页加入该参数。

该参数的意思是:调用进程uid和组件的uid相同(一个应用的不同进程uid是相同的)则Activity跑在调用进程里面,调用进程是谁,他就跑在那个进程里,换句话说 Activity 可以跑在不同进程里面。

对于android:multiprocess="tr

首页 上一页 1 2 3 下一页 尾页 2/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Gradle 设置全局镜像源 下一篇Android TV屏 开发、RecyclerView..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目