using UnityEngine; public class FootstepSounds : MonoBehaviour { [Header("Звуки ходьбы")] public AudioClip walkSounds; // Одиночный звук ходьбы [Header("Звуки бега")] public AudioClip runSounds; // Одиночный звук бега [Header("Настройки")] public float walkStepInterval = 0.6f; // Интервал между шагами при ходьбе (сек) public float runStepInterval = 0.3f; // При беге (быстрее) public AudioSource audioSource; // Публичное для GameUIManager private PlaerController playerController; private float nextStepTime = 0f; private bool isRunning = false; void Start() { audioSource = GetComponent(); playerController = GetComponent(); if (audioSource == null) Debug.LogError("AudioSource не найден на персонаже!"); if (playerController == null) Debug.LogError("PlaerController не найден на персонаже!"); audioSource.playOnAwake = false; // Убедимся, что звук не играет при старте audioSource.loop = false; // Без зацикливания } void Update() { if (playerController == null) return; // Проверяем движение с порогом для точности float moveX = Input.GetAxisRaw("Horizontal"); float moveY = Input.GetAxisRaw("Vertical"); bool isMoving = (Mathf.Abs(moveX) > 0.1f || Mathf.Abs(moveY) > 0.1f); isRunning = Input.GetKey(KeyCode.LeftShift) && isMoving && playerController.GetStamina() > 0; if (isMoving && Time.time >= nextStepTime) { PlayFootstep(); nextStepTime = Time.time + (isRunning ? runStepInterval : walkStepInterval); } else if (!isMoving && audioSource.isPlaying) { audioSource.Stop(); // Останавливаем звук при остановке nextStepTime = 0f; // Сбрасываем таймер Debug.Log("Шаги остановлены: персонаж стоит"); } } void PlayFootstep() { AudioClip sounds = isRunning ? runSounds : walkSounds; if (sounds != null) { audioSource.clip = sounds; audioSource.Play(); Debug.Log(isRunning ? "Шаг бега!" : "Шаг ходьбы!"); } else { Debug.LogWarning("Нет звука для " + (isRunning ? "бега" : "ходьбы")); } } }