前回Androidの実機で確認しているときに、着手時に駒をアニメーションさせると、AIが思考中の待ち時間を感じにくくなることに気付いた。
効果を確認するために、駒のアニメーションを実装した。
Unityは、フレームごとの処理をオブジェクトのUpdateに記述するだけでアニメーションを実装できるため、簡単に実装できた。
ゲームエンジンを使わずにスクラッチで同様の処理を実装する場合、結構実装が大変である。
AIの思考中に非同期にアニメーションを行う
前回、コルーチンで非同期を実装したので、駒のプレファブにアニメーション用のスクリプトを追加して、着手時にアニメーションを開始して、Update()でTime.deltaTimeに応じて表示座標を計算するようにした。
void Update() { if (_isMoving) { _elapsed += Time.deltaTime; if (_elapsed > timeToMove) { _isMoving = false; this.transform.position = _position; return; } this.transform.position = _position - _velocity * (timeToMove - _elapsed); } } public void MoveFrom(Vector3 position) { _isMoving = true; _position = this.transform.position; _velocity = (this.transform.position - position) / timeToMove; _elapsed = Time.deltaTime; this.transform.position = position; }
これだけで、AIの思考中にアニメーションさせることができた。
Unityを使うと、表示周りの動的な処理が簡単である。
効果
プレイアウト64で3秒くらい思考させた場合にも、体感2秒くらいになった気がする(実際気のせいなのだが)。
効果音も付ければ、さらに効果が高まるのではないかと思う。
まとめ
着手時の駒のアニメーション処理を実装した。
Unityを使うと非同期のアニメーション処理を簡単に実装することができた。
だいぶ遊べるようになってきた。
次は形勢グラフの処理を実装したい。