文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Android/iOS内嵌Unity开发示例

2023-09-06 15:25

关注

目录

前言

背景

正文

环境

新建工程

Unity导出

Android接入

如何使用

作为Activity

总结

1.Android调用Unity

2.Unity调用Android

3.C/C++“中转站”

参考资料


前言

背景

Unity 与 Android/iOS 交叉开发主要有两种方式,以 Android 为例,一是 Android 生成 jar 或者 aar 包,导入到 unity3d plugin/bin/ 目录下;二是 Unity 导出 Android 工程,在 Android Studio 中作为库继续开发。网上的教程几乎全是第一种方式,而本文主要分析第二种方式。

这种方式可以在移动端的 NativeApp 中以库的形式集成已经写好的 Unity 工程,利用 Unity 游戏引擎便捷的开发手段进行跨平台开发。

Unity官方文档 Unity as a Library integration example to iOS and Android

以下以安卓平台作为示例。


正文

环境


新建工程

Android Studio 新建项目:

Unity 新建项目:

最终工程结构如下:


Unity导出

这时候选择Export可能会提示JDK路径配置出错,没关系我们到 Preference -> Externl Tools 设置路径

现在就可以点击 Export 了,路径选择可以自由选择,这里建议按照官方来


Android接入

include ':unityLibrary'project(':unityLibrary').projectDir = new File('..\\UnityProject\\androidBuild\\unityLibrary')
dependencies {    implementation project(':unityLibrary')    implementation fileTree(dir: project(':unityLibrary').getProjectDir().toString() + ('\\libs'), include: ['*.jar'])    // 自己项目的配置}
allprojects {    repositories {        google()        jcenter()        // Add Code        flatDir {            dirs "${project(':unityLibrary').projectDir}/libs"        }        // End    }}
    NativeAndroidApp    Settings    // Add Code    Game view    // End

现在我们可以直接使用这个 module 里的 java class 了。


如何使用

作为Activity

现在我们的工程包含了两个 module ,一个是新建工程自带的 app,一个是刚才导入的 unityLibrary。点开 unityLibrary 的目录可以看到两个主要的 class

其中 UnityPlayerActivity 是最重要的 class ,我们可以通过这个类在安卓 app 中显示 Unity 的场景。

至于如何使用—— OverrideUnityActivity 则是对 UnityPlayerActivity 用法的一个官方示例,里面的代码也很简单。

import com.unity3d.player.UnityPlayerActivity;public abstract class OverrideUnityActivity extends UnityPlayerActivity{    public static OverrideUnityActivity instance = null;    abstract protected void showMainActivity(String setToColor);    @Override    protected void onCreate(Bundle savedInstanceState)    {        super.onCreate(savedInstanceState);        instance = this;    }    @Override    protected void onDestroy() {        super.onDestroy();        instance = null;    }}

显然官方希望我们在安卓内用一个 Activity 去显示 Unity 渲染的场景,至于这个 Activity ,直接继承 UnityPlayerActivity 就基本完事了,非常简单。

新建一个 Activity,这里命名为 SourceUnityActivity

public class SourceUnityActivity extends UnityPlayerActivity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);    }}

现在只要继承 UnityPlayerActivity 就行了。现在构建 app,进入 SourceUnityActivity 的时候就会显示 Unity 的场景了。


总结

1.Android调用Unity

//向unity发消息UnityPlayer.UnitySendMessage("Main Camera", //gameobject的名字 "ChangeColor", //调用方法的名字 "");//参数智能传字符串,没有参数则传空字符串

2.Unity调用Android

//通过该API来实例化java代码中对应的类AndroidJavaObject jc = new AndroidJavaObject("com.xxx.xxx.UnityPlayer");jo.Call("Test");//调用void Test()方法jo.Call("Text1", msg);//调用string Test1(string str)方法jo.Call("Text2", 1, 2);//调用int Test1(int x, int y)方法

3.C/C++“中转站”

以上的传参方式只能相互传递 string 字符串,少量数据传递时可以使用这种方式,如果是大量数据这样就有点限制了。其实我们可以把C/C++的代码做为一个中转站,实现两边的数据引用与共享。只要在安卓工程加入 NDK 支持和 c++ 源码,就可以在 Unity 端调用了。

其余进阶用法请自行摸索啦哈哈哈,包括Unity中内置插件自控摄像头某些场景的额外编程但不只于此......


参考资料

Unity - Manual: Android Library Projects and Android Archive plug-ins

Unity - Manual: Extend the default Unity activity

Unity - Manual: Native plug-ins for Android

Integration Unity as a library in native Android app - Unity Forum

unity3d - Display Unity Scene as Sub View in android studio - Stack Overflow

来源地址:https://blog.csdn.net/flyTie/article/details/127132130

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-移动开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