今天下午明明要弄明白Android Studio出AAR给Unity用的,结果发现好多问题,小黑心里苦啊,整不明白了呀,让我做Unity吧。。。

好了,废话不给大家多说了,今天小黑给大家带来,如何在IOS原生中,嵌入Unity模块。

目录

IOS(XCode)嵌入Unity模块

版本:

1、Unity端准备自己相应的工程文件。

1、搭建简单场景

2、创建并且编写脚本

3、挂载脚本

4、打包发布Unity为IOS工程

2、双击打开.xcodeproj文件

1、打开Unity-iPhone.xcodeproj文件,并且编写相关交互文件

2、选择证书,Command + R 发布 至真机测试

唠家常

今日无推荐


IOS(XCode)嵌入Unity模块

版本:

1、Unity:2020.3.11f1

2、XCode:12.5(12E262)

1、Unity端准备自己相应的工程文件。

1、搭建简单场景

2、创建并且编写脚本

既然要嵌入嘛,那就肯定有交互的啊,所以我们一次性把交互内容也写了。


using System.Collections;
using System.Collections.Generic;
using System.Runtime.InteropServices;
using UnityEngine;
using UnityEngine.UI;
public class InteractionIos : MonoBehaviour
{
    public Toggle _Open;
    public Button _CallIOS;
    private bool _isOpen;
    private float _rotationValue = 0.005f;
    // Start is called before the first frame update
    void Start()
    {
        Application.targetFrameRate= 60;
        _Open.onValueChanged.AddListener((s) => {
            changeRotation();
        });
        _CallIOS.onClick.AddListener(() =>
        {
            NativeMethod("Unity`s Message.");
        });
    }
    // Update is called once per frame
    void Update()
    {
        if (_isOpen)
        {
            transform.RotateAround(Vector3.up, _rotationValue);
        }
        else
            transform.RotateAround(Vector3.up, -_rotationValue);
    }
    private void changeRotation()
    {
        _isOpen = !_isOpen;
    }
    #region InteractionIOS
#if UNITY_IOS
    /// <summary>
    /// 调用IOS函数
    /// </summary>
    /// <param name="msg">参数</param>
    [DllImport("__Internal")]
    internal extern static void NativeMethod(string msg);
    public void UnityMethod(string msg)
    {
        Debug.LogWarning("来自ios端的参数为:" + msg);
        _Open.isOn = !_Open.isOn;
    }
#endif
    #endregion
  }

3、挂载脚本

注意事项:

①、IOS再与Unity交互中,是通过UnityPlayer.UnitySendMessage(物体名 , 函数名 , 参数 );所以场景中的名字要记住,本文中交互代码挂载到了Cube上,其下边交互函数为ChangeRotation

②、构建框架要选择ARM64

③、我们的代码涉及到[DllImport("__Internal")]时,一定要加上宏定义UNITY_IOS,在XCode中它会进行预编译,如果我们还没有编写相关脚本的时候会给我i们报错,报错内容就是缺少我们所要要交互的函数。

4、打包发布Unity为IOS工程

打包发布为IOS原生开发文件。


2、双击打开.xcodeproj文件

1、打开Unity-iPhone.xcodeproj文件,并且编写相关交互文件

这个具体实现类名没什么要求,但是函数名一定要与你在Unity中定义的相同。

还有就是,如果你是一名IOS工程师,那h文件或者m文件你自己随便定义。

如果和小黑一样,非IOS工程师,那么就怪怪的把m后缀改为mm,这样就可以混写CC++了。

然后用C声明函数,实现函数就好了。

//
//  InteractionIOS.m
//  Unity-iPhone
//
//  Created by h_Admin on 2021/6/19.
// #import <Foundation/Foundation.h>
 
extern "C"{
    void NativeMethod(const char* msg);
} //用来接收Unity传递来的消息
void NativeMethod(const char* msg){
    NSString* str = [[NSString alloc] initWithUTF8String:msg];
    NSLog(@"IOS接到信息为:");
    NSLog(str);
}

到现在,我们Unity    调用    IOS 的内容就全部编写完成了。

