Untitled

mail@pastecode.io avatar
unknown
csharp
2 years ago
1.7 kB
3
Indexable
Never
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AI;

public class Navmesh_Breaks : MonoBehaviour
{
    public float lerpMove;

    private Quaternion previusRotation;
    private Quaternion currentRotation;
    public float lerpTurn;

    public float currentTurnSpeed;

    [SerializeField]
    Animator animator;
    NavMeshAgent agent;

    private float agentSpeed;
    private float agentTurnSpeed;
    void Start()
    {
        previusRotation = transform.rotation;

        agent = GetComponent<NavMeshAgent>();
        agentSpeed = agent.speed;
        agentTurnSpeed = agent.angularSpeed;
    }

    // Update is called once per frame
    void Update()
    {
        AdjustSpeed();
        Animate();
    }

    void AdjustSpeed()
    {
        if (angleToVelocity > 89 && agent.speed == agentSpeed)
        {
            agent.speed = 0;
        }

        else if (angleToVelocity < 90 && agent.speed != agentSpeed)
        {
            agent.speed = agentSpeed;
        }
    }

    void Animate()
    {
        lerpMove = agent.velocity.magnitude / agentSpeed;


        currentRotation = transform.rotation * Quaternion.Inverse(previusRotation);
        previusRotation = transform.rotation;

        lerpTurn = Quaternion.Angle(transform.rotation, currentRotation);
    }

    float agentVelocity
    {
        get
        {
            return agent.velocity.magnitude;
        }
    }

    float angleToVelocity
    {
        get
        {
            return Vector3.Angle(transform.forward, agent.desiredVelocity);
        }
    }
}