【发布时间】:2012-08-31 13:44:28
【问题描述】:
我目前正在使用纯 C 作为 Unity 和 Objective-C 代码之间的 API,在 Objective-C 中为 Unity 编写应用内购买插件。
我面临的问题简介
基本功能已经可以使用。也就是说,我的插件中已经有一个非常基本的函数调用来启动对 Apple App Store 的产品请求,该请求可以从 Unity 调用。在统一脚本中,您只需像这样调用此方法:
[DllImport ("__Internal")]
private static extern void RequestProducts(string[] productIdentifiers, int arrayCount);
public static void RequestProductData( string[] productIdentifiers )
{
RequestProducts(productIdentifiers, productIdentifiers.Length);
}
这会调用如下所示的 C 函数:
void RequestProducts(char* productIdentifiers[], int arrayCount)
{
// Call the In-App purchase manager to initialize the product request
[[InAppPurchaseManager sharedInAppPurchaseManager] RequestProductData:productIdentifierCollection];
}
现在我省略了 C 函数的一部分,该部分采用 productIdentifiers 数组并将其转换为 NSArray 只是为了保持简单并解释我要解决的问题。
现在 InAppPurchaseManager 类是一个单例类。 RequestProductData 方法向应用商店发起产品请求。
问题
当 StoreKit 给我所有产品的回复时,这对我来说开始变得棘手。我想将检索到的每个产品的所有相关数据传递回统一 C# 脚本,以便您可以在游戏中处理数据。这意味着存储:
-每个产品的名称
-每个产品的描述
-每种产品的价格
一个明显的解决方案是创建一个包含此信息的结构或类,然后为每个产品创建一个实例并将它们全部放入一个数组中。
问题
现在的问题是,我将如何将这个复杂的数据结构数组发送回 Unity 脚本? Unity 的官方文档中提到,您可以使用此方法调用将消息发送回 Unity: UnitySendMessage("GameObjectName1", "MethodName1", "Message to send");
我接到了上班的电话,但明显的问题是它只允许您发送字符串。
所以:
如何将复杂数据结构的数组发送回 Unity 脚本?这甚至可能吗?
【问题讨论】:
-
您需要序列化对象并将它们传递给 C# 组件。没有“内置”方式来传递复杂对象或对象集合。
-
啊哈我明白了 :) 你能推荐任何基于序列化/编组的文章/资源,因为我以前从未真正使用过这个。任何类型的参考都将被应用。我会调查这个:)
-
@user1163640:您是否设法使用协议缓冲区在 unity 和插件之间交换数据?
-
是的 :) 该方法实际上已在我所属公司的最新 iOS 游戏中成功使用 :) 它应该有望得到 Apple 的批准并在本月内发布 :) 我使用它是应用内购买插件的一部分,效果很好。
标签: c# objective-c c plugins unity3d