美文网首页iOS
Unity 和 iOS之间的通信(交互)

Unity 和 iOS之间的通信(交互)

作者: 罗平油菜花 | 来源:发表于2021-12-03 16:11 被阅读0次

上一篇主要说了将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。将上诉两个文件拖入其中。


image.png

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


image.png

控件创建好之后,在脚本中申明一下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关联到场景中。


image.png

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


image.png

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


image.png
改为public
image.png
按照之前的操作 image.png

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

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

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

然后就可以run了

结果正确


image.png

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

提取码:e90o

相关文章

  • Unity 和 iOS之间的通信(交互)

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

  • 之界面跳转

    本文介绍了iOS和Unity交互,主要涉及两个界面之间的跳转. 如果对iOS和Unity交互传参方法不熟悉的朋友,...

  • unity与android 、ios交互

    unity和ios交互: unity调用ios的方法: c#:[DllImport("__Internal")] ...

  • ios和unity交互代码

    IOSToUnity ios和unity交互 GitHub - Juefeiye/IOSToUnity: ios和...

  • Unity与iOS交互

    在Unity和iOS混合开发的项目中,交互是必不可少的。本篇文章就简单介绍一下他们之间是如何交互的。 Unity给...

  • Unity3D与iOS交互详解

    Unity iOS教程之Xcode打包framework在Unity调用 Unity3D与iOS交互详解

  • 之参数传递

    本文介绍了iOS和Unity交互,主要涉及参数的传递.(整个程序都处于Unity界面) 调用方法一: Unity调...

  • Unity和iOS交互

    extern "C" void PrivacyPolicy(){ } extern "C" int GetNetS...

  • Unity与iOS交互,Unity脚本修改Xcode工程

    Unity与iOS交互 Unity调用iOS的方法,首先在Xcode中新建一个iOS的桥接类,并且将.m的后缀修改...

  • Unity和Android之间的通信

    简单说就是 1.先编写Android 项目 其中要引入 unity的接口文件,让他们可以互相调用。2.Andro...

网友评论

    本文标题:Unity 和 iOS之间的通信(交互)

    本文链接:https://www.haomeiwen.com/subject/jnuuwltx.html