前回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を使うと非同期のアニメーション処理を簡単に実装することができた。
だいぶ遊べるようになってきた。
次は形勢グラフの処理を実装したい。