Unity 2D加载新场景异常:添加碰撞体后跳转及显示问题求助
Unity 2D场景加载与碰撞体异常问题
问题描述
我是Unity 2D新手开发者,当前遇到场景加载相关问题:
- 初始场景生成Player后加载
salleA场景,通过DontDestroyOnLoad保留Player; - 不给
salleA墙体添加碰撞体时运行正常,添加Edge Collider2D墙体碰撞体后,游戏直接跳转到salleB场景,且显示异常。
后续测试结果
- 在
salleA中添加相机后运行,提示“no camera rendering”(预期结果,因相机是Player子物体,不会随场景销毁); - 移除
salleB的黑色方形触发区(Box Collider Trigger)后,运行会跳转到salleC场景; - 移除所有场景触发区后,停留在
salleA但仅显示黄色画面。
相关信息
初始场景生成Player的代码
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.SceneManager; public class changeSalle : MonoBehaviour { public Collider2D player; // Start is called before the first frame update void Start() { SceneManager.LoadScene("salleA"); DontDestroyOnLoad(player); } }
碰撞体信息
- Player:
Capsule Collider2D - salleA墙体:
Edge Collider2D - 黑色方形触发区:
Box Collider Trigger(salleA右侧触发区跳转salleB,salleB左侧触发区跳转salleA)
场景及异常截图
- salleA场景:

- salleB场景:

- 异常显示画面:

- 仅显示黄色画面:

解决方案建议
修复Player初始位置与碰撞体重叠问题
加载salleA后,Player的初始位置可能与触发区或墙体碰撞体重叠,导致场景跳转被意外触发。建议:- 调整
DontDestroyOnLoad调用时机,先保留Player再加载场景:void Start() { DontDestroyOnLoad(player); SceneManager.LoadScene("salleA"); } - 通过场景加载完成事件,给Player设置远离触发区的安全初始位置:
void Start() { DontDestroyOnLoad(player); SceneManager.sceneLoaded += OnSceneLoaded; SceneManager.LoadScene("salleA"); } void OnSceneLoaded(Scene scene, LoadSceneMode mode) { if(scene.name == "salleA") { player.transform.position = new Vector2(0, 0); // 替换为场景内安全坐标 } }
- 调整
修正触发区的碰撞检测逻辑
跳转场景的触发脚本可能未正确判断碰撞对象,导致任意碰撞都触发跳转。检查触发区脚本,确保仅Player进入时才执行跳转:void OnTriggerEnter2D(Collider2D other) { if(other.CompareTag("Player")) // 确保Player已添加"Player"标签 { SceneManager.LoadScene("salleB"); // 对应场景跳转逻辑 } }同时确认Player的
Capsule Collider2D未勾选Is Trigger,避免与触发区产生异常交互。解决黄色画面(相机渲染问题)
黄色画面说明相机未正确渲染场景内容,排查方向:- 检查Player子物体相机的位置、正交大小,确保视角覆盖
salleA场景内容; - 确认场景中Sprite Renderer的图层在相机的
Culling Mask范围内; - 验证Player对象未被意外销毁,相机组件处于启用状态。
- 检查Player子物体相机的位置、正交大小,确保视角覆盖
内容的提问来源于stack exchange,提问作者ilyass
相关产品推荐
相关产品推荐

