2015-02-06 65 views
0

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

// ------编辑的零件----------- 现在工程:)

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

回答

0

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

+0

感谢百万:D以上是我的代码,它似乎在工作。我是否需要添加我想要隐藏的每个对象都是自己的脚本还是都可以从相同的处理? – wantsToLearnAndroid 2015-02-07 09:09:05

0

为什么不gameObject.SetActive,而不是渲染(假)。 enabled = false?

+0

它也是这样,当场景重新输入时对象仍然出现。 – wantsToLearnAndroid 2015-02-06 18:48:49

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

我测试了它的团结和它的作品。基本上只是将渲染器组件的启用/禁用状态写入PlayerPrefs,并且每次对象加载时都会检查最后状态是什么。如上所述,请记住将rendererOn全局变量设置为0,如果您希望在首次加载游戏时启用它。

+0

我也考虑过使用playerPrefs,但AmitApollo的答案更简单,所以我会继续这样做,但我也会考虑你的例子,我想我仍然需要它:) – wantsToLearnAndroid 2015-02-07 09:10:42