using UnityEngine; using UnityEngine.AI; /// /// Simple script to disable NPC leg movement by disabling NavMeshAgent and preventing walking animations /// public class DisableNPCMovement : MonoBehaviour { [Header("Movement Control")] [Tooltip("If enabled, NPC will not be able to move (legs will stay still)")] public bool disableMovement = true; private NavMeshAgent navMeshAgent; private Animator animator; private bool wasNavMeshEnabled; private float originalSpeed; private void Start() { navMeshAgent = GetComponent(); animator = GetComponent(); if (navMeshAgent != null) { wasNavMeshEnabled = navMeshAgent.enabled; originalSpeed = navMeshAgent.speed; } UpdateMovementState(); } private void Update() { UpdateMovementState(); } private void UpdateMovementState() { if (disableMovement) { // Disable NavMeshAgent to prevent movement if (navMeshAgent != null && navMeshAgent.enabled) { navMeshAgent.enabled = false; } // Force idle animation to prevent walking if (animator != null) { // Check if currently playing walking animation AnimatorStateInfo stateInfo = animator.GetCurrentAnimatorStateInfo(0); if (stateInfo.IsName("Walking") || animator.GetBool("Walking")) { animator.CrossFade("Idle", 0.1f); } } } else { // Re-enable NavMeshAgent if it was previously enabled if (navMeshAgent != null && wasNavMeshEnabled) { navMeshAgent.enabled = true; navMeshAgent.speed = originalSpeed; } } } /// /// Call this method to toggle movement on/off /// public void ToggleMovement() { disableMovement = !disableMovement; } /// /// Call this method to enable movement /// public void EnableMovement() { disableMovement = false; } /// /// Call this method to disable movement /// public void DisableMovement() { disableMovement = true; } }