В настоящее время я сталкиваюсь с проблемами анимации и звуковых эффектов (sfx), поскольку они не синхронизируются.
Звуковой эффект стрельбы воспроизводится между воспроизведением анимации.
Ниже приведен мой основной сценарий оружия и объект сценария, который он использует:
Код: Выделить всё
using System.Collections;
using UnityEngine;
public class Gun : MonoBehaviour
{
public GunsSO GunData;
public Animator gun_animator;
int current_ammo;
bool isReloading = false;
float nextTimeToFire = 0f;
public AudioSource shoot_sfx;
public AudioSource reload_sfx;
private void Start()
{
current_ammo = GunData.mag_size;
}
private void Update()
{
// Shoot
if (Input.GetMouseButtonDown(0))
{
TryShoot();
}
// Reload
if (Input.GetKeyDown(KeyCode.R))
{
TryReload();
}
}
void TryReload()
{
if (!isReloading && current_ammo < GunData.mag_size)
{
StartCoroutine(Reload());
}
}
IEnumerator Reload()
{
isReloading = true;
// Optional: play reload animation
if (gun_animator != null)
{
gun_animator.SetTrigger("Reload");
}
reload_sfx.Play();
yield return new WaitForSeconds(GunData.reloading_time);
current_ammo = GunData.mag_size;
isReloading = false;
}
void TryShoot()
{
if (isReloading)
return;
if (current_ammo = nextTimeToFire)
{
nextTimeToFire = Time.time + GunData.shoot_time;
HandleShoot();
}
}
void HandleShoot()
{
current_ammo--;
// Play shoot animation using trigger
if (gun_animator != null)
{
gun_animator.SetTrigger("Shoot");
}
if (!shoot_sfx.isPlaying)
{
shoot_sfx.Play();
}
}
}
Код: Выделить всё
using UnityEngine;
[CreateAssetMenu(fileName = "GunsSO", menuName = "Scriptable Objects/GunsSO")]
public class GunsSO : ScriptableObject
{
public string Name;
public float shoot_time;
public float reloading_time;
public int mag_size;
public AudioSource shoot_sfx;
}
Должен ли звуковой эффект выстрела иметь ту же длину, что и анимация выстрела?
Самое главное, как профессионалы справляются с этой ситуацией?