今日やったこと
ワーキングメモリートレーニング
人気ゲーム分析
キミガシネ
勉強
- Adaptive Code
ゲーム開発
爆風との当たり判定(修正)
昨日作った爆風との当たり判定を管理するクラス、BlastHitterクラスを少し修正しました。
using UnityEngine; using Manager; using Zenject; using UniRx; using UniRx.Triggers; namespace Player { public class BlastHitter : MonoBehaviour { [Inject] private AgentStateManager agentStateManager; private void Start() { this.OnTriggerEnterAsObservable() .Where(collision => collision.tag == "Explosion") .Subscribe(_ => agentStateManager.SetPlayerState(AgentState.Collapse)); } } }
HPの管理
HPを管理するPlayerHPクラスを作成しました。
using UnityEngine; using UniRx; using UniRx.Triggers; using Manager; using Zenject; namespace Player { public class PlayerHP : MonoBehaviour { private ReactiveProperty<float> hp = new ReactiveProperty<float>(100.0f); [Inject] private AgentStateManager agentStateManager; // Start is called before the first frame update void Start() { this.agentStateManager .CurrentPlayerState .Where(state => state == AgentState.Collapse) .Subscribe(_ => this.hp.Value -= 20.0f) .AddTo(this); } } }
倒れている状態から起き上がる処理
Collapse状態からIdle状態へ自動で遷移する処理を行う、CollapseToPlayerクラスを作成しました。
using UnityEngine; using UniRx; using Zenject; using Manager; using System; namespace Player { public class CollapseToIdle : MonoBehaviour { [Inject] AgentStateManager agentStateManager; // Start is called before the first frame update void Start() { agentStateManager .CurrentPlayerState .Where(state => state == AgentState.Collapse) .Delay(TimeSpan.FromSeconds(1.0f)) .Subscribe(_ => agentStateManager.SetPlayerState(AgentState.Idle)) .AddTo(this); } } }
報酬を与える
自分の体力が0になると、0の報酬を自分に与え、敵に1の報酬を与えます。
また、同じように相手の体力が0になると、相手に0の報酬を与え、自分に1の報酬を与えます。
(現段階では1対1の対戦ゲームを考えています)
using System.Collections; using System.Collections.Generic; using UnityEngine; using UniRx; using Zenject; using Manager; namespace Player { public class ResultStateJudger : MonoBehaviour { private PlayerHP playerHP; private RobotAgent robotAgent; private PlayerHP enemyHP; private RobotAgent enemyAgent; // Start is called before the first frame update private void Start() { playerHP = this.GetComponent<PlayerHP>(); robotAgent = this.GetComponent<RobotAgent>(); enemyHP = robotAgent.Enemy.GetComponent<PlayerHP>(); enemyAgent = robotAgent.Enemy.GetComponent<RobotAgent>(); JudgeResult(); } private void JudgeResult() { playerHP .hp .Where(x => x <= 0.0f) .Subscribe(_ => { Debug.Log(robotAgent.gameObject.name + "GetReward!"); robotAgent.SetReward(0.0f); robotAgent.Done(); }) .AddTo(this); enemyHP .hp .Where(x => x <= 0.0f) .Subscribe(_ => { Debug.Log(enemyAgent.gameObject.name + "LoseReward"); robotAgent.SetReward(1.0f); robotAgent.Done(); }) .AddTo(this); } } }
クラス図
今日のパフォーマンス
JINS MEME ESという最新の学術研究の成果を元に人間の心理状態を測定できるウェアラブルデバイスを使って本日の僕の集中状態を測定した結果は以下のようになりました。
作業時間 10h29m
集中時間 3h23m
集中率 32%