LOADING
611 字
3 分鐘
Unity 場景切換以及 Data 共享

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

SongSelect Scene

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

MusicData.cs

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;
}
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

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");
}
}
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按鈕定義的事件

```
public void Btn_Play() {
if (current == null) {
Debug.LogError("沒有選擇歌曲,無法開始遊戲");
return;
}
// 將音樂存到GameData
GameData.selectedMusic = current;
SceneManager.LoadScene("GameScene");
}
public void Btn_Play() {
if (current == null) {
Debug.LogError("沒有選擇歌曲,無法開始遊戲");
return;
}
// 將音樂存到GameData
GameData.selectedMusic = current;
SceneManager.LoadScene("GameScene");
}
在另外一個遊戲場景,已經可以聽到點擊的對應的資料音樂。
透過 MusicData music = GameData.selectedMusic; 抓取剛剛的音樂。

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(); audio.clip = music.audioClip; audio.Play();

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

}

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(); audio.clip = music.audioClip; audio.Play();

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

}

成功取得音樂
![](https://img.stackpenguin.com/images/Unity%20%E5%A0%B4%E6%99%AF%E5%88%87%E6%8F%9B%E4%BB%A5%E5%8F%8A%20Data%20%E5%85%B1%E4%BA%AB/CleanShot-2025-12-04-at-11-02-07.jpg)
以上就是轉場還有資料怎麼使用的一個概略展示。
Unity 場景切換以及 Data 共享
/posts/unity-場景切換以及-data-共享/
作者
鈞凱
發布於
2025-12-04
授權條款
CC BY-NC-SA 4.0

部分資訊可能已經過時

目錄
文章
分類
標籤
目錄