5/21記録

今日やったこと

ワーキングメモリーレーニン

鬼ネズミ、鬼計算、鬼耳算、計算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状態に遷移するとカウントダウンが始まるようにしたいので、カウントダウンのテキストを作成しました。

f:id:alberto_hojo:20190521224257p:plain

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);
    }
}

今日はここまでです。

クラス図はこんな感じになってます。

f:id:alberto_hojo:20190522000121p:plain

結果

JINS MEME ESという最新の学術研究の成果を元に人間の心理状態を測定できるウェアラブルバイスを使って本日の僕の集中状態を測定した結果は以下のようになりました。

f:id:alberto_hojo:20190521233851p:plain

作業時間 8時間44分

集中時間 2時間35分

集中率 30%

反省

今日は少し怠けてしまったようです。

反省点としては、

  • こまめに休憩を取り、瞑想を行う

  • 腰に負担をかけないような姿勢を保つ

  • スマホ禁を守る

という感じです。明日も頑張ります。