1

私は SO ユーザータグに慣れていないので、これが機能することを願っています: @aaron

これは、私の問題に関連する最も近い質問ですが、正確には問題ではありません。(Google、Bing、および SO 独自の検索を試みました。) https://stackoverflow.com/questions/25014006/nullreferenceexception-with-parseobjects-in-array-of-pointers

私の問題: Facebook と Parse の両方と連携する Unity Web-Player ゲームがあります。多くの問題を解決した後、Facebook に簡単に接続し、ユーザーのプロフィール情報と写真を取得できるようになりました。次に、解析に接続してユーザーを解析にログインさせ、ゲーム関連のデータ (ハイスコア、通貨統計、パワーアップなど) を取得しようとしますが、それを試みたときに NullReferenceException が発生します。エラー メッセージの具体的な内容は次のとおりです。

「NullReferenceException: オブジェクト参照が C:...\Assets\Scripts\CSharp\CharacterScripts\GameStateController の GameStateController.ParseFBConnect (System.String userId、System.String accessToken、DateTime tokenExpiration) [0x0001a] でオブジェクトのインスタンスに設定されていません。 .cs:1581 at GameStateController.Update () [0x0011f] in 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 コメントの代わりに、"Null Reference" エラー (上記) が発生し、その後に "About to parse url: https://api.parse.com/1 " が続きます。 /classes/_User

https://api.parse.com/1/classes/_Userが有効なドメインかどうかの確認

request-host: api.parse.com を有効なドメインに対してチェックしています: *"

そして、それがちょうど止まったところです。そこで、10 秒ほどごとに ParseFBConnect() 関数を呼び出す単純な再試行ブロックを Update() 関数に作成しました。これは、ログ ファイルが同じエラー セットでいっぱいになるだけのようです。インターネットでヘルプを検索した後、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 キーがオブジェクトに正しく入力されています。

最初に parse をセットアップしたとき、現在の製品版のゲームでは、上記のコード スニペットに基づいてユーザー アカウントを正常に作成できます。さて、URLを解析しようとすると壊れます...

だから、私の質問は次のとおりです。私は何を間違っていますか? 他の誰かがこの問題を抱えていますか? そして、これを修正するために何をすべきかについて、誰かがアイデア/提案/などを持っていますか? 私は本当にこれを機能させ、ユーザーをログインさせて、データを取得し、ゲーム内の他のものを壊すことができるようにしたいだけです:D

すべての助けに感謝します!! 時間を割いてこれを読んでくれてありがとう。

4

1 に答える 1

0

この質問に対する答えは次のとおりです。 サービスとしてのバックエンド - Bing

Unity3d ではうまく動作しないため、パースを破棄します。サポート (明らかに、この質問に対する膨大な数の回答と、それを機能させるために助けが必要な人々からの質問から判断すると) は非常に不足しており、すべてではないにしてもほとんどの場合、使用方法を示す例の一部が壊れている/欠落している/などです。これは作成者側の失敗だと思います。また、虚偽の広告と見なします。したがって、この質問に答えるには - PARSE は時間の無駄です。追いかけて、機能し、実際に動作する例があり、UNITY3d 環境でのプログラミング方法を知っている人によって維持されているものを取得してください。

これの良い例は、Photon Networking サービス、Shephertz.com の App42、Microsoft の Azure などです。これに対する圧倒的な数の回答があるため、PARSE を除外すれば、これは簡単なことでした。Bing Search のリンクを含めました。Gaming Backends をすばやく検索することもできます (ブログやレビューが見つかります)。

これらのサービスのレビューを読み、質問を読むことを強くお勧めします (そして、回答があったかどうか、または Parse の場合は、顧客に回答するのではなく単にフォーラムを閉鎖したかどうかを書き留めてください)...そして、製品を使用するために彼らが提供する例を見て回るだけです. それらがどのように機能するか、および期待される結果 (MSDN のように) を示している場合は、はるかに優れた、より簡単に機能させることができます。

参考までに - 私のゲームには、PARSE を削除して以来、すべてのバックエンド統合、ユーザーとそのデータの保存/作成/取得、ストアがあり、順調に進んでいます。

物事を正しくするために、Unity には Parse 1.2.16を使用し、Unity SDK 6.0.0 には Facebook を使用していました... Parse 1.2.14 を試してみましたが、同じ結果で、Unity 4.5.2 と 4.5 の両方を試しました。 3. Parse についての私の意見は、彼らのドキュメント、これら 2 つの API バージョン、およびそれを動作させるために引っ張ってきた非常に長い日々に基づいています。次に、ここでは誰もこの質問にまったく答えていないという事実を追加しました(悲しいことに、スタックオーバーフローはFacebookの優先ヘルプ/サポートフォーラムです。ブログやヘルプドキュメントなどで、問題がある場合は投稿してください.関連するタグを付けて Stack Overflow.com に質問してください。

ああ、Parse の最終的な星評価 (明確にするため) は「5 段階中 -2 」です -- これはマイナス 2 つ星です... 5 段階中. . 明確にするために。

于 2014-09-04T08:49:06.683 に答える