Android/iOS内嵌Unity开发示例

这篇具有很好参考价值的文章主要介绍了Android/iOS内嵌Unity开发示例。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

前言

背景

正文

环境

新建工程

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 3.5.3

  • Unity version 2019.3.7f1


新建工程

Android Studio 新建项目:

ios 集成unity,YF的Unity世界,android,unity,游戏引擎

Unity 新建项目:

ios 集成unity,YF的Unity世界,android,unity,游戏引擎

最终工程结构如下:

ios 集成unity,YF的Unity世界,android,unity,游戏引擎


Unity导出

  • 通过 Unity 打开 UnityProject

  • 选择 File -> Build Settings -> Switch Android Platform -> Export Project

ios 集成unity,YF的Unity世界,android,unity,游戏引擎

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

ios 集成unity,YF的Unity世界,android,unity,游戏引擎

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

ios 集成unity,YF的Unity世界,android,unity,游戏引擎


Android接入

  • 通过 Android Studio 打开 NativeAndroidApp

  • 选择 setting.gradle 文件添加 unityLibrary module

include ':unityLibrary'
project(':unityLibrary').projectDir = new File('..\\UnityProject\\androidBuild\\unityLibrary')
  • 选择 build.gradle(Module:app)添加 dependencies

dependencies {
    implementation project(':unityLibrary')
    implementation fileTree(dir: project(':unityLibrary').getProjectDir().toString() + ('\\libs'), include: ['*.jar'])
    // 自己项目的配置
}
  • 选择 build.gradle(Module:NativeAndroidApp)

allprojects {
    repositories {
        google()
        jcenter()

        // Add Code
        flatDir {
            dirs "${project(':unityLibrary').projectDir}/libs"
        }
        // End
    }
}
  • 选择 NativeAndroidApp 的 strings.xml 添加

<resources>
    <string name="app_name">NativeAndroidApp</string>
    <string name="action_settings">Settings</string>
    // Add Code
    <string name="game_view_content_description">Game view</string>
    // End
</resources>
  • 点击 ASsync project,可以看到已经多了一个 module

ios 集成unity,YF的Unity世界,android,unity,游戏引擎

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


如何使用

作为Activity

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

ios 集成unity,YF的Unity世界,android,unity,游戏引擎

其中 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://www.toymoban.com/news/detail-787217.html

到了这里,关于Android/iOS内嵌Unity开发示例的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Unity接入IAP内购(Android,IOS)最新流程,第一篇:内购接入

    你好! 这将是一个系列的文章 第一篇 介绍客户端里支付的调起以及购买。 第二篇 介绍后台对购买结果的验证以及发货(IOS)。 第三篇 介绍后台对购买结果的验证以及发货(Android)。 第四篇 介绍后台对内购退单问题的处理(IOS欺诈检测以及欺诈信息反馈)。 我们是用的

    2024年04月13日
    浏览(37)
  • Android内嵌Unity (Activity)

    Unity2019.4.4 AndropidStudio4.2.1 参考文档: Android内嵌Unity并实现互相跳转的实例代码_Android_脚本之家 Android Fragment中加载,嵌套Unity视图_unity 导入并作为fragment_周灬浩的博客-CSDN博客 本文只实现了Activity整个切换过去,而Fragment,这种像h5似的与app共存,目前还未实现,可参考的第二

    2024年01月18日
    浏览(29)
  • 安卓开发内嵌unity

    最近参加了一个比赛,有将unity的画面嵌入到安卓的一个activity中的需求,经过网上求索,得出以下方法。 开发工具版本:unity2022.1.20、android studio2021.3.1 一、在unity中创建工程并导出                   记住勾选Export Project、Development Build选项。尽可能在导出前配置好unit

    2024年02月14日
    浏览(19)
  • Flutter:Android/iOS集成Flutter模块

    一、Android工程集成Flutter模块工程: 1.使用命令创建Flutter模块工程lib_flutter(与Android工程属于同级目录): 2.更新Android工程配置: (1)将Android工程Support V4/V7包替换为AndroidX包,右键点击工程,在弹出菜单中选择 Refactor   Migrate to AndroidX...,然后在左下角弹出的框中,点击Do Refac

    2024年02月06日
    浏览(33)
  • 【Unity嵌入原生IOS,仅退出Unity应用】

    官方的说法是这样的: 调用此方法可完全卸载 Unity,并在 Unity 退出后接收对 UnityFrameworkListener 的回调。Unity 将释放所有内存。 注意:进行此调用后,您将无法在同一进程中再次运行 Unity。可在 AppController 上设置 quitHandler 以覆盖默认进程终止。 所以官方提供了一个卸载的方

    2024年02月11日
    浏览(39)
  • Unity与iOS交互(1)——需要了解的IOS相关知识

    【前言】 以下只是简要介绍,详细的内容需要自己去看链接  【Objective-C基础知识】 .h .m .mm .cpp文件区别 .h是头文件扩展名。头文件包含类,类型,函数和常数的声明,这里的定义一般是Public的 .m是实现文件扩展名。其包含源代码,用于.h文件中的实现,一般是private的。这是

    2024年02月12日
    浏览(32)
  • Unity iOS打包发布流程

    一、版本说明 Unity 2020.3.33f MacOS Monterey 12.3.1 XCode 13.4.1 二、开发者账号 苹果开发者平台 https://developer.apple.com/ 类型 用途 限制 费用 个人开发者账号 用于个人开发者进行开发和向AppStore上传应用 只能有一个开发者,调试设备受限 $99 公司开发者账号 用于公司或团队进行开发和

    2024年01月16日
    浏览(30)
  • 【Unity3d】Unity与iOS之间通信

    在Unity开发或者SDK开发经常遇到Unity与移动端原生层之间进行通信,这里把它们之间通信做一个整理。 关于Unity与Android之间通信,参考【Unity3d】Unity与Android之间通信 Unity调用Objective-C 主要分三个步骤: (一)、在xcode中定义要被unity调用的函数 新建一个类,名字可以任意,比如

    2024年02月01日
    浏览(40)
  • Unity_ios打包流程

    1.Apple开发者账号、App ID。 2.安装有XCode的Mac电脑。 3.Ios移动设备。 安装Unity ios模块项目。 项目Project Setting/Player/Architecture设置为ARM64(Xcode14之前支持ARMv7和ARMv64,Xcode14之后不支持ARMv7)。 项目Project Setting/Player/Bundle Identifier应设置与之后打包证书上的一致,其为app唯一标识,

    2024年01月24日
    浏览(30)
  • iOS开发集成framework、Bundle文件获取

    有些时候,我们开发的SDK并不需要对外隐藏,那么就可以将源码都打包给对方,也可以集成cocopods仓库,供外部使用。但有些时候,出于版权等原因,我们提供的代码只希望对方能够正常使用,却不希望对方看到内部的实现细节,就像苹果官方一样,给我们开发者提供的API只

    2024年02月12日
    浏览(25)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包