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);で確認しようとするとエラー
}
とりあえず新規書き込みとかはあとにして、データを読み込むことに専念しました
これやってみたらどうだろうと、GetUserDataにチェックしてみた
が、わかりやすくなるだけで意味はないみたい
でも[SerializeField] GetPlayerCombinedInfoRequestParams InfoRequestParams;ってしないとエラー出て動かなかった気がする
ここでNameというキーを作成し値をaaaaaaとして記入
んで、実行
おおお~読み込めた
新規だった場合、これが""だったらーで書き込み処理でいいのかな・・・
そして、ここに書いたらどうなるか試した
//ここでDebug.Log(PlayerName);で確認しようとするとエラー
って所
なぜに?
全部の処理終わった最後に書いてもだめなのか。基本的に考え方間違ってそう
ここに書いてもダメ
こうなった
Nullってことはstertの処理してからprivate void PlayFabLogin_OnLoginSuccess(LoginResult result)をやってるって事なのか・・・
まだ理解できてないらしい
画面に得たデータを表示してみる
まずはテキストを表示画面に
でもゲットはできてるみたいだから、画面に表示してみよう
そして【Unity入門】1分でTextを表示しよう!スコアの表示まで簡単解説!こちらでお勉強
UIの所にテキストあるから選択しなさいある・・・が
ない
これ選ぶとちゃんと文字出ない
調べると、3Dの時に使える文字?フォントとか設定ダウンロードなんかいろいろめんどいみたい。3Dゲーム作るときに学ぼう
これを発見
うむ
求めてたのはこれだ
無事に張り付けられた
ちなみに、枠線?(表示範囲)を出すのに苦労した
この一番右上のにチェックして、シミュレーターで表示機種を選択したら出るようになりました
ちなみに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を実行する
}
}
}
結構時間かかった...
これを参考に取得して表示してみる
次回 データ表示より前にまたログイン処理で悩む