1

我不熟悉 SO 用户标签,所以我希望这可行:@aaron

这是我能找到的与我的问题最接近的问题,但这并不是问题所在。(我尝试了 Google、Bing 和 SO 自己的搜索。) https://stackoverflow.com/questions/25014006/nullreferenceexception-with-parseobjects-in-array-of-pointers

我的问题:我有一个与 Facebook 和 Parse 交互的 Unity Web-Player 游戏。在解决了其中的许多问题后,我将它轻松连接到 Facebook,提取用户的个人资料信息和图片。然后它尝试连接到 parse 以将用户登录到 parse 以检索他们的游戏相关数据(如高分、货币统计、电源等),当它尝试这样做时,我得到一个 NullReferenceException。报错信息的具体内容为:

“NullReferenceException:对象引用未设置为 GameStateController.ParseFBConnect (System.String userId, System.String accessToken, DateTime tokenExpiration) [0x0001a] 在 C:...\Assets\Scripts\CSharp\CharacterScripts\GameStateController 中的对象实例.cs:1581 at GameStateController.Update () [0x0011f] 在 C:\Users\Michieal\Desktop\Dragon Rush Game\Assets\Scripts\CSharp\CharacterScripts\GameStateController.cs:382"

生成此错误消息的代码是:

    public void ParseFBConnect(string userId, string accessToken, DateTime tokenExpiration)
{

    Task<ParseUser> logInTask = ParseFacebookUtils.LogInAsync (userId, accessToken, tokenExpiration).ContinueWith<ParseUser> (t =>
    {
        if (t.IsFaulted || t.IsCanceled)
        {
            if (t.IsCanceled)
                Util.LogError ("LoginTask::ParseUser:: Cancelled. >.<");
            // The login failed. Check the error to see why.
            Util.LogError ("Error Result: " + t.Result.ToString ());
            Util.LogError ("Error Result (msg): " + t.Exception.Message);
            Util.LogError ("Error Result (inmsg): " + t.Exception.InnerException.Message);
        }

        if (t.IsCompleted)
        { // No need to link the user to a FB account, as there are no "real" (non fb) accounts yet.
            Util.Log ("PFBC::Login result reports successful. You Go Gurl!");
            // Login was successful.
            user = t.Result; // assign the resultant user to our "user"... 
            RetryPFBC = false;
            return user;
        }
        return t.Result;
    });
    if (user.ContainsKey ("NotNew"))
    { // on true, then we don't have to set up the keys...
        Util.Log ("User, " + user.Username + ", contains NotNew Key.");
    }
    else
    {
        CreateKeys (); // Create Keys will only build MISSING Keys, setting them to the default data specifications.
        user.Email = Email;
        user.SaveAsync (); // if we have created the keys data, save it out.
    }

}

它正在按该顺序传递正确的(经过身份验证的)Facebook 值(FB.UserId、FB.AccessToken、FB.AccessTokenExpiresAt)。我正在使用 FB Sdk 6.0.0 版和 Parse Unity SDK 1.2.16 版。

在日志文件中,它没有任何 debug.log/Util.log 注释,而是执行“空引用”错误(上图),然后是“关于解析 url:https ://api.parse.com/1 /classes/_User

检查是否https://api.parse.com/1/classes/_User是否为有效域

针对有效域检查请求主机:api.parse.com:*"

这就是它刚刚停止的地方。因此,我在 Update() 函数中构建了一个简单的重试块,以每隔 10 秒左右调用一次 ParseFBConnect() 函数。其中,似乎只会用相同的错误集填充我的日志文件。在互联网上搜索帮助后,我尝试将 FB.AccessTokenExpiresAt 更改为 DateTime.UtcNow.AddDays(1),因为其他人说这对他们有用。我似乎无法为我工作。当我在 Parse 中检查仪表板以查看它是否显示任何更新或活动时,它没有,而且现在已经有几天没有了。脚本执行顺序如下:

Parse.ParseInitialzeBehaviour -- -2875(第一件事)Facebook 加载程序(FB、编辑器、画布等) -- -1000 到 -900 GameStateController -- -875 ... 所以,我知道 Parse.ParseInitializeBehaviour 正在加载首先(另一个搜索结果),我通过更改登录方法的存储位置将 NullReference 跟踪到 Parse.Unity.dll;GSC 在播放器上(播放器从初始屏幕开始并在整个游戏中保持不变)。我还尝试将 Parse.ParseInitializeBehaviour 放在 Player 游戏对象和一个空的游戏对象上(上面有一个简单的 dontdestroy(gameObject) 脚本)。而且,我在对象上正确填写了我的应用程序 ID 和我的 DotNet 密钥。

当我第一次设置解析时,在游戏的当前生产版本上,它可以根据上面的代码片段成功创建一个用户帐户。现在,它只是在尝试解析 url 时中断......

所以,我的问题是:我做错了什么?还有其他人有这个问题吗?有没有人有任何想法/建议/等等,如何解决这个问题?我真的只是想让它工作,并让用户登录,这样我就可以获取他们的数据并继续在我的游戏中破坏其他东西:D

感谢所有帮助!感谢您抽出宝贵时间阅读本文。

4

1 回答 1

0

这个问题的答案如下: 后端即服务 - Bing

沟解析因为它不能很好地与 Unity3d 一起工作,支持(显然,从这个问题的绝对数量的答案和需要帮助让它工作的人的其他问题来看)非常缺乏,而且大多数,如果不是全部的话,展示如何使用它的示例中有损坏/缺少部分/等。我认为这是创作者的失败。我也将其视为虚假广告。所以,要回答这个问题 - 解析是浪费时间,切入正题,抓住一些有效的东西,有真实的,有效的例子,并且由知道如何在 UNITY3d 环境中编程的人维护。

一个很好的例子是 Photon Networking 服务、Shephertz.com 的 App42、Microsoft 的 Azure 等。对于这个问题的答案数量众多,如果排除 PARSE,这应该是不费吹灰之力。我已经包含了 Bing 搜索链接,您还可以快速搜索游戏后端(您会找到博客和评论。)

我强烈建议您阅读有关这些服务的评论,阅读问题(并记下它们是否已得到回答,或者在 Parse 的情况下,如果他们只是关闭了论坛而不是回答他们的客户)...而且,只需通过他们为使用他们的产品而给出的例子来回弹一下。如果他们展示了它是如何工作的,以及预期的结果(就像 MSDN 所做的那样),那么您将有更好的时间和更轻松的时间让它工作。

仅供参考 - 我的游戏现在具有所有后端集成,保存/创建/获取用户及其数据,有一个商店,并且正在继续前进,因为我放弃了 PARSE。

为了使事情正确,我使用 Parse 1.2.16进行统一,而 Facebook 使用 Unity SDK 6.0.0 ......我尝试了 Parse 1.2.14,结果相同,我尝试了 Unity 4.5.2 和 4.5。 3. 我对 Parse 的看法是基于他们的文档、这 2 个 API 版本以及我为了让它工作而花费的很长一段时间。然后我补充说,这里没有人回答这个问题(遗憾的是,Stack Over flow 是 Facebook 首选的帮助/支持论坛。他们甚至在他们的博客、帮助文档等中说,如果你有问题 - 发布您在 Stack Overflow.com 上使用相关标签提出的问题。我做到了。)

哦,Parse 的最终星级(澄清一下)是“-2 分(满分 5)”——这是 2 星的负分……满分 5 分。就像在,远离它……很远很远. 只是为了澄清。

于 2014-09-04T08:49:06.683 回答