换场景后,隐藏物品不再隐藏

after changing scenes, hidden objects are no longer hidden

我是 Unity 和 C# 的新手,请多多包涵。我有几个场景,玩家可以随意移动,其中一个场景有我想在单击鼠标时隐藏的图像对象。现在我已经在一个图像对象中添加了一个脚本,我使用 renderer.enabled = false; 来隐藏它。当玩家回到那个场景时,它就不再隐藏了。执行此操作的正确方法是什么?

//--------编辑部分------------ 现在可以了:)

public static bool showIt = true;
    void Start () {
        renderer.enabled = showIt;
        print (showIt);
    }
    void OnMouseDown (){
        showIt = false;
        renderer.enabled = showIt;
    }

为什么不是 gameObject.SetActive(false) 而不是 renderer.enabled = false?

您可以使用 PlayerPrefs 尝试这样的操作:

    public class RenderController : MonoBehaviour {

        // Check PlayerPrefs in Awake() to see if renderer should be enabled
        void Awake(){
            if (PlayerPrefs.GetInt ("rendererOn") == 0) {
                renderer.enabled = true;
            }
            else
                renderer.enabled = false;
        }

        void OnMouseDown(){

            // If the renderer is enabled when clicked then disable renderer
            if (renderer.enabled == true) {
                renderer.enabled = false;
                PlayerPrefs.SetInt("rendererOn",1);// Set state to 1(false)in PlayerPrefs
            }

            // If the renderer is disabled when clicked then enable it
            else if(renderer.enabled == false){
                renderer.enabled = true;
                PlayerPrefs.SetInt("rendererOn",0);// Set state to 0(true)in PlayerPrefs
            }
        }  
    }

我在 Unity 中测试过它,它可以工作。基本上只是将渲染器组件的 enabled/disabled 状态写入 PlayerPrefs,每次加载对象时,它都会检查最后的状态是什么。如果你想在第一次加载游戏时启用它,请记住将 rendererOn 全局变量设置为 0,就像我上面所做的那样。

为什么不使用静态变量来保存对象的状态?您可以使用 PlayerPrefs,但这不是最佳方法。使用静态初始化设置布尔变量以记录状态,然后使用 Start() 方法初始化变量并设置值。请记住,在您的 LoadLevel() 之前,您必须将值保存到给定的变量(或者 PlayerPrefs.Set* 如果您走那条路)。请记住,如果您坚持使用 Update() 或 OnGUI() 或 FixedUpdate(),则会付出巨大的代价。