- Home /
Problem is not reproducible or outdated
Enable/Disable objects, with script
Hi, I was wondering if anyone could give me some help:
I have a project, and will have two scenes - a "before" and an "after" world. The "after" world will have lots of different objects that I need to be able to turn on and off via script, because the user will be purchasing changes to the world.
Here's my quick test code, I thought it would work, but the item won't re-enable when I check the box in the inspector's script section.
var onoff : boolean;
function Update () {
if (toggle == true)
gameObject.active = true;
if (toggle == false)
gameObject.active = false;
}
whats wrong with my script, the gameobject doesent reappear!!??
var Reflection : GameObject;
function Update (){ if(Input.GetButtonDown("Fire2")) { Reflection.active = false; }
if(Input.GetButtonUp("Fire2"))
{
Reflection.active = true;
}
}
gameObject.active is obsolete. Use gameObject.SetActive() or SetActiveRecursively(). Also as a general rule you should use camelCase for variable names.
You can instantiate a clone from the object which you are going to setActive. And everytime you need to set active, again instantiate a clone. It works.
Answer by chetanisinanand · Mar 14, 2013 at 01:31 AM
GameObject.active is Obsolete in Unity 4, Rather Use: gameObject.SetActive (false); Or GameObject.activeSelf, GameObject.activeInHierarchy
@chetanisinanand i have this compile error says: Assets/$$anonymous$$ain_GUI.js(107,51): BCE0019: 'activeSelf' is not a member of 'UnityEngine.GameObject'.
my code is (javascript):
GameObject.FindWithTag("House").activeSelf = false;
What's wrong with it? Thank you in advance.
Answer by Sebas · Jan 28, 2010 at 01:04 AM
I tried the following:
var onoff : boolean; var testObject : GameObject;
function Update () { if (onoff == true) testObject.active = true; if (onoff == false) testObject.active = false; }
The script works fine when attached to something like the First Person Controller. As testObject I used a sphere. When I attach the script to the same object which I want to disable, I got a small problem.. That is, if you disable the gameObject to which your script is attached, the script won't get called anymore and your re-enabling your onoff variable won't have any effect. Hope that makes sense.
One option I could think of is to parent your objects to an empty game object, attach the script there and simply disable the child. That should do the trick, but there might be more elegant solutions out there.
/edit
Another option would be suitable if you only want the objects to either be rendered or not rendered. You could enable/disable the renderer like this http://unity3d.com/support/documentation/ScriptReference/Renderer-enabled.html
@Sebas, i'm having the same issue with some children. but i want to enable them after a collision, sense I have them inactive themselves at the start, but I can't find the script to call the child. How would I enable or activate the child from the parent?
It is worth noting that using active
is deprecated. Ins$$anonymous$$d, SetActive()
should be used, i.e. testObject.SetActive(true);
Answer by Duke · Jan 28, 2010 at 01:12 AM
I assume you mean the gameobject won't re-enable when you set the script's onoff variable to true in the editor, and that when you referenced "toggle" in your Update function, you really meant to reference onoff.
I think what you are running in to is that when you set gameObject.active = false, Update() no longer gets called every frame, therefore your code to set gameObject.active = true will never run.
If you have a reference to your script object to set the onoff variable (script.onoff = true), could you just access the gameObject directly from there? (script.gameObject.active = true)
when you set gameObject.active = false, Update() no longer gets called every frame, therefore your code to set gameObject.active = true will never run.
WTF? That's so stupid and counter intuitive! I just wasted the last 6 hours wondering why! So now what? Can you reference an inactive transform from an active one? How can I reference an object WITHOUT "find" (searching through every object in the game)??? THAN$$anonymous$$S
you could make a variable for the object ex "var building : Transform;" then in script say building.active = false; or true; or how you had it befor but this script should be attached to something that will never be disabled.
How is that stupid and counterintuative? You turn it of - it no longer runs.. sounds like expected behavior to me.
There are tons of alternative to using find. You could even establish the reference before run-time in the inspector.
Can you tell me how to do that Joshua? I'm having the same problem as him.
Answer by $$anonymous$$ · Jul 05, 2015 at 02:54 AM
The statement .active is now deprecated, use .SetActive(true/false) instead.
Answer by Khesan · Feb 23, 2010 at 09:45 AM
Remember that .active is deprecated now, and you need to use .enable instead.
.active is not deprecated for GameObjects. It's only deprecated for components, because you're supposed to use .enabled on them.
Follow this Question
Related Questions
Retaining GameObject data when switching scenes? 4 Answers
Save game objects to new scene 0 Answers
How to restart a "prefab'd" level? ;) 0 Answers
How Do You Have Multiple High Scores For 1 GameOverScene? 1 Answer
How to determine bounding box of scene? 2 Answers