uGUI
・TextMeshPro ※ver2019頃実装。検索時には”TextMeshPro”で行う。
・Button
・Image
Script(参照に使う関数)
・GameObject.Find ※
・GetComponent ※
Hierarchy(右クリック)⇒UI 配下が部品。
・Unityでの「入力」は「UI」を使わないとできない(Input等の標準入力は使えない)
・UIのオブジェクトは「Canvas」配下に配置しないと表示されない
・「EventSystem」が自動生成されるが、これは消去しないこと。
・TextMeshPro
デフォルトでは日本語非対応
フォントデータからアセットを作成することは可能
●TextMeshProのいじり方
テキストを、ゲーム進行に応じて「変更する」場合に「参照」が必要になる。
publicで変数を作るとInspectorに表示される…publicで変数を作ると参照が可能
変数宣言時にコンポーネントの型を記載すればOK
ただし…TextMeshProの場合「TextMeshProUGUI」が型名になるので注意。
●TextMeshProコンポーネント型の変数を宣言 ⇒ Inspectorの変数名の欄にObjectをドロップ
※.csファイル側の冒頭に”using TMPro;”の記載が必要
using TMPro;
~~~~~~~~~~~~~~~~~~~~~~~~~~
public TextMeshProUGUI rivalDiceText;
public TextMeshProUGUI playerDiceText;
~~~~~~~~~~~~~~~~~~~~~~~~~~
void Start()
{
// 状態①から開始
GameState = eGameState.GAME_STATE_NUMFIX_1;
rivalDiceText.text = "0";
playerDiceText.text = (0+2).ToString();
}
これで、代入した数字が表示されるようになる。
ダイス目の初期値を表示できるようにしてみる。
void Start()
{
// 状態①から開始
GameState = eGameState.GAME_STATE_NUMFIX_1;
rivalDiceText.text = RivalDice.ToString();
playerDiceText.text = PlayerDice.ToString();
}
※この方法で参照できるのは、Scene上に存在するオブジェクトか、Asset上のものに限る。
途中で生成されたオブジェクトは参照できない。

