- Home /
Get all variables from script as array
I am writing a custom Editor window (no run-time implementation needed)
I need to get all properties\\variables of a script(MonoBehavior) as an array.
From any script I need to be able to call this function (if there is a function for it).
Giving either the type of variable I need, or having them returned generically.
So my question is : How can I, with script, get all variables in a script of a spesific type ?
eg. :
script.GetVariablesOfType(int) : int[]
or generically :
script.GetVariables() : object[]
(I use javascript)
This involves the use of System.Reflection, there's a bit more to it than just calling GetVariables on an object but it's possible.
Answer by DMGregory · May 06, 2014 at 04:17 PM
If you're extending the Editor class, you have access to a SerializedObject for the component(s) you're inspecting. This exposes a GetIterator method, which you can use this to iterate over all serialized properties on the object.
My Javascript is a bit rusty, so I'll use C# for this example so I'm less likely to make a mistake. Here's one way to get a collection of all properties that have integer values, or the integer values themselves:
List<SerializedProperty> intProperties = new List<SerializedProperty>();
List<int> intPropertyValues = new List<int>();
SerializedProperty property = serializedObject.GetIterator();
do
{
if(property.type == typeof(int).ToString())
{
intProperties.Add(property.Copy());
intPropertyValues.Add(property.intValue);
}
} while (property.Next(false));
Your answer
Follow this Question
Related Questions
The name 'Joystick' does not denote a valid type ('not found') 2 Answers
How do I name cloned objects inside a for-loop? 2 Answers
Array empties values on RunTime? 1 Answer
Limiting EditorGUI.ObjectField() to Prefabs only? 2 Answers
JS objects in Unityscript || BCE0048: Type 'Object' does not support slicing. 0 Answers