首页 > 解决方案 > Coin Persist 脚本无法正常工作

问题描述

我正在创建一个带有硬币拾取功能的 2D 平台游戏,一切正常,但是当您进入下一个级别时,该级别的硬币拾取功能将无法正确加载。

我有一个带有 screenPersist 脚本的 screen Persist 游戏对象,然后我有一个带有 coinPickup 脚本的拾取器(硬币)。

唯一的问题是当您进入下一个级别时,该级别的硬币将无法加载。分数和其他一切都很好。

以下是我的 scipts 示例。

  1. 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);
             }
         }
     }
    
  2. 硬币拾取脚本。

    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);
         }
    }
    

标签: c#unity3d

解决方案


如果您的硬币拾取器是 ScreenPersists 附加到的游戏对象的子对象,那么您正在销毁该对象。

在更新方法(每帧调用)中,您正在检查您是否在起始场景中。该对象将持续到下一个场景。加载场景后,它将检查它是否仍在起始场景中。如果不是这样,它会带着它的孩子毁灭自己。

如果你想让它持久存在,我不确定你为什么要销毁它。所以解决办法就是把update方法里的东西去掉。


推荐阅读