Unity与IOS互调

2024-03-23 09:32
文章标签 ios unity 互调

本文主要是介绍Unity与IOS互调,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

这是篇笔记文章,为了做ios att授权,参考了别的博客。不过unity与ios互调原理类似。

1,创建一个.mm文件,里面写ios代码,然后放到unity工程的Plugin/iOS文件夹下。脚本名字自定义,内容示例如下

#import <Foundation/Foundation.h>
#import <AppTrackingTransparency/AppTrackingTransparency.h>
#import "UnityInterface.h"extern "C" {void _RequestTrackingAuthorizationWithCompletionHandler() {if (@available(iOS 14, *)) {[ATTrackingManager requestTrackingAuthorizationWithCompletionHandler:^(ATTrackingManagerAuthorizationStatus status) {NSString *stringInt = [NSString stringWithFormat:@"%lu",(unsigned long)status];const char* charStatus = [stringInt UTF8String];UnitySendMessage("IOSMethod", "GetAuthorizationStatus", charStatus);}];} else {UnitySendMessage("IOSMethod", "GetAuthorizationStatus", "-1");}}int _GetAppTrackingAuthorizationStatus() {if (@available(iOS 14, *)) {return (int)[ATTrackingManager trackingAuthorizationStatus];} else {return -1;}}
}

如果没有这个文件夹的话,自己创建下就好了。具体函数内容可以自己更改。具体作用于unity依据的是这句话:

UnitySendMessage("IOSMethod", "GetAuthorizationStatus", charStatus);

它的含义是向unity场景中一个叫IOSMethod的物体调用GetAuthorizationStatus方法,并调用参数charStatus。

2,创建一个名为ATTAuth的C#脚本,用于调用IOS代码,脚本内容如下:

    [DllImport("__Internal")]private static extern void _RequestTrackingAuthorizationWithCompletionHandler();[DllImport("__Internal")]private static extern int _GetAppTrackingAuthorizationStatus();private static Action<int> getAuthorizationStatusAction;/// <summary>/// 请求ATT授权窗口/// </summary>/// <param name="getResult"></param>public static void RequestTrackingAuthorizationWithCompletionHandler(Action<int> getResult){//-1:"ios版本低于14"//0: "ATT 授权状态待定";//1: "ATT 授权状态受限";//2: "ATT 已拒绝";//3: "ATT 已授权";Debug.Log("RequestTrackingAuthorizationWithCompletionHandler");getAuthorizationStatusAction = getResult;_RequestTrackingAuthorizationWithCompletionHandler();}/// <summary>/// 获取当前ATT授权状态/// </summary>/// <returns></returns>public static int GetAppTrackingAuthorizationStatus(){return _GetAppTrackingAuthorizationStatus();}public void GetAuthorizationStatus(string status){getAuthorizationStatusAction?.Invoke(int.Parse(status));}

这个脚本名字也可自己改,如果想调用IOS的方法,基本都得用到  [DllImport("__Internal")]标签,具体函数名及回调可以自己改。

3,在游戏场景中创建一个物体,取名为IOSMethod。把ATTAuth.cs脚本挂到该物体上。在需要调用ATT弹窗的地方写下面的代码:

if (Application.platform == RuntimePlatform.IPhonePlayer)
{int curStatus = ATTAuth.GetAppTrackingAuthorizationStatus());if(curStatus == 0){ATTAuth.RequestTrackingAuthorizationWithCompletionHandler((status) =>{Debug.Log("ATT status :" + status);});}
}

  这一步就是为了方便unity调用IOS。

4,在xcode中加入相应的库和权限(改info.plist)。

  比如添加att权限的话,首先在Link Binary with Libraries中添加AppTrackingTransparency.framework

  然后文本打开info.plist,在其中添加

<key>NSUserTrackingUsageDescription</key>
<string>描述文本</string>

5,总结

  IOS与unity开发语言写法上很相似,如果需要的话可以互相调用。目前总结的就这么多,有什么问题博客下联系。

这篇关于Unity与IOS互调的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/837883

相关文章

Android与iOS设备MAC地址生成原理及Java实现详解

《Android与iOS设备MAC地址生成原理及Java实现详解》在无线网络通信中,MAC(MediaAccessControl)地址是设备的唯一网络标识符,本文主要介绍了Android与iOS设备M... 目录引言1. MAC地址基础1.1 MAC地址的组成1.2 MAC地址的分类2. android与I

