AIプログラムとかUnityゲーム開発について

探索や学習などを活用したAI系ゲームを作りたいと思います。

カードゲームを作ろう(12)

大富豪ゲームの制作。
ちょっと間があいてしまいましたが、キャラクターのアニメーションや視線移動など演出面を改良中です。


手札を配っている間はカードの方を見る
f:id:yasu9780:20161101010704p:plain

番が回ってきたプレイヤーの方を見ます。人間プレイヤーの手順では各キャラが全員こちらを見ます。
f:id:yasu9780:20161101010708p:plain

腕をIKで曲げてますが、足もIKで曲げているので、座っている感じになっています(膝は操作できない)
f:id:yasu9780:20161101010712p:plain

カードが無くなると上がりなので、勝利ポーズをとります。
ビリの人は悲観にくれます (´・ω・`)
f:id:yasu9780:20161101010716p:plain

スマホでも動かせます。液晶がフルHDなのでレイアウト的問題はないですね。
もっと違う解像度でどうなるか検証がいります。
f:id:yasu9780:20161101013515j:plain


素晴らしいことに、SetLookAtPositionで、眼球から頭、首、体まで、特定のターゲットにむけて動かしてくれます。
weightで変化量を指定できますので、この値を徐々に増やせば徐々に動きます。
ただ、IKで無理やり関節動かしてると既存のアニメーションがおかしくなるので、いろいろと改良の余地あり。

    void OnAnimatorIK(int layerIndex)
    {
        anime.SetLookAtWeight(
            weight, // 全体的な関節への影響
            bodyWeight: 0.3f,
            headWeight: 0.8f,
            eyesWeight: 1.0f,
            clampWeight: 0.3f // 無理をしない度
        );
        // ターゲットの方を向く
        anime.SetLookAtPosition(LookTarget);
}

手足を動かすのは、以前、足の着地をやりましたが、以下のような感じ

    void OnAnimatorIK(int layerIndex)
    {
        setIK(AvatarIKGoal.RightHand, transform.forward * 3f + Vector3.up * 2f );
        setIK(AvatarIKGoal.LeftHand, transform.forward * 3f + Vector3.up * 2f);

       setIK(AvatarIKGoal.RightFoot,  Vector3.up * 7f);
        setIK(AvatarIKGoal.LeftFoot, Vector3.up * 7f);
    }
    void setIK(AvatarIKGoal goal,Vector3 pos)
    {
        anime.SetIKPosition(goal, anime.GetIKPosition(goal) + pos);
        anime.SetIKPositionWeight(goal, 1f);
    }
}