Unity SDK接入实战:iOS与安卓平台

目的

一个android项目中需要用到3D的游戏元素,所以我们打算把一个untiy3d的项目嵌入到android原生项目中,下一篇接unity3d项目嵌入到ios原生项目。
环境配置:
unity2018 (之前测试的unity5.6.x和unity2017也没问题)
android studio3.2

1.unity导出gradle工程

1.准备你们的游戏,或者一个测试的空场景(略)

unity 接入 iossdk unity 接入安卓_AndroidStudio


添加BackToAndroid的按钮,并绑定点击事件(android打开unity后,还可以返回android)

登录后复制


public class UnityToAndroid : MonoBehaviour
{
    public Button backAndroidBtn;
    void Start()
    {
        backAndroidBtn.onClick.AddListener(()=> {
            //退出unity工程,返回android原生
            Application.Quit();
        });
    }
}

2.导出android工程
unity 接入 iossdk unity 接入安卓_AndroidStudio_02


3.得到安卓项目,大概目录结构
unity 接入 iossdk unity 接入安卓_AndroidStudio_03



2.创建Android原生项目


1.新建android工程,packageName保证和unity工程一致,其他随便

unity 接入 iossdk unity 接入安卓_Unity_04


2.导入Unity工程到android原生项目

选择File->New->Import Module…然后选择unity刚刚导出的gradle工程,导入成功后如下图所示

解释:module是什么意思?

module在AndroidStudio中(一下简称as)代表的类似子工程的意思,一个Project项目可以包含多个module工程,可以向Library类库一样去引用,Eclipse和VS中都有这样的概念,只是叫法不一样。我们现在就是以App为主工程,然后把unity工程当成一个依赖的类库一样去引用。
unity 接入 iossdk unity 接入安卓_AndroidStudio_05

3.配置android工程

这一步非常重要,因为不做任何处理的话,现在相当于是两个工程在一个项目中。互相之间也没法引用。

1.打开Project Stucture,点击app->Dependencies

2.点击右上角+,然后选择Module Dependencies,添加Unity工程的引用

unity 接入 iossdk unity 接入安卓_Unity_06


3.打开并修改unity工程的build.gradle

apply plugin: ‘com.android.application’ 改为 apply plugin: ‘com.android.library’

删除android->defaultConfig->applicationID 'com.xxx.xxx’这一项

如果提示bundle有错误,就删除bundle这一项

如果提示minSdkVersion有问题,根据提示保证主工程和unity工程中的minSdkVersion版本一致,我这里都填写的15。
unity 接入 iossdk unity 接入安卓_Unity嵌入Android_07


4.修改unity工程的AndroidManifest.xml文件

删除Intent-filter标签,否则会和主工程冲突

登录后复制


<intent-filter>
		<action android:name="android.intent.action.MAIN" />
		<category android:name="android.intent.category.LAUNCHER" />
	</intent-filter>
	
	

5.接下来修改一下App主工程的AndroidManifest.xml文件
application标签中添加tools

登录后复制


tools:replace="android:icon,android:theme,android:allowBackup"

然后再manifest标签添加xmlns:tools的引入

登录后复制


xmlns:tools="http://schemas.android.com/tools"

如下图所示

unity 接入 iossdk unity 接入安卓_Android_08


大功告成!!!

此时Sync一下,就没有错误了,并且会发现unity工程的图标变了,现在它已经是一个Library了

unity 接入 iossdk unity 接入安卓_AndroidStudio_09

4.android中吊起unity的Activity

刚才我们新建的android主工程,会有一个MainActivity的类和activity_main的layout,

接下来给MainActicity添加一个按钮,拖拽即可
unity 接入 iossdk unity 接入安卓_unity 接入 iossdk_10

然后修改MainActivity的代码,添加点击按钮跳转到Unity的操作

登录后复制


public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
		
		//添加如下代码
        Button button=(Button)findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //弹出提示框,测试用
                Toast.makeText(MainActivity.this, "Open Unity", Toast.LENGTH_SHORT).show();

                //打开UnityPlayerActivity
                Intent intent = new Intent(MainActivity.this,UnityPlayerActivity.class);
                startActivity(intent);
            }
        });
    }
}

5.最后运行

真机运行,效果如下
unity 接入 iossdk unity 接入安卓_unity 接入 iossdk_11


希望这篇文章能够对你有所帮助。

补充

1.3D人物模型在android项目有肩部衣服穿面,耸肩 的现象。

解决方案:

unity的Edit->Project Setting->Quality设置中,android平台的quality levels选择太低,改为medium或者high,问题解决。

unity 接入 iossdk unity 接入安卓_Unity_12


2.3D人物模型在android项目中,有模型错乱的问题,比问题1严重的多,人的脸部,身体等部位,多出顶点错乱,人物面目全非。但是使用unity单独导出工程,人物没有问题,使用as直接导出unity工程也没有问题。唯独,把untiy工程嵌入android原生工程,会出问题。

解决方案:

unity导出工程的gradle工程中默认会有这个配置

登录后复制


aaptOptions {
    noCompress '.obj','.xml', '.map', '.target', '.proxy','.skeleton','.yml','.ply','.gob','.bin'
}

这段代码防止untiy模型在android平台压缩过度,在untiy工程build.gradle文件加上这段代码,问题解决。

免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删

QR Code
微信扫一扫,欢迎咨询~

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 155-2731-8020
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

手机不正确

公司不为空