編輯:答案必須改變一批,由於留下它的意見。覆蓋所有內容是有意義的。
您需要一個參考指向所有的AudioSource
。將另一個腳本(PlayerManager
)中的每個ClickAction
實例存儲在List
中。在播放音頻之前,請循環播放List
,如果正在播放,請停止播放。之後,您可以播放音頻。
另外,您當前每次播放音頻時都會撥打Resources.Load
。這在性能方面並不好。您應該在Start()
函數中執行一次,然後在需要時播放它。此外,您的gameObject.AddComponent<AudioSource>()
代碼也只能被調用一次。
您的新ClickAction
腳本:
public class ClickAction : MonoBehaviour
{
public AudioSource audioSource;
public AudioClip audioClip;
private string[,] levelWords;
//public static string glupiaZmienna;
public Text txt;
public AudioSource clickAudioSource;
PlayerManager playerManager = null;
void Start()
{
//Get PlayerManager from PlayerManager GameObject
playerManager = GameObject.Find("PlayerManager").GetComponent<PlayerManager>();
clickAudioSource = gameObject.AddComponent<AudioSource>();
clickAudioSource.clip = (AudioClip)Resources.Load(a + "/" + WordsLoader.language + "/Sounds/" + gameObject.name);
//Register this Script to the PlayerManager
playerManager.addClickAction(this);
}
public void OnPointerClick(PointerEventData eventData)
{
Debug.Log(gameObject.name);
WordsLoader w = new WordsLoader();
levelWords = w.wLevelWords;
SetCategoryButton scb = new SetCategoryButton();
int a = scb.Kategoria;
zupa();
//Play Audio
playAudio();
// txt = gameObject.GetComponent<Text>();
}
private void playAudio()
{
playerManager.playAudio(clickAudioSource);
}
public void stopAudio()
{
//If not null and playing then stop audio
if (clickAudioSource != null && clickAudioSource.isPlaying)
{
clickAudioSource.Stop();
}
}
public void zupa()
{
WordsLoader w = new WordsLoader();
SetCategoryButton scb = new SetCategoryButton();
int a = scb.Kategoria;
print(w.wHowManyWords);
for (int i = 0; i < w.wHowManyWords; i++)
{
print("jestem tu");
if (levelWords[i, 0] == gameObject.name)
{
txt = GameObject.Find("Text").GetComponent<Text>(); ;
txt.text = levelWords[i, 2];
}
}
}
void OnDisable()
{
//Un-Register this Script from the PlayerManager when it is destroyed
playerManager.removeClickAction(this);
}
}
PlayerManager
腳本。創建一個遊戲物體稱爲PlayerManager
,然後在下方附上它的腳本:
public class PlayerManager : MonoBehaviour
{
List<ClickAction> clickActions = new List<ClickAction>();
public void addClickAction(ClickAction clickActionToAdd)
{
//Adds clickActionToAdd if it does not exist in the List already
if (!clickActions.Contains(clickActionToAdd))
{
clickActions.Add(clickActionToAdd);
}
}
public void removeClickAction(ClickAction clickActionToAdd)
{
//Removes clickActionToAdd if it exist in the List
if (clickActions.Contains(clickActionToAdd))
{
clickActions.Add(clickActionToAdd);
}
}
public bool clickActionExist(ClickAction clickActionToAdd)
{
//Removes clickActionToAdd if it exist in the List
return clickActions.Contains(clickActionToAdd);
}
public void playAudio(AudioSource audSource)
{
//Stop Other Audio
stopAllClickActionAudio();
//Now, play the one that was passed in
audSource.Play();
}
void stopAllClickActionAudio()
{
//Stop Audio on every ClickAction script
for (int i = 0; i < clickActions.Count; i++)
{
clickActions[i].stopAudio();
}
}
}
當playAudio
函數被調用時,它會停止所有音頻從存儲在List
AudioSource
,那麼它會播放當前AudioSource
那被傳入它。
請詳細解釋您的問題。這一行問題不能回答。哪些音頻停止播放哪一個? – Programmer
這段代碼是每次在同一個GameObject上運行還是在不同的GameObject上運行? – Programmer
這是相同的遊戲對象 – Quicki