這一篇文章主要是想分享 Unity的場景切換,那切換到不同的場景,要怎麼樣使用上一個場景所帶來的資料。

SongSelect Scene

按下Start按鈕開始,要把資料帶到下一個遊戲頁面。

MusicData.cs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
<div></div>
[CreateAssetMenu(fileName = "MusicData", menuName = "Rhythm/MusicData")]
public class MusicData : ScriptableObject
{
public string musicName;
public string author;
public AudioClip audioClip;
public Sprite coverImage;
public int bpm;
public float length;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

[CreateAssetMenu(fileName = "MusicData", menuName = "Rhythm/MusicData")]
public class MusicData : ScriptableObject
{
public string musicName;
public string author;
public AudioClip audioClip;
public Sprite coverImage;
public int bpm;
public float length;
}

SongDetailUI.cs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;
<div></div>
public class SongDetailUI : MonoBehaviour
{
public Image coverImage;
public TMPro.TextMeshProUGUI titleText;
public TMPro.TextMeshProUGUI artistText;
public TMPro.TextMeshProUGUI infoText;
private MusicData current;
<div></div>
public void ShowMusic(MusicData music)
{
current = music;
// 將音樂資料帶入右邊的detail UI
coverImage.sprite = music.coverImage;
titleText.text = music.musicName;
artistText.text = music.author;
infoText.text = $"BPM: {music.bpm} Length: {music.length}";
}
<div></div>
public void Btn_Play() {
if (current == null) {
Debug.LogError("沒有選擇歌曲,無法開始遊戲");
return;
}
// 將音樂存到GameData
GameData.selectedMusic = current;
SceneManager.LoadScene("GameScene");
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;

public class SongDetailUI : MonoBehaviour
{
public Image coverImage;
public TMPro.TextMeshProUGUI titleText;
public TMPro.TextMeshProUGUI artistText;
public TMPro.TextMeshProUGUI infoText;
private MusicData current;

public void ShowMusic(MusicData music)
{
current = music;
// 將音樂資料帶入右邊的detail UI
coverImage.sprite = music.coverImage;
titleText.text = music.musicName;
artistText.text = music.author;
infoText.text = $"BPM: {music.bpm} Length: {music.length}";
}

public void Btn_Play() {
if (current == null) {
Debug.LogError("沒有選擇歌曲,無法開始遊戲");
return;
}
// 將音樂存到GameData
GameData.selectedMusic = current;
SceneManager.LoadScene("GameScene");
}
}

Button 觸發轉場

在Start按鈕定義的事件

1
2
3
4
5
6
7
8
9
public void Btn_Play() {
if (current == null) {
Debug.LogError("沒有選擇歌曲,無法開始遊戲");
return;
}
// 將音樂存到GameData
GameData.selectedMusic = current;
SceneManager.LoadScene("GameScene");
}
1
2
3
4
5
6
7
8
9
public void Btn_Play() {
if (current == null) {
Debug.LogError("沒有選擇歌曲,無法開始遊戲");
return;
}
// 將音樂存到GameData
GameData.selectedMusic = current;
SceneManager.LoadScene("GameScene");
}

在另外一個遊戲場景,已經可以聽到點擊的對應的資料音樂。

透過 MusicData music = GameData.selectedMusic; 抓取剛剛的音樂。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
<div></div>
public class GameMusicPlayer : MonoBehaviour
{
private void Start() {
MusicData music = GameData.selectedMusic;
if (music == null) {
Debug.LogError("沒有選擇歌曲,無法開始遊戲");
return;
}
// 抓到全域的AudioSource
AudioSource audio = GetComponent<AudioSource>();
audio.clip = music.audioClip;
audio.Play();
<div></div>
Debug.Log("開始播放:" + music.musicName);
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class GameMusicPlayer : MonoBehaviour
{
private void Start() {
MusicData music = GameData.selectedMusic;
if (music == null) {
Debug.LogError("沒有選擇歌曲,無法開始遊戲");
return;
}
// 抓到全域的AudioSource
AudioSource audio = GetComponent<AudioSource>();
audio.clip = music.audioClip;
audio.Play();

Debug.Log("開始播放:" + music.musicName);
}
}

成功取得音樂

以上就是轉場還有資料怎麼使用的一個概略展示。