Cách dịch chuyển giữa các cảnh trong Unity
Dịch chuyển tức thời giữa các cảnh trong Unity là một tính năng hữu ích để chuyển đổi người chơi giữa các cấp độ hoặc khu vực khác nhau. Hướng dẫn này đề cập đến cách triển khai dịch chuyển tức thời cảnh bằng cách sử dụng tải cảnh bổ sung, đảm bảo tính liên tục của dữ liệu người chơi và dỡ bỏ cảnh cũ sau khi dịch chuyển tức thời. Cách tiếp cận này đảm bảo quá trình chuyển đổi diễn ra suôn sẻ mà không làm mất dữ liệu hoặc đối tượng của người chơi.
Thiết lập bối cảnh và điểm dịch chuyển tức thời
Đầu tiên, chúng ta sẽ thiết lập bối cảnh và chỉ định các điểm dịch chuyển tức thời trong bối cảnh đó.
Tạo cảnh
- Trong Unity, hãy vào
File > New Scene
để tạo một cảnh mới. Lưu nó vào thư mụcAssets
của bạn, đặt tên làScene1
. - Lặp lại quy trình để tạo một cảnh khác có tên
Scene2
. - Thêm cả hai cảnh vào cài đặt bản dựng bằng cách vào
Tệp > Cài đặt bản dựng
và nhấp vàoThêm cảnh mở
.
Chỉ định điểm dịch chuyển tức thời
Mỗi cảnh cần có một điểm được chỉ định nơi người chơi sẽ xuất hiện sau khi dịch chuyển tức thời.
- Trong
Scene1
, tạo một GameObject trống và đặt tên làTeleportPoint1
. Gắn thẻ thích hợp, ví dụ, làSpawnPoint
. - Trong
Scene2
, tạo một GameObject trống khác có tênTeleportPoint2
và gắn thẻ tương tự. - Các GameObject này sẽ đóng vai trò là địa điểm xuất hiện khi chuyển đổi giữa các cảnh.
Tạo một tập lệnh dịch chuyển tức thời
Tập lệnh dịch chuyển tức thời quản lý quá trình chuyển cảnh, đảm bảo người chơi di chuyển đến đúng vị trí trong cảnh mới, sau đó dỡ bỏ cảnh trước đó.
Kịch bản dịch chuyển tức thời
using UnityEngine;
using UnityEngine.SceneManagement;
public class Teleportation : MonoBehaviour
{
public string sceneToLoad; // Name of the scene to load
public string spawnPointTag = "SpawnPoint"; // Tag for identifying the spawn point
private string currentSceneName; // To track the current scene
void Start()
{
currentSceneName = SceneManager.GetActiveScene().name;
}
void OnTriggerEnter(Collider other)
{
if (other.CompareTag("Player"))
{
DontDestroyOnLoad(other.gameObject); // Prevent player object from being destroyed
SceneManager.LoadScene(sceneToLoad, LoadSceneMode.Additive); // Load new scene additively
SceneManager.sceneLoaded += OnSceneLoaded; // Register callback for scene load completion
}
}
void OnSceneLoaded(Scene scene, LoadSceneMode mode)
{
if (scene.name == sceneToLoad)
{
// Find the spawn point in the newly loaded scene
GameObject spawnPoint = GameObject.FindWithTag(spawnPointTag);
if (spawnPoint != null)
{
GameObject player = GameObject.FindWithTag("Player");
if (player != null)
{
// Teleport the player to the spawn point
player.transform.position = spawnPoint.transform.position;
}
}
// Unload the previous scene
SceneManager.UnloadSceneAsync(currentSceneName);
// Update the current scene name and unregister the event handler
currentSceneName = sceneToLoad;
SceneManager.sceneLoaded -= OnSceneLoaded;
}
}
}
- Tạo một tập lệnh C# mới có tên
Teleportation.cs
trong thư mụcScripts
. - Đính kèm tập lệnh này vào một vật thể có chức năng kích hoạt dịch chuyển tức thời, chẳng hạn như cửa hoặc cổng.
- Đặt
sceneToLoad
thành tên của cảnh chuyển tiếp và đảm bảo điểm dịch chuyển tức thời trong cảnh mới được gắn thẻ chính xác.
Xử lý dữ liệu người chơi trên nhiều cảnh
Nếu trò chơi của bạn yêu cầu duy trì dữ liệu người chơi (như hàng tồn kho, sức khỏe, v.v.) trên nhiều cảnh, hãy triển khai chiến lược lưu trữ dữ liệu.
Dữ liệu người chơi liên tục
using UnityEngine;
public class PlayerData : MonoBehaviour
{
public static PlayerData instance;
public int health = 100;
void Awake()
{
if (instance == null)
{
instance = this;
DontDestroyOnLoad(gameObject);
}
else
{
Destroy(gameObject);
}
}
}
- Tạo một tập lệnh C# mới có tên
PlayerData.cs
và đính kèm nó vào đối tượng người chơi hoặc một GameObject riêng biệt. - Đảm bảo GameObject này không bị phá hủy trong quá trình chuyển cảnh bằng cách sử dụng
DontDestroyOnLoad(gameObject)
.
Phần kết luận
Việc dịch chuyển tức thời giữa các cảnh trong Unity, đặc biệt là với việc tải và dỡ cảnh bổ sung, mang lại trải nghiệm liền mạch. Phương pháp này giữ lại các đối tượng quan trọng trong trò chơi như người chơi và quản lý tài nguyên hiệu quả bằng cách dỡ cảnh trước đó. Cách tiếp cận như vậy đặc biệt hữu ích trong các trò chơi có môi trường lớn hoặc liên tục. Tùy chỉnh thiết lập này thêm để phù hợp với các yêu cầu chơi trò chơi cụ thể, như duy trì dữ liệu trạng thái hoặc thêm hiệu ứng hình ảnh trong quá trình chuyển đổi.