とりあえずTextを適宜配置。
コードも修正
using System.Collections;
using TMPro;
using Unity.Burst.Intrinsics;
using UnityEngine;
// ゲームの管理クラス
public class GameManager : MonoBehaviour
{
// メンバー変数を宣言
public enum eGameState
{
GAME_STATE_NUMFIX_1,
GAME_STATE_NUMFIX_2,
GAME_STATE_BATTLE,
GAME_STATE_RESULT,
}
public TextMeshProUGUI rivalDiceText;
public TextMeshProUGUI playerDiceText;
public eGameState GameState;
public int PlayerDice = 0; //プレイヤーの出目を保存する変数
public int RivalDice = 0; //相手の出目を保存する変数
public bool winFlag = false; //勝利フラグ(勝ち==true、負け==false)
// Start is called once before the first execution of Update after the MonoBehaviour is created
void Start()
{
// 状態①から開始
GameState = eGameState.GAME_STATE_NUMFIX_1;
rivalDiceText.text = RivalDice.ToString();
playerDiceText.text = PlayerDice.ToString();
}
// Update is called once per frame
void Update()
{
switch (GameState)
{
case eGameState.GAME_STATE_NUMFIX_1:
//勝ちフラグをリセットしてから始める
winFlag = false;
RivalDice = Random.Range(1, 6); // 相手の出目にランダムな値(1~6)を代入
Debug.Log("相手の出目を決めます。1~6>>>"+ RivalDice);
rivalDiceText.text = RivalDice.ToString(); //出目を表示(ライバル)
playerDiceText.text = "??";
GameState = eGameState.GAME_STATE_NUMFIX_2; // 状態②に変更
break;
case eGameState.GAME_STATE_NUMFIX_2:
Debug.Log("自分の出目を決めます。1~6");
PlayerDice = Random.Range(1, 6); //自分の出目にランダムな値(1~6)を代入
GameState = eGameState.GAME_STATE_BATTLE; //状態③に変更
break;
case eGameState.GAME_STATE_BATTLE:
Debug.Log("上か、下か、を決めます。");
if (PlayerDice == RivalDice)
{
Debug.Log("Player:"+PlayerDice+"Rival:"+RivalDice);
playerDiceText.text = PlayerDice.ToString(); //出目を表示(ユーザー)
GameState = eGameState.GAME_STATE_NUMFIX_1; //出目が同じ場合に、状態①に戻る
}
bool inputHigh = Input.GetKeyDown(KeyCode.UpArrow);
if (inputHigh == true)
{
if (PlayerDice > RivalDice)
{
Debug.Log("Player:"+PlayerDice);
playerDiceText.text = PlayerDice.ToString(); //出目を表示(ユーザー)
winFlag = true; //勝ちフラグを立てる
}
else
{
Debug.Log("Player:"+PlayerDice);
playerDiceText.text = PlayerDice.ToString(); //出目を表示(ユーザー)
winFlag = false; //勝ちフラグを折る
}
GameState = eGameState.GAME_STATE_RESULT; //状態④に変更
}
bool inputLow = Input.GetKeyDown(KeyCode.DownArrow);
if (inputLow == true)
{
if (PlayerDice < RivalDice)
{
Debug.Log("Player:"+PlayerDice);
playerDiceText.text = PlayerDice.ToString(); //出目を表示(ユーザー)
winFlag = true; //勝ちフラグを立てる
}
else
{
Debug.Log("Player:"+PlayerDice);
playerDiceText.text = PlayerDice.ToString(); //出目を表示(ユーザー)
winFlag = false; //勝ちフラグを折る
}
GameState = eGameState.GAME_STATE_RESULT; //状態④に変更
}
break;
case eGameState.GAME_STATE_RESULT:
Debug.Log("結果を表示します");
if (winFlag == true)
{
Debug.Log("YouWin!");
}
else
{
Debug.Log("YouLose!");
}
GameState = eGameState.GAME_STATE_NUMFIX_1; //状態①に戻る
break;
default:
break;
}
}
}
なお、授業進行的には、ユーザーの出目は
playerDiceText.gameObject.SetActive(false);
で隠している(オブジェクト自体を非アクティブにできる)。
(オブジェクト名).gameObject.SetActive(true/false);で、オブジェクトを表示したり、非表示にしたり切り替えが可能。
Win/Loseも追加してみる。(TextMeshPro(result)を作成して宣言。アタッチも忘れずに。)
using System.Collections;
using NUnit.Framework.Interfaces;
using TMPro;
using Unity.Burst.Intrinsics;
using UnityEngine;
// ゲームの管理クラス
public class GameManager : MonoBehaviour
{
// メンバー変数を宣言
public enum eGameState
{
GAME_STATE_NUMFIX_1,
GAME_STATE_NUMFIX_2,
GAME_STATE_BATTLE,
GAME_STATE_RESULT,
}
public TextMeshProUGUI rivalDiceText;
public TextMeshProUGUI playerDiceText;
public TextMeshProUGUI resultText;
public eGameState GameState;
public int PlayerDice = 0; //プレイヤーの出目を保存する変数
public int RivalDice = 0; //相手の出目を保存する変数
public bool winFlag = false; //勝利フラグ(勝ち==true、負け==false)
// Start is called once before the first execution of Update after the MonoBehaviour is created
void Start()
{
// 状態①から開始
GameState = eGameState.GAME_STATE_NUMFIX_1;
rivalDiceText.text = RivalDice.ToString();
playerDiceText.text = PlayerDice.ToString();
}
// Update is called once per frame
void Update()
{
switch (GameState)
{
case eGameState.GAME_STATE_NUMFIX_1:
//勝ちフラグをリセットしてから始める
winFlag = false;
RivalDice = Random.Range(1, 6); // 相手の出目にランダムな値(1~6)を代入
Debug.Log("相手の出目を決めます。1~6>>>"+ RivalDice);
rivalDiceText.text = RivalDice.ToString(); //出目を表示(ライバル)
playerDiceText.text = "??";
GameState = eGameState.GAME_STATE_NUMFIX_2; // 状態②に変更
break;
case eGameState.GAME_STATE_NUMFIX_2:
Debug.Log("自分の出目を決めます。1~6");
PlayerDice = Random.Range(1, 6); //自分の出目にランダムな値(1~6)を代入
GameState = eGameState.GAME_STATE_BATTLE; //状態③に変更
break;
case eGameState.GAME_STATE_BATTLE:
Debug.Log("上か、下か、を決めます。");
if (PlayerDice == RivalDice)
{
Debug.Log("Player:"+PlayerDice+"Rival:"+RivalDice);
playerDiceText.text = PlayerDice.ToString(); //出目を表示(ユーザー)
GameState = eGameState.GAME_STATE_NUMFIX_1; //出目が同じ場合に、状態①に戻る
}
bool inputHigh = Input.GetKeyDown(KeyCode.UpArrow);
if (inputHigh == true)
{
if (PlayerDice > RivalDice)
{
Debug.Log("Player:"+PlayerDice);
playerDiceText.text = PlayerDice.ToString(); //出目を表示(ユーザー)
winFlag = true; //勝ちフラグを立てる
}
else
{
Debug.Log("Player:"+PlayerDice);
playerDiceText.text = PlayerDice.ToString(); //出目を表示(ユーザー)
winFlag = false; //勝ちフラグを折る
}
GameState = eGameState.GAME_STATE_RESULT; //状態④に変更
}
bool inputLow = Input.GetKeyDown(KeyCode.DownArrow);
if (inputLow == true)
{
if (PlayerDice < RivalDice)
{
Debug.Log("Player:"+PlayerDice);
playerDiceText.text = PlayerDice.ToString(); //出目を表示(ユーザー)
winFlag = true; //勝ちフラグを立てる
}
else
{
Debug.Log("Player:"+PlayerDice);
playerDiceText.text = PlayerDice.ToString(); //出目を表示(ユーザー)
winFlag = false; //勝ちフラグを折る
}
GameState = eGameState.GAME_STATE_RESULT; //状態④に変更
}
break;
case eGameState.GAME_STATE_RESULT:
Debug.Log("結果を表示します");
if (winFlag == true)
{
Debug.Log("YouWin!");
resultText.color = new Color(255, 0, 0);
resultText.text = "You Win!!";
}
else
{
Debug.Log("YouLose!");
resultText.color = new Color(0, 0, 255);
resultText.text = "You Lose!!";
}
if (Input.GetKeyDown(KeyCode.Return))
{
GameState = eGameState.GAME_STATE_NUMFIX_1; //状態①に戻る
resultText.color = new Color(255, 255, 255);
resultText.text = "";
}
break;
default:
break;
}
}
}
コメント