【问题标题】:Passing complex data type from a pure c plugin to Unity C# scripts将复杂数据类型从纯 c 插件传递到 Unity C# 脚本
【发布时间】: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


【解决方案1】:

跟进我的评论和您的评论:如果您想要一个强大的解决方案,我建议您查看this answer。如果这对性能至关重要,那么您将不得不通过序列化获得更多“手动”。那么,这种数据传输对性能有多重要?

【讨论】:

  • 啊哈,我明白了,我一定会检查这个:) 至于性能临界点,我不会说它是几毫秒甚至几秒的临界点。该插件用于从 Apple App Store 获取应用内购买(因为 Unity 不提供对用 Objective-C 编写的 StoreKit 框架的本地访问)。因此,您初始化一个请求,并取回一系列产品信息(价格、描述等)。很可能它将在游戏开始时运行,然后缓存。所以只要这种方法不是特别慢
  • 这应该不是问题。您认为此解决方案是否足以满足我的描述?
  • 是的,proto 缓冲区相当快,它们经常被实时使用,它们应该足以满足您的描述。我只是指出,如果您正在寻找真正高性能,那么您将不得不自己编写更多定制的东西。
  • 好的 :) 非常感谢您的帮助。我会调查提供的答案。
猜你喜欢
  • 1970-01-01
  • 2016-10-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-12
  • 2013-11-10
相关资源
最近更新 更多