英文:
How can I pace my walking sound in Unity?
问题
我尝试为我的Unity角色添加行走声音,当检测到移动输入时,它起作用,但声音触发得太快,我想要间隔一下。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class WalkingSound : MonoBehaviour
{
// Start is called before the first frame update
[SerializeField] private AudioSource audioSource;
private void Update() {
if(Input.GetKey(KeyCode.W) || Input.GetKey(KeyCode.A) || Input.GetKey(KeyCode.S) || Input.GetKey(KeyCode.D) ) {
audioSource.enabled = true;
} else {
audioSource.enabled = false;
}
}
}
当我尝试使用带有时间延迟的枚举器时,音频根本不播放,但使用上面的基本脚本时却可以播放。有任何想法吗?
英文:
I tried to add a walking sound to my unity character when the movement input is detected, it works, however, the sound is triggering too rapidly and I'd like to pace it out.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class WalkingSound : MonoBehaviour
{
// Start is called before the first frame update
[SerializeField] private AudioSource audioSource;
private void Update() {
if(Input.GetKey(KeyCode.W) || Input.GetKey(KeyCode.A) || Input.GetKey(KeyCode.S) || Input.GetKey(KeyCode.D) ) {
audioSource.enabled = true;
} else {
audioSource.enabled = false;
}
}
}
When I try to use an enumerator with a time delay the audio doesn't play at all, but it does with the basic script above. Any ideas?
答案1
得分: 1
Using animation event is a good solution to your problem but if you are not using any sort of animation, u can just use coroutine and play the sound with some delay.
example:
private playSoundCoroutine;
private void Update ()
{
if (Input.GetKey (KeyCode.W) || Input.GetKey (KeyCode.A) || Input.GetKey (KeyCode.S) || Input.GetKey (KeyCode.D)){
if (playSoundCoroutine == null)
playSoundCoroutine = StartCoroutine (PlayWalkSound (delayDuration));
}
else{
playSoundCoroutine == null;
audioSource.enabled = false;
}
}
private IEnumerator PlayWalkSound (float delay)
{
//or use WaitUntil
yield return new WaitForSeconds (delay);
PlaySound ();
playSoundCoroutine = null;
}
above example code worked for me, i called this whenever player made
some movement and remember to set delay as per your preference and it
might need to be changed for also inAirMovement or sprint
英文:
Using animation event is a good solution to your problem but if you are not using any sort of animation ,u can just use coroutine and play the sound with some delay.
example:
private playSoundCoroutine;
private void Update ()
{
if (Input.GetKey (KeyCode.W) || Input.GetKey (KeyCode.A) || Input.GetKey (KeyCode.S) || Input.GetKey (KeyCode.D)){
if (playSoundCoroutine == null)
playSoundCoroutine = StartCoroutine (PlayWalkSound (delayDuration));
}
else{
playSoundCoroutine == null;
audioSource.enabled = false;
}
}
private IEnumerator PlayWalkSound (float delay)
{
//or use WaitUntil
yield return new WaitForSeconds (delay);
PlaySound ();
playSoundCoroutine = null;
}
> above example code worked for me,i called this whenever player made
> some movement and remember to set delay as per your preference and it
> might need to be changed for also inAirMovement or sprint
答案2
得分: 0
只需取消音频源上的“循环复选框”并为您的行走动画添加一个“动画事件”以播放音频源。
英文:
Just uncheck Loop Checkbox on AudioSource and add a Animation Event to your Walking animation to play AudioSource
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论