- Home /
How to declare a struct in C#
Hello everyone.
I'm trying to create a simple struct to hold data (not methods, just some properties), and I want it to be accessible from all my other scripts, like if it was just another class from the unity engine (Vector3 for example).
So I mostly know the differences between struct and class, and I want it to be a struct, not a class.
So how should I do it? As far as I know, unity doesn't let me attach a script with just a struct declaration, scripts are classes which inherit from monobehaviour, and structs cannot be inherited from classes (correct me if i'm wrong) so how do I declare the struct? Should I declare it inside of a public class, and then attach that script onto a gameObject? Or is there a better way to do this?
Answer by syclamoth · Jun 10, 2012 at 01:16 PM
You can't just stick a struct onto a gameobject, since it requires functionality that inherits from 'Component' in order for that to work. however, you can just declare structs in your files, the normal way:
public struct MyStruct {
// variables
}
Keep in mind that structs will not be serialized by Unity, and as such cannot be used to save data between sessions. If all you are using them for is data transfer (messengers), this is fine- but if you want them to be serialized and visible from the inspector, you will need to declare them as classes, and use the 'System.Serializable' attribute.
Just tested it and it worked, but I don't fully understand why.
So if I define a struct inside a script (not into the class which corresponds to that script), where am I actually defining it? Inside monoBehaviour? Is because of that that all the other scripts which inherit from monoBehaviour recognise my new variable type and are able to use it?
Thank you ^^
If you define a struct outside of any classes (in a script which also contains a monobehaviour), you are placing it in the 'default' namespace (which can be accessed from everywhere, without the need for 'using' directives). You can have any number of classes (or structs) in a single file- for the purposes of adding components Unity will only care about the one class which shares a name with the file, and only if it inherits from '$$anonymous$$onoBehaviour'. I usually have several files filled with 'helper' classes- these don't really attach to any specific GameObjects, and as such don't need to derive from $$anonymous$$onoBehaviour- but I use them in classes which do, which is how I can link them to my projects.
That was helpful, I was also wondering a while ago how I could create a helper class to hold some useful methods which could be useful in all my scripts, now I know how to do it.
Thank you very much
Your answer
Follow this Question
Related Questions
A node in a childnode? 1 Answer
Structs in C# Question 3 Answers
C# if If Statement is True Declare Variable 1 Answer
Structs passed by ref = better performance? 2 Answers
Where to use Structs and classes? 5 Answers