2012-08-31 34 views
4

我目前正在使用纯C作为Unity和Objective-C代码之间的API,为Objective-C中的Unity编写In-App购买插件。将复杂的数据类型从纯C插件传递到Unity C#脚本

介绍这个问题,我面对

的基本功能已经工作。也就是说,我的插件中已经有一个非常基本的函数调用,可以向可从Unity调用的Apple App Store发起产品请求。在统一的脚本,你只需调用这个方法是这样的:

[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给我回一个响应的所有产品,这就是它开始变得棘手我。我想将检索的每个产品的所有相关数据传回Unity C#脚本,以便您可以处理游戏中的数据。这意味着存储:

每个产品

每个产品

每个产品

的-The价格的-The描述的-The名字的一个明显的解决方案将是使结构或类,其包含这些信息,然后为每个产品创建一个实例并将它们全部放入数组中。

问题

现在的问题是,如何将我去送这个数组复杂的数据结构的回团结脚本? Unity的官方文档提到您可以使用此方法调用将消息发送回Unity: UnitySendMessage(“GameObjectName1”,“MethodName1”,“Message to send”);

我接到了电话,但显而易见的问题是,它只允许您发送字符串。

所以:

我将如何去发送复杂的数据结构的阵列回到统一的脚本?这甚至有可能吗?

+1

您需要序列化对象并将它们传递给C#组件。没有“内置”的方式来传递复杂对象或对象集合。 – Kiril

+0

啊哈我看到:)你能推荐任何文章/资源的序列化/编组的基础上,因为我从来没有真正与此工作过。任何类型的参考文献都会被评价。我会研究一下:) – CodingBeagle

+0

@ user1163640:你是否设法使用协议缓冲区来交换unity和插件之间的数据? – Heisenbug

回答

1

跟随我的评论和你的评论:如果你想要一个强大的解决方案,我会建议你检查出this answer。如果这对性能至关重要,那么在序列化时您将不得不更多地使用“手动”。那么这种数据传输对性能至关重要?

+0

啊哈我看到了,我一定会检查一下:)至于性能的关键点,我不会说这是关键的下降到几毫秒甚至几秒钟。该插件用于从Apple App Store获取应用程序内购买(因为Unity不提供对用Objective-C编写的StoreKit框架的本地访问)。因此,您初始化一个请求,并获取一系列产品信息(价格,说明等)。很可能它会在游戏开始时运行,然后缓存。所以只要这种方法不是非常缓慢 – CodingBeagle

+0

它应该不成问题。你认为这个解决方案能满足我所描述的吗? – CodingBeagle

+1

是的,proto缓冲区速度相当快,它们经常被实时使用,它们应该足以满足您所描述的内容。我只是指出,如果你正在寻找**真正**的高性能,那么你就必须自己写一些更加自定义的东西。 – Kiril

相关问题