【发布时间】:2021-08-12 08:58:32
【问题描述】:
我正在创建一个带有硬币拾取功能的 2D 平台游戏,一切正常,但是当您进入下一关时,该关卡的硬币拾取将无法正确加载。
我有一个带有 screenPersist 脚本的 screen Persist 游戏对象,然后我有一个带有 coinPickup 脚本的拾取物(硬币)。
唯一的问题是当您进入下一个级别时,该级别的硬币将无法加载。 分数和其他一切都很好。
以下是我的 scipts 示例。
-
screenPesist 脚本。
public class ScreenPersist : MonoBehaviour { int startingSceneIndex; private void Awake() { int numScenePersist = FindObjectsOfType<ScreenPersist>().Length; if (numScenePersist > 1) { Destroy(gameObject); } else { DontDestroyOnLoad(gameObject); } } // Start is called before the first frame update void Start() { startingSceneIndex = SceneManager.GetActiveScene().buildIndex; } // Update is called once per frame void Update() { int currentScenIndex = SceneManager.GetActiveScene().buildIndex; if (currentScenIndex != startingSceneIndex) { Destroy(gameObject); } } } -
硬币拾取脚本。
public class CoinPickup : MonoBehaviour { [SerializeField] AudioClip coinPickupSFX; [SerializeField] int piontsForCoinPickup; private void OnTriggerEnter2D(Collider2D collision) { FindObjectOfType<GameSesion>().addToScore(piontsForCoinPickup); AudioSource.PlayClipAtPoint(coinPickupSFX, Camera.main.transform.position); Destroy(gameObject); } }
【问题讨论】:
-
我不确定 ScreenPersists 类与硬币加载有何关系。看起来您正在检查您是否在每一帧的起始场景中。如果您当前不在 satarting 场景中,则您正在销毁 ScreenPersist 游戏对象。
-
我将硬币放在作为 screenPersist 游戏对象的子项嵌套的拾取游戏对象中
-
我尝试在没有 screenPersist 类的情况下这样做,但是每次玩家死亡并且场景在检查点重新开始时,您已经拾取的硬币都会再次产生。
-
如果你想在最后一个检查点重生玩家,那么就这样做。无需重新加载整个场景。跟踪最后一个检查点,并在玩家死亡后将其移动到那里。
-
谢谢我已经解决了这个问题,我对 Unity 和 C# 还是很陌生,所以非常感谢您的帮助。