Files
Virtual-Tutor/Unity/Assets/Scripts/DisableNPCMovement.cs
2025-11-13 11:58:34 +01:00

94 lines
2.4 KiB
C#

using UnityEngine;
using UnityEngine.AI;
/// <summary>
/// Simple script to disable NPC leg movement by disabling NavMeshAgent and preventing walking animations
/// </summary>
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<NavMeshAgent>();
animator = GetComponent<Animator>();
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;
}
}
}
/// <summary>
/// Call this method to toggle movement on/off
/// </summary>
public void ToggleMovement()
{
disableMovement = !disableMovement;
}
/// <summary>
/// Call this method to enable movement
/// </summary>
public void EnableMovement()
{
disableMovement = false;
}
/// <summary>
/// Call this method to disable movement
/// </summary>
public void DisableMovement()
{
disableMovement = true;
}
}