IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> Unity 和 iOS之间的通信(交互) -> 正文阅读

[游戏开发]Unity 和 iOS之间的通信(交互)

上一篇主要说了将Unity集成到原生iOS应用程序中,集成之后肯定是要通信的,所以这篇来说一下Unity 和 iOS之间的通信。

1、iOS调用Unity的方法并传参数

在UnityFramework中提供的有专门的方法,因此我们只要调用就可以了。
首先在AppDelegate.h中声明一个调用方法,方便后面使用。

- (void)sendMessageWithName:(const char*)goName functionName:(const char*) functionName message:(const char*)msg;

在AppDelegate.m中实现方法

- (void)sendMessageWithName:(const char*)goName functionName:(const char*) functionName message:(const char*)msg{
     [self.ufw sendMessageToGOWithName:goName functionName:name message:msg];
}

这三个参数还是要解释一下的

goName:表示Unity里面的场景的名字,Unity中方法一般是通过添加脚本的方式,使用C#来进行定义,每一个脚本都对应一个使用的场景,这边后面会简单说一下这个场景。

functionName:就很好理解,iOS调用Unity具体的方法名字。

msg:就是方法的参数

针对上面👆的,我们简单做一个小demo(会的就直接跳过 );

我们就简单将原生iOS的值传递给Unity,并通过Label显示出来。

我们在unity中创建一个Text和脚本,并把脚本绑定在这个场景中。

双击脚本进入代码编写,我这时候添加一些库的引用,声明上面的Text,以及书写方法修改Text的指,这里的方法正是给原生调用的方法。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using System.Runtime.InteropServices;

public class ChangeLabel : MonoBehaviour
{
     public Text text;
    [DllImport("__Internal")]
 
    public void changeLabel(string speedStirng) {
        text.text = speedStirng;
    }
}

到这unity工程就到此结束了。
在原生工程中调用了

AppDelegate *appDelegate = (AppDelegate *)([UIApplication sharedApplication].delegate);
    [appDelegate showUnityView];
    [appDelegate sendMessageWithName:"Canvas" functionName:"changeLabel" message:"好硬好强呀~~~~~"]

2、Unity调用iOS的方法并传参数?

首先创建一个.h和.mm文件,用来书写需要交互的方法。
上代码 NativeCallProxy.h

#import <Foundation/Foundation.h>
@protocol NativeCallsProtocol

@required

- (void)iOSLog:(NSString *)value;


@end

__attribute__ ((visibility("default")))

@interface FrameworkLibAPI : NSObject
// call it any time after UnityFrameworkLoad to set object implementing NativeCallsProtocol methods
+(void) registerAPIforNativeCalls:(id<NativeCallsProtocol>) aApi;

@end

iOSLog 用来打印unity中的的文本。
NativeCallProxy.mm?

#import <Foundation/Foundation.h>
#import "NativeCallProxy.h"


@implementation FrameworkLibAPI

id<NativeCallsProtocol> api = NULL;
+(void) registerAPIforNativeCalls:(id<NativeCallsProtocol>) aApi
{
    api = aApi;
}

@end


extern "C" {

void iOSLog(const char * value);

}


void iOSLog(const char * value){
    
    return [api iOSLog:[NSString stringWithUTF8String:value]];
    
}

然后将刚才的两个文件拖到unity 中?

在Assets文件夹中新建Plugins文件夹,然后在Plugins文件夹中新建iOS。将上诉两个文件拖入其中。

现在我们在场景上新建一个输入框和一个按钮,点击按钮将输入框的内容,通过iOSLog打印出来。

控件创建好之后,在脚本中申明一下input。并书写相应逻辑
上代码

using System.Collections;
using System.Collections.Generic;
using System.Runtime.InteropServices;
using UnityEngine;
using UnityEngine.UI;

public class ChangeLabel : MonoBehaviour
{
    public Text tmpText;
    public InputField tmpInput;

    
    public void changeLabel(string speedStirng) {
        tmpText.text = speedStirng;
    }

    public void btnClick(){
       iOSLog(tmpInput.text);
    }

    //这个很重要,关联iOS方法
    [DllImport("__Internal" )]
     static extern void iOSLog(string value);
}

?申明之后就是将input关联到场景中。

然后就OK了,打包出来看看效果。
按照上一篇文章中说的,整合在一起。?

?

看到了我们添加的文件了。

改为public

按照之前的操作

添加#import <UnityFramework/NativeCallProxy.h>引用

注册协议
[NSClassFromString(@"FrameworkLibAPI") registerAPIforNativeCalls:self];

最后可以在Appdelegate中实现协议里面的方法了

然后就可以run了

结果正确

代码都在里面了(unity和Xcode 工程包也在里面):https://pan.baidu.com/s/13ywva1gPPkc334o7YCW_Lg

提取码:e90o

?

?

?

?

?

?

  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章      下一篇文章      查看所有文章
加:2022-01-14 02:19:50  更:2022-01-14 02:20:30 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/27 18:35:56-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码