65 lines
2.6 KiB
C#
65 lines
2.6 KiB
C#
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<AudioSource>();
|
||
playerController = GetComponent<PlaerController>();
|
||
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 ? "бега" : "ходьбы"));
|
||
}
|
||
}
|
||
} |