UnityScript struct causes unity to crash

I’m creating a spatial tree and implementing the tree node using unityscript struct as follows:

class TNode extends System.ValueType {
var parent : TNode;
var depth : int;

}

This causes Unity to crash. Without the parent field it won’t crash but I need this field to store the parent of a node. What to do?

If I had to guess, I would say that parent is conflicting with some variable of the System.ValueType class. Try renaming it.

If extending System.ValueType does in fact make things a struct (I have had issues making structs in UnityScript so that might be how you do it), the issue might lie with the infinite recursion of instance generation.

You see, structs are essentially variables that are passed by value (like ints and floats). That is, the value of the variable is copied whenever it is passed into a function or referenced from the outside. Structs act the same way. Whenever the variable is needed outside of the current scope, a copy is made. This can be done efficiently because the number of bytes that the struct needs to exist is calculated at compile time (objects located inside of structs are stored as references, so when the struct is copied, the reference is copied instead of the object).

So, when you include a variable of the encapulating struct inside of that struct, an infinite loop is created.

It would be best to leave the TNode class as a normal object class instead of a struct unless you need lots of short lived instances (in which case you may need to rethink how you are doing this as I do not know if C# will allow a struct to be stored explicitly as a reference).

The actual way that structs work is a little more complicated than this, and I most of my knowledge about them comes from C++, but from what I know, the implementation is fairly similar)