今日やったこと
ワーキングメモリートレーニング
瞑想
鬼ネズミ、鬼計算、鬼耳算、計算20、計算100をやりました。
難易度10と11を中心に120問
ゲーム分析
かなり面白いです。
ゲーム開発
GameStageManagerクラスを変更
昨日はゲームの状態をGameState
型にしていましたが、これをReactiveProperty<GameState>
型に変更しました。
using UniRx; public class GameStateManager { //GameState.Homeで初期化 private ReactiveProperty<GameState> currentGameState = new ReactiveProperty<GameState>(GameState.Home); public IReadOnlyReactiveProperty<GameState> CurrentGameState { get { return currentGameState; } } //状態を変更 public void SetGameState(GameState state) { currentGameState.Value = state; } }
スタートボタンの動作の実装
昨日まではスタートボタンはただのオブジェクトだったので、ボタンとしての機能を追加しました。
具体的な機能は単純で、
スタートボタンを押すと、状態がStartに遷移し、ホーム画面のUI(HomeUI)がフェードアウトしていく、というものです。
フェードアウトの処理はDOTweenを使って書きました。
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using Zenject; using DG.Tweening; public class StartButton : MonoBehaviour { private Button button; [Inject] private GameStateManager gameStateManager; [SerializeField] private CanvasGroup HomeUI; // Start is called before the first frame update void Start() { button = this.GetComponent<Button>(); button.onClick.AddListener(PushStartButton); } private void PushStartButton() { //HomeUIをフェードアウトさせる。 //アニメーション終了時にStartGame()を実行 HomeUI .DOFade(0, 1.0f) .OnComplete(StartGame); } private void StartGame() { //GameStateの更新 gameStateManager.SetGameState(GameState.Start); HomeUI.gameObject.SetActive(false); } }
カウントダウンボタンの表示
スタートボタンを押すと、状態がStartに遷移します。
Start状態に遷移するとカウントダウンが始まるようにしたいので、カウントダウンのテキストを作成しました。
Start状態ならこのテキストを表示、Start状態でないならこのテキストを非表示にする、という処理をするStartUIControllerクラスを作成しました。
using UnityEngine; using UniRx; using Zenject; public class StartUIController: MonoBehaviour { [Inject] private GameStateManager gameStateManager; // Start is called before the first frame update void Start() { DisplayCountDownUI(); HideCountDownUI(); } //Start状態ならCountDownUIを表示 private void DisplayCountDownUI() { gameStateManager .CurrentGameState .Where(state => state == GameState.Start) .Subscribe(_ => this.gameObject.SetActive(true)) .AddTo(this); } //Start状態でないならCountDownUIを非表示にする private void HideCountDownUI() { gameStateManager .CurrentGameState .Where(state => state != GameState.Start) .Subscribe(_ => this.gameObject.SetActive(false)) .AddTo(this); } }
HomeUIも同じように表示、非表示を管理した方がいいなと思って同じような処理を行うHomeUIControllerクラスも作成しました。
using System.Collections; using System.Collections.Generic; using UnityEngine; using UniRx; using Zenject; public class HomeUIController : MonoBehaviour { [Inject] private GameStateManager gameStateManager; // Start is called before the first frame update void Start() { DisplayHomeUI(); HideHomeUI(); } //Start状態ならHomeUIを表示 private void DisplayHomeUI() { gameStateManager .CurrentGameState .Where(state => state == GameState.Home) .Subscribe(_ => this.gameObject.SetActive(true)) .AddTo(this); } //Start状態でないならHomeUIを非表示にする private void HideHomeUI() { gameStateManager .CurrentGameState .Where(state => state != GameState.Home) .Subscribe(_ => this.gameObject.SetActive(false)) .AddTo(this); } }
今日はここまでです。
クラス図はこんな感じになってます。
結果
JINS MEME ESという最新の学術研究の成果を元に人間の心理状態を測定できるウェアラブルデバイスを使って本日の僕の集中状態を測定した結果は以下のようになりました。
作業時間 8時間44分
集中時間 2時間35分
集中率 30%
反省
今日は少し怠けてしまったようです。
反省点としては、
こまめに休憩を取り、瞑想を行う
腰に負担をかけないような姿勢を保つ
スマホ禁を守る
という感じです。明日も頑張ります。