You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity 2D游戏跨场景保存玩家对象位置的实现方法咨询

解决Unity场景切换后玩家位置错误的问题

不用复杂的PlayerPrefs,直接通过静态类传递位置,步骤简单易上手:

1. 给场景切换触发器加脚本

给你用作场景切换的碰撞器(比如门的碰撞盒)挂一个SceneSwitcher.cs脚本:

using UnityEngine;
using UnityEngine.SceneManagement;

public class SceneSwitcher : MonoBehaviour
{
    // 在Inspector面板里填要切换到的场景名称
    public string targetSceneName;
    // 把目标场景里的出生标记点拖到这里(可以放个空物体当标记)
    public Transform spawnPoint;

    private void OnTriggerEnter2D(Collider2D other)
    {
        // 只响应玩家的碰撞(记得给玩家加"Player"标签)
        if (other.CompareTag("Player"))
        {
            // 存好目标出生位置
            PlayerSpawnData.SetSpawnPosition(spawnPoint.position);
            // 切换场景
            SceneManager.LoadScene(targetSceneName);
        }
    }
}

2. 建一个全局存位置的静态类

新建PlayerSpawnData.cs脚本,用来临时存出生位置:

using UnityEngine;

public static class PlayerSpawnData
{
    private static Vector3 _spawnPos = Vector3.zero;
    private static bool _hasCustomSpawn = false;

    // 设置要出生的位置
    public static void SetSpawnPosition(Vector3 position)
    {
        _spawnPos = position;
        _hasCustomSpawn = true;
    }

    // 获取出生位置,取完就重置标记
    public static Vector3 GetSpawnPosition()
    {
        Vector3 pos = _spawnPos;
        _hasCustomSpawn = false;
        return pos;
    }

    // 判断有没有自定义的出生位置
    public static bool HasCustomSpawn()
    {
        return _hasCustomSpawn;
    }
}

3. 让玩家加载场景后跳到目标位置

打开你的玩家控制脚本(比如PlayerController.cs),在Start方法里加这段:

void Start()
{
    // 如果有自定义出生位置,就把玩家移过去
    if (PlayerSpawnData.HasCustomSpawn())
    {
        transform.position = PlayerSpawnData.GetSpawnPosition();
    }
    // 没有的话就用默认初始位置,不用改
}

新手必做的几个设置

  • 给玩家加**"Player"标签**:选中玩家,Inspector顶部Tag下拉框选"Player",没有就新建。
  • 碰撞器开Is Trigger:在切换触发器的Collider2D组件里勾选Is Trigger,不然触发不了碰撞检测。
  • 场景加到Build Settings:打开File -> Build Settings,把所有要切换的场景拖进去,否则加载会报错。
  • 目标场景放出生标记:在每个场景的切换门旁边放个空GameObject,把它拖到SceneSwitcher的spawnPoint字段里。

内容的提问来源于stack exchange,提问作者retrd1

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 17:07:38