TadaoYamaokaの開発日記

個人開発しているスマホアプリや将棋AIの開発ネタを中心に書いていきます。

Unityで将棋アプリの開発 その4(駒のアニメーション)

前回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秒くらいになった気がする(実際気のせいなのだが)。
f:id:TadaoYamaoka:20220226133129g:plain

効果音も付ければ、さらに効果が高まるのではないかと思う。

まとめ

着手時の駒のアニメーション処理を実装した。
Unityを使うと非同期のアニメーション処理を簡単に実装することができた。

だいぶ遊べるようになってきた。
次は形勢グラフの処理を実装したい。