I was originally writing a lot my code in Javascript (2 different scripts) but decided to switch all of them over to one C# script.
The scripts were originally called Waypoint and WaypointDual. I need to replace all instances of those two components with my script called BoardPoint.
I wrote a small script (below) to iterate through GameObjects (sequentially numbered 0 to 104 (and #a and #b in some cases (following a WaypointDual))
When I toggle the ‘destroyWP’ in the inspector, it toggles back off (correctly), the ‘destroyed’ variable toggles to true, and my log fills with 105 entries of destroyed…
Problem: They all still have an instance of Waypoint (or WaypointDual)… any ideas?
`
@script ExecuteInEditMode
public var destroyWP = false;
public var destroyed = false;
function Update ()
{
if(destroyWP == true)
{
for(var i:int = 0; i < 105; i+=1)
{
var go = GameObject.Find(i+"");
if(go == null)
{
var goA = GameObject.Find(i + "a");
var goB = GameObject.Find(i + "b");
goA.DestroyImmediate(GetComponent (Waypoint));
goB.DestroyImmediate(GetComponent (Waypoint));
}
else
{
go.DestroyImmediate(GetComponent (Waypoint));
go.DestroyImmediate(GetComponent (WaypointDual));
}
Debug.Log("Waypoint on Object "+i+" or "+i+" a|b should be destroyed...");
}
destroyWP = false;
destroyed = true;
}
}
`
DestroyImmediate or Destroy are static functions and you have to provide a reference to the object you want to destroy. GetComponent on the other side is not a static function. It requires an instance of a GameObject or a Component on which it searchs for the component.
If you call GetComponent within a MonoBehaviour script it will search on the GameObject this script is attached to (it’s the same as this.Getcomponent()).
Also keep in mind that DestroyImmediate ONLY works in the editor. Never use it ingame! Same rule applies the other way round: Don’t use Destroy in an editor-script.
You should actually use a true editor script like this (not tested i’m a C# guy :D):
// UnityScript (JavaScript)
class DestroyWaypoints extends Editor
{
@MenuItem ("MyMenu/DestroyWaypoints")
static function DestroyWPs ()
{
for(var i:int = 0; i < 105; i+=1)
{
var go = GameObject.Find(i+"");
if(go == null)
{
var goA = GameObject.Find(i + "a");
var goB = GameObject.Find(i + "b");
DestroyImmediate(goA.GetComponent (Waypoint));
DestroyImmediate(goB.GetComponent (Waypoint));
}
else
{
DestroyImmediate(go.GetComponent (Waypoint));
DestroyImmediate(go.GetComponent (WaypointDual));
}
Debug.Log("Waypoint on Object "+i+" or "+i+" a|b should be destroyed...");
}
}
}
btw if you just want to delete all Waypoint and WaypointDual scripts just do it that way:
var allWaypoints = FindObjectsOfType(Waypoint);
for(var Obj in allWaypoints)
DestroyImmediate(Obj);
var allWaypointDuals = FindObjectsOfType(WaypointDual);
for(var Obj in allWaypointDuals)
DestroyImmediate(Obj);
I'm interested in what "doesn't work quite right"?
I'm interested in what "doesn't work quite right"?
– Bunny83