【问题标题】:Unity: Javascript callbacks, delegatesUnity:Javascript 回调、委托
【发布时间】:2014-07-05 02:34:12
【问题描述】:

我想在我的 Unity javascript 代码中使用来自 Yahoo Games Network 的 Player.IO。 PlayerIO 提供了仅用 C# 编写的统一示例项目,所以我在让回调工作时遇到问题。

Player.IO Unity 文档中的PlayerIO.Connect 描述 (available here):

public void Connect (string gameId, string connectionId, string userId, string auth,
string partnerId, String[] playerInsightSegments,
Callback<Client> successCallback, Callback<PlayerIOError> errorCallback)

那么如何让这些回调起作用呢?

问题的以下部分显示了我已经尝试过但没有奏效的方法。


首先我尝试过这种方式(我从 javascript 知道):

function success(client : Client) {
  //function content
}
PlayerIOClient.PlayerIO.Connect(pioGameId, pioConnectionId, pioUserId, pioAuth, pioPartnerId, success, failed);

.


这是不对的,我知道我应该使用委托。 从 Unity3D 官方教程(available here)来看,在 JS 中代理的正确使用应该是这样的(使用 Function 类型):

var successDelegate : Function;

function success(client : Client) {
  //function content
}

function Start () {
    successDelegate = success;
    PlayerIOClient.PlayerIO.Connect(pioGameId, pioConnectionId, pioUserId, pioAuth, pioPartnerId, success, failed);
}

这会导致以下错误:

InvalidCastException:无法从源类型转换为目标类型。 Main+$Start$2+$.MoveNext()

.


之后我在 Player.IO 论坛 (available here) 上找到了一个名为在 Unity Javascript 中使用 Player.IO 的主题。该主题的作者建议在 JS 中创建委托的方法:直接进入 .Net 类型并将它们声明为 System.Delegate

var pioConnectSuccessCallback : System.Delegate;

function success(client : Client) {
  //function content
}

function Start () {
  pioConnectSuccessCallback = System.Delegate.CreateDelegate(typeof(PlayerIOClient.Callback.<PlayerIOClient.Client>), this, "success");
  PlayerIOClient.PlayerIO.Connect(pioGameId, pioConnectionId, pioUserId, pioAuth, pioPartnerId, pioConnectSuccessCallback, pioConnectErrorCallback);
}

不幸的是,这对我也不起作用,尽管论坛上的人将它作为一个可行的解决方案(但它可能已经过时)。

我得到的错误:

Assets/Main.js(51,35): BCE0023: 没有合适的版本 'PlayerIOClient.PlayerIO.Connect' 用于参数列表 '(String, 字符串、字符串、字符串、字符串、System.Delegate、System.Delegate)' 是 找到了。

所以看起来 Connect 方法不喜欢 System.Delegate 作为参数或者那些没有很好地初始化。

【问题讨论】:

    标签: callback delegates unity3d unityscript player.io


    【解决方案1】:

    第三种方法有效,该函数需要 8 个参数,这就是为什么它对我不起作用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-10
      • 1970-01-01
      • 1970-01-01
      • 2014-11-16
      • 2012-09-21
      • 1970-01-01
      相关资源
      最近更新 更多