94 lines
2.4 KiB
C#
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;
|
|
}
|
|
}
|
|
|