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

 添加BackToAndroid的按钮,并绑定点击事件(android打开unity后,还可以返回android)
public class UnityToAndroid : MonoBehaviour
{
    public Button backAndroidBtn;
    void Start()
    {
        backAndroidBtn.onClick.AddListener(()=> {
            //退出unity工程,返回android原生
            Application.Quit();
        });
    }
}
2.导出android工程
 3.得到安卓项目,大概目录结构
1.新建android工程,packageName保证和unity工程一致,其他随便

 2.导入Unity工程到android原生项目
 选择File->New->Import Module…然后选择unity刚刚导出的gradle工程,导入成功后如下图所示
 解释:module是什么意思?
 module在AndroidStudio中(一下简称as)代表的类似子工程的意思,一个Project项目可以包含多个module工程,可以向Library类库一样去引用,Eclipse和VS中都有这样的概念,只是叫法不一样。我们现在就是以App为主工程,然后把unity工程当成一个依赖的类库一样去引用。
这一步非常重要,因为不做任何处理的话,现在相当于是两个工程在一个项目中。互相之间也没法引用。
 1.打开Project Stucture,点击app->Dependencies
 2.点击右上角+,然后选择Module Dependencies,添加Unity工程的引用

 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。
 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"
如下图所示

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

刚才我们新建的android主工程,会有一个MainActivity的类和activity_main的layout,
 接下来给MainActicity添加一个按钮,拖拽即可
然后修改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);
            }
        });
    }
}
真机运行,效果如下
 希望这篇文章能够对你有所帮助。
1.3D人物模型在android项目有肩部衣服穿面,耸肩 的现象。
 解决方案:
 unity的Edit->Project Setting->Quality设置中,android平台的quality levels选择太低,改为medium或者high,问题解决。

 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文件加上这段代码,问题解决。
免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删