接下来我们去写IOS    调用    Unity 的内容;

首先找到Unity在XCode中的主入口,UnityAppController.h/m文件:

然后我们照猫画虎,现在.h文件中声明我们要用到的UI组件和按钮事件

接着我们在.m文件中赋值,实现内容。

代码如下:

.h文件中要添加的内容为:

    //-----------------------------------Unity-----------------------------------
UIView* _TestViewPanel;
UIButton* _ButtonUnity;
//-----------------------------------Unity----------------------------------- //-----------------------------------Unity-----------------------------------
-(void) TestView;
//-----------------------------------Unity-----------------------------------

.m文件中要添加的内容为:

	//在didFinishLaunchingWithOptions函数中:
   _ButtonUnity = [[UIButton alloc] initWithFrame:CGRectMake(10.0f , 20.0f, 90.0f, 20.0f)];
    _ButtonUnity.backgroundColor = UIColor.redColor;
    [_ButtonUnity setTitle: @"button" forState:UIControlStateNormal];
    [_ButtonUnity setTitle: @"OnPress" forState:UIControlStateHighlighted];
    [_ButtonUnity addTarget:self action: @selector((TestView)) forControlEvents:UIControlEventTouchDown];
    
    [_unityView addSubview:_ButtonUnity] //在didFinishLaunchingWithOptions函数外: //Cube为场景中挂载脚本的物体名称,UnityMethod为函数名称,最后边的为参数
-(void) TestView{
    UnitySendMessage("Cube", "UnityMethod", "IOS传递参数了");
}

至此,一切就绪,我们准备打包发布。


2、选择证书,Command + R 发布 至真机测试

于是XCode会提示信息:Could not launch “XXXXX

因为当我们的软件第一次发布至手机时,手机系统会提示:不受信任的开发者,我们需要去设置一下。

如何设置?在手机 设置 -> 通用 -> 设备管理 -> 信任

现在,我们接着Command + R发布,于是成功了!

让我们来看看结果

通过代码我们知道,红色背景button按钮为IOS原生按钮,而后方的Unity Call IOS 为Unity的UGUI,我们分别点击。

红色区域框选的为Unity给IOS发消息

蓝色区域框选的为IOS给Unity发消息

至此,Unity嵌入IOS原生,已圆满完成。

唠家常

  • 小黑的今日分享结束啦,小伙伴们你们get到了么,你们有没有更好的办法呢,可以评论区留言分享,也可以加小黑的QQ:841298494,大家一起进步。

今日无推荐

