【Unity】ナビメッシュエージェントを自然に振り向かせる #1

投稿者: | 2020-07-09

攻撃後の敵がプレイヤーの方へ振り向く動作が少し不自然なので、振り向くアニメーションを追加してみます。

まずBlenderで左右に振り向くアニメーションを作りました。

今回はとりあえず攻撃した後必ずターンするようにしました。

ターンする方向は敵の右方向と、敵からプレイヤーへの方向から決めます。

Vector3 pos = player.position;
pos.y = transform.position.y;
// プレイヤーが敵の左側にいるとき
if (Vector3.Dot(pos - transform.position, transform.right) < 0)
{
    animator.SetBool("TurnLeft", true);
}
else {

    animator.SetBool("TurnLeft", false);

}

その後、ターン中に敵がプレイヤーの方へ向いたらターンをやめて歩きはじめるようにしました。

else if(animator.GetCurrentAnimatorStateInfo(0).IsName("TurnLeft") || animator.GetCurrentAnimatorStateInfo(0).IsName("TurnRight"))
{

    Vector3 pos = player.position;
    pos.y = transform.position.y;
    float d = Vector3.Dot(pos - transform.position, transform.forward);

    // 敵がプレイヤーの方を向いたとき
    if (d >= 0.5f)
    {
        agent.isStopped = false; // 動きを再開
        animator.SetTrigger("EndTurn");
    }           

}

すると、敵がターンした後その状態のまま止まってしまい。プレイヤーが敵の後ろに回り込むと歩きはじめるようになりました。

シーンビューで見ると、敵のボーンがこちらを振り向いても、ナビメッシュエージェントコンポーネントがついているルートのオブジェクトは振り向いていないことがわかります。

ボーンではなく、ルートのオブジェクトを回転させると良いかもしれません。

コメントを残す

メールアドレスが公開されることはありません。