c# - Coin Persist 脚本无法正常工作
问题描述
我正在创建一个带有硬币拾取功能的 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 附加到的游戏对象的子对象,那么您正在销毁该对象。
在更新方法(每帧调用)中,您正在检查您是否在起始场景中。该对象将持续到下一个场景。加载场景后,它将检查它是否仍在起始场景中。如果不是这样,它会带着它的孩子毁灭自己。
如果你想让它持久存在,我不确定你为什么要销毁它。所以解决办法就是把update方法里的东西去掉。
推荐阅读
- reactjs - React 通过导入使引导程序工作
- python - 如何在不依赖其他软件的情况下为我的 Flask 应用程序与多个工作人员提供共享状态?
- php - 需要 laravel 正则表达式模式进行索引号验证
- c++ - 将任意整数转换为 void*
- security - 为什么 jwks(JSON Web Key Sets) 标准不只是以 pem 形式传递公钥而不是使用模数和指数?
- amazon-web-services - AWS 如何实现 getbucketlocation?
- angular - Angular:如何在打字稿文件中使用父组件的输入值
- python - 未等待的任务是否总是在通过 create_task 创建时启动?
- android - 如何在 React Native 中嵌套水平滚动视图?
- ruby - 在 Ruby 中返回方法