iis服务器助手广告广告
返回顶部
首页 > 资讯 > 移动开发 >Android/iOS内嵌Unity开发示例
  • 199
分享到

Android/iOS内嵌Unity开发示例

androidunity游戏引擎 2023-09-06 15:09:22 199人浏览 泡泡鱼
摘要

目录 前言 背景 正文 环境 新建工程 Unity导出 Android接入 如何使用 作为Activity 总结 1.Android调用Unity 2.Unity调用Android 3.C/C++“中转站” 参考资料 前言 背景 Un

目录

前言

背景

正文

环境

新建工程

Unity导出

Android接入

如何使用

作为Activity

总结

1.Android调用Unity

2.Unity调用Android

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

参考资料


前言

背景

UnityAndroid/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 新建项目

Unity 新建项目:

最终工程结构如下:


Unity导出

  • 通过 Unity 打开 UnityProject

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

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

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


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 添加

    NativeAndroidApp    Settings    // Add Code    Game view    // End
  • 点击 ASsync project,可以看到已经多了一个 module

现在我们可以直接使用这个 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

--结束END--

本文标题: Android/iOS内嵌Unity开发示例

本文链接: https://www.lsjlt.com/news/397222.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Android/iOS内嵌Unity开发示例
    目录 前言 背景 正文 环境 新建工程 Unity导出 Android接入 如何使用 作为Activity 总结 1.Android调用Unity 2.Unity调用Android 3.C/C++“中转站” 参考资料 前言 背景 Un...
    99+
    2023-09-06
    android unity 游戏引擎
  • Unity嵌入Android项目开发
    目录 前言1 搭建开发环境2 创建Unity项目2.1 新建项目2.2 Unity构建配置2.3 Android环境相关配置2.4 导出Unity库文件 3 创建Android项目3.1 ...
    99+
    2023-10-27
    unity android 游戏引擎 混合开发 局部渲染
  • iOS开发中UITabBarController的使用示例
    首先我们看一下它的view层级图: - (BOOL)application:(UIApplication *)application didFinishLaunchingWith...
    99+
    2022-05-22
    iOS
  • iOS开发之UIMenuController使用示例详解
    目录简介接口介绍使用探索如何创建并显示 UIMenuController实现 Item 点击事件菜单 Item 太多???UIResponderStandardEditActions...
    99+
    2022-11-13
  • android开发教程之wifi开发示例
    1、 WIFI网卡的状态WIFI网卡的状态信息都以整型变量的形式存放在 android.net.wifi.WifiManager 类中,有以下状态:WIFI_STATE_DIS...
    99+
    2022-06-06
    示例 android开发 教程 Android
  • iOS开发学习ViewController使用示例详解
    目录iOS ViewControllerWhat is a View Controller如何定义ViewController.ViewController的类型生命周期回调View...
    99+
    2022-11-13
    iOS开发ViewControlle iOS ViewControlle
  • iOS开发frame和bounds使用示例详解
    目录简述frame和bounds何时使用Frame,何时使用Bounds简述 Frame: 视图的位置和大小使用是父视图的坐标系,所以将视图放置在父级中这一点就很重要。 Bounds...
    99+
    2022-11-13
  • IOS开发Objective-C Runtime使用示例详解
    目录前言一些关键字消息传递 (Messaging)KVO关联对象 (Associated Objects)AOP(Method Swizzling)其它前言 Runtime&nbs...
    99+
    2023-02-13
    Objective-C Runtime iOS开发
  • IOS开发自定义view方法规范示例
    目录前言一、关于自定义View的初始化方法二、关于addSubview三、关于layoutSubviews四、关于frame与bounds总结前言 对于接触业务开发的童鞋,自定义Vi...
    99+
    2022-11-13
  • Android开发中GridView用法示例
    本文实例讲述了Android开发中GridView用法。分享给大家供大家参考,具体如下:Android的GridView控件用于把一系列的空间组织成一个二维的网格显示出来,应用的比较多的就是组合图片显示。下面我就详细讲一个例子。首先写一个类...
    99+
    2023-05-30
    android gridview idv
  • iOS 11开发中iOS11模拟器的示例分析
    这篇文章将为大家详细讲解有关iOS 11开发中iOS11模拟器的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。iOS11模拟器介绍在图1.6或者1.7中所看到的类似于手机的模型就是iOS模拟器。i...
    99+
    2023-06-04
  • android自定义toast(widget开发)示例
    1、Toast控件: 通过查看源代码,发现Toast里面实现的原理是通过服务Context.LAYOUT_INFLATER_SERVICE获取一个LayoutInflater布...
    99+
    2022-06-06
    示例 toast Android
  • 微信内置开发iOS修改键盘换行为搜索的示例分析
    小编给大家分享一下微信内置开发iOS修改键盘换行为搜索的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!在微信中搜索的时候...
    99+
    2022-10-19
  • iOS开发底层探索界面优化示例详解
    目录1、卡顿原理1.1、界面显示原理1.2、界面撕裂1.3、界面卡顿小结2、卡顿检测2.1、CADisplayLink2.2、RunLoop检测2.3、微信matrix2.4、滴滴D...
    99+
    2022-11-13
  • iOS开发探索多线程GCD队列示例详解
    目录引言进程与线程1.进程的定义2.线程的定义3、 进程和线程的关系4、 多线程5、 时间片6、 线程池GCD1、任务2、队列3、死锁总结引言 在iOS开发过程中,绕不开网络请求、下...
    99+
    2022-11-13
  • iOS开发探索多线程GCD任务示例详解
    目录引言同步任务死锁异步任务总结引言 在上一篇文章中,我们探寻了队列是怎么创建的,串行队列和并发队列之间的区别,接下来我们在探寻一下GCD的另一个核心 - 任务 同步任务 void ...
    99+
    2022-11-13
  • iOS 11开发中iOS11应用视图的示例分析
    这篇文章给大家分享的是有关iOS 11开发中iOS11应用视图的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。在iPhone或者iPad中,用户看到的和摸到的都是视图。视图是用户界面的重要组成元素。本节将...
    99+
    2023-06-04
  • Android 矢量室内地图开发实例
    矢量室内地图开发 因为公司项目的需要,需要开发一套室内地图,并实现路线的规划功能。因为之前没做过这方面的开发,相关的资料也比较少,所以只能一个人去摸索。刚开始我是使用一般的位图...
    99+
    2022-06-06
    矢量 地图 Android
  • iOS开发TableView网络请求及展示预加载实现示例
    目录引言传统的上拉加载更多滑动过程中预加载方法1(最简单、高效和最推荐):方法2(自己计算实现,不推荐了):下面是具体实现细节(此细节是针对上述方法2的)总结引言 2022.02.1...
    99+
    2022-11-13
  • Android开发之ToggleButton实现开关效果示例
    本文实例讲述了Android使用ToggleButton实现开关效果的方法。分享给大家供大家参考,具体如下:activity_main.xml<?xml version="1.0" encoding="utf-8"?&...
    99+
    2023-05-30
    android togglebutton roi
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作