IOS(XCode)嵌入Unity模块的更多相关文章

  1. iOS端给unity发送消息,实现两者交互。

    上一篇我们简单说了一下unity发消息给iOS端.现在我们就来说一下iOS端给unity发送消息的简单使用. 首先iOS端做得事情其实很简单就一句话,直接上代码 /** * 第一个参数:是unity那 ...

  2. [转]phonegap 2.9 IOS Xcode 搭建环境

    phonegap 2.9 IOS Xcode 搭建环境   一:下载phoneGap2.9和安装Xcode5(目前最新版) 选择2.9是因为3.0以上坑爹版本编译神马的要在有网络情况. 二: 下载ph ...

  3. iOS Xcode及模拟器SDK下载

    原文: Xcode及模拟器SDK下载 如果你嫌在 App Store 下载 Xcode 太慢,你也可以选择从网络上下载: Xcode下载(Beta版打的包是不能提交到App Store上的) 绝对官方 ...

  4. iOS/Xcode异常:no visible @interface for XXX declares the selector YYY

    在iOS/Xcode开发过程中,出现如下异常信息: no visible @interface for XXX declares the selector YYY 分析原因: There are lo ...

  5. [HMLY]6.iOS Xcode全面剖析

    一.创建一个新工程 1.第一步打开Xcode,找到Xcode程序图标并点击 2.如下界面,我们点击新建一个项目,即第二项 (1).Get started with a playground playg ...

  6. iOS Xcode全面剖析

    链接:http://www.jianshu.com/p/3c8527898e84 一.创建新一个工程二.Xcode界面详细介绍三.Xcode菜单详解四.Xcode快捷键介绍五.结语六.参考资料 前言 ...

  7. iOS—Xcode 7真机测试

    Xcode 7真机测试详解 1.准备 注意:一定要让你的真机设备的系统版本和app的系统版本想对应,如果不对应就会出现一个很常见的问题:could not find developer disk im ...

  8. iOS XCode启用/关闭Clang Warnings

    前言:warnings是编码中很重要的一个环节,编译器给出合理的warning能帮助开发者找到自己代码的问题,防止很多bug产生.  默认用XCode创建一个工程,会自动开启一些重要的warnings ...

  9. iOS - Xcode 配置

    1.Xcode 配置 1.1 OS X 1)main 文件注释修改路径: /Applications(应用程序) ▸ Xcode.app ▸ Contents ▸ Developer ▸ Librar ...

  10. iOS之小功能模块--彩虹动画进度条学习和自主封装改进

    前言: 首先展示一下这个iOS小示例的彩色进度条动画效果: 阅读本文先说说好处:对于基础不好的读者,可以直接阅读文末尾的"如何使用彩虹动画进度条"章节,然后将我封装好的这个功能模块 ...

随机推荐

  1. 无线adb连接

    使用USB数据线连接Android设备; 在dos命令行输入adb  tcpip  [xxxx]命令 (例如:adb tcpip 8888,xxx代表端口号); 断开USB数据线(数据线和设备断开连接 ...

  2. Webpack前端源码泄露漏洞

    什么是Webpack? webpack是一个打包器(bundler),它能将多个js.css.json等文件打包成一个文件.这样可以使复杂的各种加载文件集合为整合为单一的集合,让代码更加模块化便于编程 ...

  3. 基于python的数学建模---Fuzzy C-Means(模糊C均值聚类)

    簇数的确定: 要用到k-means里面的轮廓系数 基于python的数学建模---轮廓系数的确定 - 坤丶 - 博客园 (cnblogs.com) 模糊c的代码 import copy import ...

  4. React实用插件收集

    1.react-img-editor 图片编辑 demo: npm install react-img-editor -S 引入和使用 import ReactImgEditor from 'reac ...

  5. 简单使用Nginx反向代理和负载均衡

    配置文件主要是三点: events . http . server 配置反向代理和负载均衡策略 #配置tomcat的IP地址和访问端口||负载均衡:权重就是比例 upstream guotong { ...

  6. MyBatis-Plus 分页插件过时

    引用:https://blog.csdn.net/zyw562123314/article/details/108903456//分页插件老版本过时 旧版本配置 @Bean public Pagina ...

  7. 深入浅出学习透析 Nginx 服务器的基本原理和配置指南「运维操作实战篇」

    Nginx前提回顾 Nginx 是一个高性能的 Web 和反向代理服务器, 它具有有很多非常优越的特性: Web服务器:相比 Apache,Nginx 使用更少的资源,支持更多的并发连接,体现更高的效 ...

  8. 【每日一题】【map、数组、二维数组排序、静态函数和库函数】2022年2月24日-NC97 字符串出现次数的TopK问题

    描述给定一个字符串数组,再给定整数 k ,请返回出现次数前k名的字符串和对应的次数.返回的答案应该按字符串出现频率由高到低排序.如果不同的字符串有相同出现频率,按字典序排序.对于两个字符串,大小关系取 ...

  9. SAP程序发布流程

    更改程序名称 如果你想要更改程序名称的话,首先进入程序,关闭编辑,只显示代码 点击重命名就可以了 或者直接输入事务代码se38进入APAP编辑器,输入程序名称,重命名 为程序创建事务代码 事务代码为s ...

  10. python什么是异常?如何处理异常

    异常处理 什么是异常 异常是程序错误发生的信号.程序一旦出现错误,就会产生一个异常,如果程序中没有处理该异常,该异常就会抛出来,程序的运行也随即终止. 错误分为两种 1.语法错误 2.逻辑错误 如何处 ...