安卓链接正常显示,ios#符被转义%23导致链接访问404

原因分析: url中含有特殊字符 中文未编码 都有可能导致URL转换失败,所以需要对url编码处理  如下: guard let allowUrl = webUrl.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) else {return} 后面发现当url中有#号时,会被误伤转义为%23,导致链接无法访问

【iOS】MVC模式

MVC模式 MVC模式MVC模式demo MVC模式 MVC模式全称为model(模型)view(视图)controller(控制器),他分为三个不同的层分别负责不同的职责。 View:该层用于存放视图,该层中我们可以对页面及控件进行布局。Model:模型一般都拥有很好的可复用性,在该层中,我们可以统一管理一些数据。Controlller:该层充当一个CPU的功能,即该应用程序

Unity Post Process Unity后处理学习日志

Unity Post Process Unity后处理学习日志 在现代游戏开发中,后处理(Post Processing)技术已经成为提升游戏画面质量的关键工具。Unity的后处理栈(Post Processing Stack)是一个强大的插件,它允许开发者为游戏场景添加各种视觉效果,如景深、色彩校正、辉光、模糊等。这些效果不仅能够增强游戏的视觉吸引力,还能帮助传达特定的情感和氛围。 文档

Unity协程搭配队列开发Tips弹窗模块

概述 在Unity游戏开发过程中,提示系统是提升用户体验的重要组成部分。一个设计良好的提示窗口不仅能及时传达信息给玩家,还应当做到不干扰游戏流程。本文将探讨如何使用Unity的协程(Coroutine)配合队列(Queue)数据结构来构建一个高效且可扩展的Tips弹窗模块。 技术模块介绍 1. Unity协程(Coroutines) 协程是Unity中的一种特殊函数类型,允许异步操作的实现

Unity 资源 之 Super Confetti FX:点亮项目的璀璨粒子之光

Unity 资源 之 Super Confetti FX:点亮项目的璀璨粒子之光 一,前言二,资源包内容三,免费获取资源包 一,前言 在创意的世界里,每一个细节都能决定一个项目的独特魅力。今天,要向大家介绍一款令人惊艳的粒子效果包 ——Super Confetti FX。 二,资源包内容 💥充满活力与动态,是 Super Confetti FX 最显著的标签。它宛如一位

Unity数据持久化 之 一个通过2进制读取Excel并存储的轮子(4)

本文仅作笔记学习和分享,不用做任何商业用途 本文包括但不限于unity官方手册,unity唐老狮等教程知识,如有不足还请斧正​​ Unity数据持久化 之 一个通过2进制读取Excel并存储的轮子(3)-CSDN博客  这节就是真正的存储数据了   理清一下思路: 1.存储路径并检查 //2进制文件类存储private static string Data_Binary_Pa

Unity Adressables 使用说明(一)概述

使用 Adressables 组织管理 Asset Addressables 包基于 Unity 的 AssetBundles 系统,并提供了一个用户界面来管理您的 AssetBundles。当您使一个资源可寻址(Addressable)时,您可以使用该资源的地址从任何地方加载它。无论资源是在本地应用程序中可用还是存储在远程内容分发网络上,Addressable 系统都会定位并返回该资源。 您

iOS剪贴板同步到Windows剪贴板(无需安装软件的方案)

摘要 剪贴板同步能够提高很多的效率,免去复制、发送、复制、粘贴的步骤,只需要在手机上复制,就可以直接在电脑上 ctrl+v 粘贴,这方面在 Apple 设备中是做的非常好的,Apple 设备之间的剪贴板同步功能(Universal Clipboard)确实非常方便,它可以在 iPhone、iPad 和 Mac 之间无缝传输剪贴板内容,从而大大提高工作效率。 但是,iPhone 如何和 Wind

Unity Adressables 使用说明(六)加载(Load) Addressable Assets

【概述】Load Addressable Assets Addressables类提供了加载 Addressable assets 的方法。你可以一次加载一个资源或批量加载资源。为了识别要加载的资源,你需要向加载方法传递一个键或键列表。键可以是以下对象之一: Address:包含你分配给资源的地址的字符串。Label:包含分配给一个或多个资源的标签的字符串。AssetReference Obj