Unity: Javascript回调,委托



我想使用Player。在我的Unity javascript代码中添加来自Yahoo Games Network的IO。PlayerIO提供了仅用c#编写的unity示例项目,因此我在获得回调工作方面遇到了问题。

来自Player的PlayerIO.Connect描述。Unity的IO文档(在这里):

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官方教程(在这里),在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:不能从源类型转换到目标类型。主+ $ 2 +美元开始。MoveNext ()

.


之后,我找到了一个关于玩家的话题。IO论坛(可在这里)称为利用播放器。IO在Unity Javascript。该主题的作者建议在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。连接' for参数列表'(字符串,字符串,字符串,字符串,字符串,系统。Delegate, System.Delegate)' was发现。

所以Connect方法似乎不喜欢System.Delegate作为参数,或者这些参数没有初始化好。

第三种方法正在工作,该函数期望8个参数,这就是为什么它不适合我。

最新更新