Unity_1lab/1 laba/Assets/Scripts/FootstepSounds.cs
2025-09-15 19:16:35 +03:00

65 lines
2.6 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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 ? "бега" : "ходьбы"));
}
}
}