-
Notifications
You must be signed in to change notification settings - Fork 48
Settings system
The settings system allows researchers to assign parameters (e.g. independent variables) to the Session, a Block, or a Trial. The settings system is handled with a dedicated class: Settings.
Instances of a Session, Block, or Trial each contain a .settings
field which is initially populated with an empty settings object.
When we begin the Session, we optionally pass a Settings object to be then used as the settings for the Session. If we are using the UI, the UI does this step for us - passing to the session the settings found in the selected .json file.
By default the Session is started using the UI, with a selected .json
file ("Experiment profile") is deserialized. The deserialization is performed by the popular MiniJSON
script. Example .json
file:
{
"a_number": 1,
"a_string": "hello",
"a_boolean": true,
"an_array": [1, 2, 3],
"another_array: ["hi", 1, false],
"an_object": {
"num": 1,
"text": "hello"
}
}
When deserializing from .json
, care must be taken when converting the type of the objects in our settings file.
JSON is just a string - so MiniJSON interprets each value and attempts to deserialize it into an appropriate C# type. As of March 2019, the syntax for getting and setting settings values uses .Get*
and .SetValue
methods.
// set the setting called "example" to the value 100
settings.SetValue("example", 100);
Example JSON | JSON type | Desired C# type | Access example |
---|---|---|---|
{"example": 123} |
int |
int |
settings.GetInt("example") |
{"example": 123} |
int |
float |
settings.GetFloat("example") |
{"example": 3.14} |
float |
float |
settings.GetFloat("example") |
{"example": true} |
bool |
bool |
settings.GetBool("example") |
{"example": {"sub_key": 1}} |
object |
Dictionary<string, object> |
settings.GetDict("example") |
{"example": [1, "red", true]} |
array |
List<object> |
settings.GetObjectList("example") |
{"example": [1, 2, 3]} |
array |
List<int> |
settings.GetIntList("example") |
{"example": [1, 1.5, 2]} |
array |
List<float> |
settings.GetFloatList("example") |
If you have issues you can check validity of your JSON files with an online validator tool.
Previous versions of UXF (before March 2019) required the use of the below syntax for accessing settings. Now the above method is recommended.
Example JSON | JSON type | C# cast example |
---|---|---|
{"example": "hello"} |
string |
(string) settings["example"] |
{"example": 123} |
int |
(long) settings["example"] |
{"example": 3.14} |
float |
(double) settings["example"] |
{"example": [1, 2, 3]} |
array |
(List<object>) settings["example"] |
{"example": {"a": 1, "b": "hello"}} |
Dictionary<string, object> |
(Dictionary<string, object>) settings["example"] |
{"example": true} |
bool |
(bool) settings["example"] |
Note: Add using System;
to the top of your script to gain access to the Convert.To*()
methods.
Example JSON | JSON type | Desired C# type | C# Conversion example |
---|---|---|---|
{"example": 123} |
int |
int |
Convert.ToInt32(settings["example"]) |
{"example": 123} |
int |
float |
Convert.ToSingle(settings["example"]) |
{"example": 3.14} |
float |
float |
Convert.ToSingle(settings["example"]) |
The setting system is set up such that, if a settings is unavailable, the request will cascade up the experiment hierarchy. For example, if a settings is not available for the Trial, it will look inside the Block, and then inside the Session.
๐ง Core topics
- ๐ Background
- โจ UXF 2.0
- โ๏ธ Compatibility
- ๐ถ๏ธ Oculus Quest Setup
- ๐ญ Concepts
- ๐ ๏ธ Get started
- ๐ Examples
- ๐ฅ๏ธ Built-in UI
- ๐ Session generation
- โฐ Events
- ๐ Data collection
- โ๏ธ Collect custom data
- ๐ Custom Data Handler
- ๐ Remote Data Collection
- ๐๏ธ WebGL DynamoDB setup
- ๐ Processing DynamoDB CSVs
- ๐ซ HTTP Post Setup
- ๐ง Settings system
- ๐๐ฝ Tracker system
- ๐ Logging system
โ ๏ธ Common issues- ๐ผ๏ธ Multi-scene experiments
- ๐บ Videos
- ๐จโ๐ Full written tutorial
- ๐ฆ Asset links
- ๐จโ๐ซ Unity tutorial links
- ๐ Useful code snippets
- ๐ก Programming ideas
- ๐งฎ Example R processing