一、屋内场景准备
1、利用图形与笔刷进行场景搭建,并利用Square对场景进行防止穿墙的Collider操作。
2、对屋内门口设置2D对象-Sprites-正方形,即Square,对Square设置Box Collider 2D,并勾选触发器。
二、将屋内场景添加到Build Settings
顶部菜单栏——文件——生成设置
点击红框或者将场景拖进来
三、 场景切换代码
1、屋内切换到屋外,初始化人物位置
注意,我这里已经设置了Player标签:
using UnityEngine;
using UnityEngine.SceneManagement;
public class OutDoor : MonoBehaviour
{
private void OnTriggerEnter2D(Collider2D collision)
{
if (collision.CompareTag("Player"))
{
// 切换到Farm场景
SceneManager.LoadScene("Farm");
// 在Farm场景加载完成后,设置人物位置为(0.3, 2.2, 0)
SceneManager.sceneLoaded += OnSceneLoaded;
}
}
private void OnSceneLoaded(Scene scene, LoadSceneMode mode)
{
if (scene.name == "Farm")
{
// 查找Player对象
GameObject playerObject = GameObject.FindGameObjectWithTag("Player");
if (playerObject != null)
{
// 设置人物位置为(0.3, 2.2, 0)
playerObject.transform.position = new Vector3(0.3f, 2.2f, 0);
}
// 取消订阅场景加载完成事件,避免重复设置位置
SceneManager.sceneLoaded -= OnSceneLoaded;
}
}
}
2、屋外切换到屋内,初始化人物位置
using UnityEngine;
using UnityEngine.SceneManagement;
public class InDoor : MonoBehaviour
{
private void OnTriggerEnter2D(Collider2D collision)
{
if (collision.CompareTag("Player"))
{
// 切换到Home场景
SceneManager.LoadScene("Home");
// 在Farm场景加载完成后,设置人物位置为(1.4, -7.0, 0)
SceneManager.sceneLoaded += OnSceneLoaded;
}
}
private void OnSceneLoaded(Scene scene, LoadSceneMode mode)
{
if (scene.name == "Home")
{
// 查找Player对象
GameObject playerObject = GameObject.FindGameObjectWithTag("Player");
if (playerObject != null)
{
// 设置人物位置为(1.4, -7.0, 0)
playerObject.transform.position = new Vector3(1.4f, -7.0f, 0);
}
// 取消订阅场景加载完成事件,避免重复设置位置
SceneManager.sceneLoaded -= OnSceneLoaded;
}
}
}
四、人物坐标显示
另外,为了方便我们调试代码中人物转换场景后的初始位置,可以将人物坐标显示在屏幕上。
添加一个UI文本(旧版)对象:2D对象——UI——旧版——文本,并为它的上级添加一个UI.cs:
using UnityEngine;
using UnityEngine.UI;
public class UI : MonoBehaviour
{
public Text coordinateText; // UI文本对象
private void Update()
{
// 获取Player的当前位置
Vector3 playerPosition = GameObject.FindGameObjectWithTag("Player").transform.position;
// 更新UI文本内容
coordinateText.text = "X: " + playerPosition.x.ToString("F2") + " Y: " + playerPosition.y.ToString("F2");
}
}