1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Unity初心者】Unityでネットゲームを作りたい【3】PlayFabログインと同時にやりたい

Last updated at Posted at 2025-01-15

PlayFabログインと同時にやりたい

さて、PlayFabにログインできても、プレーヤーデータやらタイトルデーターってのをゲットできないと話にならない
調べてみる
ねこじょーかーさんの所で学んでみる・・・フムフム
初期画面を作ってタップしたらデータ読み込み、初期だったら名前登録。なるほどー
でもそれを、ログイン時に同時にできないのかな?と色々探したが、コピペだけではうまくいかず悩みになやんだ
やっぱ書いてあることとか理解しないと進めるのはむずかしい
ねこじょーかーさんのを読み進めてみると

何も考えずにログイン処理を実装するでログインする。そして
ログインと同時にいろいろなデータを取得する方法い行きつきました
書かれた通りにコピペする。。。うまくいかない。もっとよく読んで理解しなくては!
そしてたどり着いたのが
PlayFabController.cs

using System.Collections.Generic;
using NUnit.Framework.Interfaces;
using PlayFab;
using PlayFab.ClientModels;
using UnityEngine;
using static PlayFabController;

public class PlayFabController : MonoBehaviour
{

    [SerializeField] GetPlayerCombinedInfoRequestParams InfoRequestParams;
    void Start()
    {
        InfoRequestParams.GetUserData = true; // プレイヤーデータを取得する
 //       InfoRequestParams.GetTitleData = true; // タイトルデータを取得する(まだ未確認

        PlayFabAuthService.Instance.InfoRequestParams = InfoRequestParams; // ここを追加!!
        PlayFabAuthService.OnLoginSuccess += PlayFabLogin_OnLoginSuccess;
        PlayFabAuthService.Instance.Authenticate(Authtypes.Silent);
    }
    private void PlayFabLogin_OnLoginSuccess(LoginResult result)
    {
        Debug.Log("Login Success!");

        // プレイヤーのカスタムデータを取得
        PlayerName = result.InfoResultPayload.UserData["Name"].Value;
        Debug.Log(PlayerName);//データ取得出来てるか確認
    }
    private void OnDisable()
    {
        PlayFabAuthService.OnLoginSuccess -= PlayFabLogin_OnLoginSuccess;
    }
    [HideInInspector] public string PlayerName { get; private set; }
    //[HideInInspector] public List<CharacterResult> Characters { get; private set; }//まだ未確認

    //ここでDebug.Log(PlayerName);で確認しようとするとエラー

}

とりあえず新規書き込みとかはあとにして、データを読み込むことに専念しました


image.png

これやってみたらどうだろうと、GetUserDataにチェックしてみた
が、わかりやすくなるだけで意味はないみたい
でも[SerializeField] GetPlayerCombinedInfoRequestParams InfoRequestParams;ってしないとエラー出て動かなかった気がする

image.png
ここでNameというキーを作成し値をaaaaaaとして記入
んで、実行
image.png
おおお~読み込めた
新規だった場合、これが""だったらーで書き込み処理でいいのかな・・・

そして、ここに書いたらどうなるか試した

//ここでDebug.Log(PlayerName);で確認しようとするとエラー

って所
なぜに?
全部の処理終わった最後に書いてもだめなのか。基本的に考え方間違ってそう
image.png
ここに書いてもダメ
image.png
こうなった
Nullってことはstertの処理してからprivate void PlayFabLogin_OnLoginSuccess(LoginResult result)をやってるって事なのか・・・

まだ理解できてないらしい


画面に得たデータを表示してみる

まずはテキストを表示画面に

でもゲットはできてるみたいだから、画面に表示してみよう
そして【Unity入門】1分でTextを表示しよう!スコアの表示まで簡単解説!こちらでお勉強
UIの所にテキストあるから選択しなさいある・・・が
image.png
ない
これ選ぶとちゃんと文字出ない
調べると、3Dの時に使える文字?フォントとか設定ダウンロードなんかいろいろめんどいみたい。3Dゲーム作るときに学ぼう
これを発見
image.png
うむ
求めてたのはこれだ
image.png
無事に張り付けられた
ちなみに、枠線?(表示範囲)を出すのに苦労した
image.png
この一番右上のにチェックして、シミュレーターで表示機種を選択したら出るようになりました
image.png
ちなみにandroidで作る予定なので、調べてandroidになるように設定してますが、あってるのかわからないので今は省きます

取得した変数が反映されない

そしてやはり、上記で取得したデータが反映されない・・・むー
こちらでお勉強
結構めんどいなーもっと良い方法ないかと思いながらやってみるが、とにかくUnityのバージョンのせいなのか、コピペで動かん
クラス名と○○.csが合ってないのが原因かなとやってみると動いた!
しかし、どうもUpdateの中を繰り返し処理ているらしい暴走始めたw

【Unity】Update内で1回だけ実行したい処理の書き方こちらでお勉強
繰り返しなくなった
こちらのスクリプトをこんな感じで変更しました

UnityChan.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class UnityChan : MonoBehaviour
{

    public int HP = 100;

    // Use this for initialization
    void Start()
    {

    }

    // Update is called once per frame
    void Update()
    {

    }

    public void Attack()
    {
        Debug.Log("UnityChan_Attack!");
    }
}

GameManer.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class GameManager : MonoBehaviour
{

    GameObject unitychan; //Unityちゃんそのものが入る変数

    UnityChan script; //UnityChanScriptが入る変数

    bool isCalledOnce = false;//Updateが繰り返されるので1回だけにするための
    
    void Start()
    {
        unitychan = GameObject.Find("unitychan"); //Unityちゃんをオブジェクトの名前から取得して変数に格納する
        script = unitychan.GetComponent<UnityChan>(); //unitychanの中にあるUnityChanScriptを取得して変数に格納する
    }

    // Update is called once per frame
    void Update()
    {
        //一回だけ繰り返す処理
        if (!isCalledOnce)
        {
            isCalledOnce = true;
            int unitychanHP = script.HP; //新しく変数を宣言してその中にUnityChanScriptの変数HPを代入する
            Debug.Log("UnityちゃんのHPは" + unitychanHP);

            script.Attack(); //UnityChanScriptにある関数Attackを実行する
        }
    }
}

結構時間かかった...

これを参考に取得して表示してみる

次回 データ表示より前にまたログイン処理で悩む

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?