换场景后,隐藏物品不再隐藏
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(),则会付出巨大的代价。
我是 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(),则会付出巨大的代价。