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

https://qiita.com/ysyss5500/items/4aeb23639a8cf3d67376
### PlayFabログインと同時にやりたい
さて、PlayFabにログインできても、プレーヤーデータやらタイトルデーターってのをゲットできないと話にならない
調べてみる
[ねこじょーかー](https://playfab-master.com/playfab-login-best-practices)さんの所で学んでみる・・・ﾌﾑﾌﾑ
初期画面を作ってタップしたらデータ読み込み、初期だったら名前登録。なるほどー
でもそれを、ログイン時に同時にできないのかな？と色々探したが、コピペだけではうまくいかず悩みになやんだ
やっぱ書いてあることとか理解しないと進めるのはむずかしい
ねこじょーかーさんのを読み進めてみると

[何も考えずにログイン処理を実装する](https://playfab-master.com/playfab-login)でログインする。そして
[ログインと同時にいろいろなデータを取得する方法](https://playfab-master.com/playfab-get-data-at-login)い行きつきました
書かれた通りにコピペする。。。うまくいかない。もっとよく読んで理解しなくては！
そしてたどり着いたのが
PlayFabController.cs
```rd
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);で確認しようとするとエラー

}
```

とりあえず新規書き込みとかはあとにして、データを読み込むことに専念しました
<BR>
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3979014/ced88861-4fcd-2664-cb21-a5399e88787f.png)

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

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3979014/6de7ee04-69c0-3f11-41ea-f1502a773093.png)
ここでNameというキーを作成し値をaaaaaaとして記入
んで、実行
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3979014/fb09cd7d-ce3f-2194-27fc-3d758cadd106.png)
おおお～読み込めた
新規だった場合、これが""だったらーで書き込み処理でいいのかな・・・

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

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

って所
なぜに？
全部の処理終わった最後に書いてもだめなのか。基本的に考え方間違ってそう
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3979014/4a773d73-4f2d-cfc0-8156-81a6fca08ef5.png)
ここに書いてもダメ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3979014/f80e5169-53c2-8723-6ad4-bc078995c179.png)
こうなった
Nullってことはstertの処理してからprivate void PlayFabLogin_OnLoginSuccess(LoginResult result)をやってるって事なのか・・・

まだ理解できてないらしい
___
#### 画面に得たデータを表示してみる
###### まずはテキストを表示画面に

でもゲットはできてるみたいだから、画面に表示してみよう
そして[【Unity入門】1分でTextを表示しよう!スコアの表示まで簡単解説!](https://www.sejuku.net/blog/55029)こちらでお勉強
UIの所にテキストあるから選択しなさいある・・・が
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3979014/7ed12cd7-5fca-a727-1cfb-d2add0be9351.png)
ない
これ選ぶとちゃんと文字出ない
調べると、３Dの時に使える文字？フォントとか設定ダウンロードなんかいろいろめんどいみたい。３Dゲーム作るときに学ぼう
これを発見
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3979014/e5512c91-d234-2b41-9f75-a648b0bc4c44.png)
うむ
求めてたのはこれだ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3979014/ee8aa654-2291-9d7b-8cb3-3b747354c430.png)
無事に張り付けられた
ちなみに、枠線？（表示範囲）を出すのに苦労した
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3979014/fed17cf0-d390-743b-1daa-e3f5237b25a8.png)
この一番右上のにチェックして、シミュレーターで表示機種を選択したら出るようになりました
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3979014/b16a4aca-f383-9a12-c1a1-752db0219a7e.png)
ちなみにandroidで作る予定なので、調べてandroidになるように設定してますが、あってるのかわからないので今は省きます

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

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

[【Unity】Update内で1回だけ実行したい処理の書き方](
https://tech.pjin.jp/blog/2018/10/25/unity_update_call-once/)こちらでお勉強
繰り返しなくなった
[こちら](https://qiita.com/tsukasa_wear_parker/items/09d4bcc5af3556b9bb3a)のスクリプトをこんな感じで変更しました

UnityChan.cs
```rd
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
```rd
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を実行する
        }
    }
}
```
結構時間かかった...

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

←前  [【Unity初心者】Unityでネットゲームを作りたい【2】Json取入](https://qiita.com/ysyss5500/items/7078965fc5ea6e203d55)

[【Unity初心者】Unityでネットゲームを作りたい【4】やっぱりログイン時に、新規か判断してプレーヤーデータを読み書きしたい](https://qiita.com/ysyss5500/items/c48335128d115b871276)　次→

https://qiita.com/ysyss5500/items/4aeb23639a8cf3d67376