更改场景后,隐藏的对象不再隐藏

时间:2015-02-06 14:14:59

标签: c# unity3d renderer unity3d-2dtools

我是Unity和C#的新手,请耐心等待。我有几个场景,玩家可以随意移动,在一个场景中有鼠标点击时我想隐藏的图像对象。现在我已经在一个imageobject中添加了一个脚本,我使用renderer.enabled = false;来隐藏它。当玩家移回该场景时,它不再被隐藏。什么是正确的方法呢?

// ------ EDITED PART ----------- 现在它有效:)

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

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

您可以使用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中进行了测试,但它确实有效。基本上只是将渲染器组件的启用/禁用状态写入PlayerPrefs,每次加载对象时都会检查最后一个状态是什么。请记住将rendererOn全局变量设置为0,如上所述,如果您希望在游戏第一次加载时启用它。

答案 2 :(得分:0)

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