Skip to content

Commit cfb807a

Browse files
Jack BrookesJack Brookes
authored andcommitted
Bux fixes, new JSON deserialzation, and block/trial creation syntax
1 parent 6ad9aec commit cfb807a

36 files changed

+978
-597
lines changed

Assets/ExpMngr/Examples/Basic/BasicExample.unity

Lines changed: 67 additions & 142 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ RenderSettings:
3838
m_ReflectionIntensity: 1
3939
m_CustomReflection: {fileID: 0}
4040
m_Sun: {fileID: 0}
41-
m_IndirectSpecularColor: {r: 0.44657898, g: 0.4964133, b: 0.5748178, a: 1}
41+
m_IndirectSpecularColor: {r: 0.44657826, g: 0.49641263, b: 0.57481676, a: 1}
4242
--- !u!157 &3
4343
LightmapSettings:
4444
m_ObjectHideFlags: 0
@@ -150,7 +150,7 @@ MonoBehaviour:
150150
m_GameObject: {fileID: 42531501}
151151
m_Enabled: 1
152152
m_EditorHideFlags: 0
153-
m_Script: {fileID: 11500000, guid: e984d0e88572a55418cdacaa553127a8, type: 3}
153+
m_Script: {fileID: 11500000, guid: 990162a155419244291a1b13c7cb9f2b, type: 3}
154154
m_Name:
155155
m_EditorClassIdentifier:
156156
--- !u!1 &184480070
@@ -213,145 +213,8 @@ Transform:
213213
m_LocalScale: {x: 1, y: 1, z: 1}
214214
m_Children: []
215215
m_Father: {fileID: 0}
216-
m_RootOrder: 5
216+
m_RootOrder: 4
217217
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
218-
--- !u!1001 &376669025
219-
Prefab:
220-
m_ObjectHideFlags: 0
221-
serializedVersion: 2
222-
m_Modification:
223-
m_TransformParent: {fileID: 0}
224-
m_Modifications:
225-
- target: {fileID: 114734091223803794, guid: 628989ad7601cc449aa1a5ad29d1d483,
226-
type: 2}
227-
propertyPath: _customHeaders.Array.size
228-
value: 1
229-
objectReference: {fileID: 0}
230-
- target: {fileID: 114734091223803794, guid: 628989ad7601cc449aa1a5ad29d1d483,
231-
type: 2}
232-
propertyPath: _trackedObjects.Array.size
233-
value: 1
234-
objectReference: {fileID: 0}
235-
- target: {fileID: 114734091223803794, guid: 628989ad7601cc449aa1a5ad29d1d483,
236-
type: 2}
237-
propertyPath: onTrialBegin.m_PersistentCalls.m_Calls.Array.size
238-
value: 1
239-
objectReference: {fileID: 0}
240-
- target: {fileID: 114734091223803794, guid: 628989ad7601cc449aa1a5ad29d1d483,
241-
type: 2}
242-
propertyPath: onSessionStart.m_PersistentCalls.m_Calls.Array.size
243-
value: 1
244-
objectReference: {fileID: 0}
245-
- target: {fileID: 4522850482104986, guid: 628989ad7601cc449aa1a5ad29d1d483, type: 2}
246-
propertyPath: m_LocalPosition.x
247-
value: 0
248-
objectReference: {fileID: 0}
249-
- target: {fileID: 4522850482104986, guid: 628989ad7601cc449aa1a5ad29d1d483, type: 2}
250-
propertyPath: m_LocalPosition.y
251-
value: 0
252-
objectReference: {fileID: 0}
253-
- target: {fileID: 4522850482104986, guid: 628989ad7601cc449aa1a5ad29d1d483, type: 2}
254-
propertyPath: m_LocalPosition.z
255-
value: 0
256-
objectReference: {fileID: 0}
257-
- target: {fileID: 4522850482104986, guid: 628989ad7601cc449aa1a5ad29d1d483, type: 2}
258-
propertyPath: m_LocalRotation.x
259-
value: 0
260-
objectReference: {fileID: 0}
261-
- target: {fileID: 4522850482104986, guid: 628989ad7601cc449aa1a5ad29d1d483, type: 2}
262-
propertyPath: m_LocalRotation.y
263-
value: 0
264-
objectReference: {fileID: 0}
265-
- target: {fileID: 4522850482104986, guid: 628989ad7601cc449aa1a5ad29d1d483, type: 2}
266-
propertyPath: m_LocalRotation.z
267-
value: 0
268-
objectReference: {fileID: 0}
269-
- target: {fileID: 4522850482104986, guid: 628989ad7601cc449aa1a5ad29d1d483, type: 2}
270-
propertyPath: m_LocalRotation.w
271-
value: 1
272-
objectReference: {fileID: 0}
273-
- target: {fileID: 4522850482104986, guid: 628989ad7601cc449aa1a5ad29d1d483, type: 2}
274-
propertyPath: m_RootOrder
275-
value: 4
276-
objectReference: {fileID: 0}
277-
- target: {fileID: 114734091223803794, guid: 628989ad7601cc449aa1a5ad29d1d483,
278-
type: 2}
279-
propertyPath: _trackedObjects.Array.data[0]
280-
value:
281-
objectReference: {fileID: 1294342340}
282-
- target: {fileID: 224130118367839794, guid: 628989ad7601cc449aa1a5ad29d1d483,
283-
type: 2}
284-
propertyPath: m_AnchorMax.x
285-
value: 1
286-
objectReference: {fileID: 0}
287-
- target: {fileID: 224130118367839794, guid: 628989ad7601cc449aa1a5ad29d1d483,
288-
type: 2}
289-
propertyPath: m_AnchorMax.y
290-
value: 1
291-
objectReference: {fileID: 0}
292-
- target: {fileID: 224546371281550106, guid: 628989ad7601cc449aa1a5ad29d1d483,
293-
type: 2}
294-
propertyPath: m_SizeDelta.y
295-
value: 0
296-
objectReference: {fileID: 0}
297-
- target: {fileID: 114734091223803794, guid: 628989ad7601cc449aa1a5ad29d1d483,
298-
type: 2}
299-
propertyPath: onSessionStart.m_PersistentCalls.m_Calls.Array.data[0].m_Mode
300-
value: 0
301-
objectReference: {fileID: 0}
302-
- target: {fileID: 114734091223803794, guid: 628989ad7601cc449aa1a5ad29d1d483,
303-
type: 2}
304-
propertyPath: onSessionStart.m_PersistentCalls.m_Calls.Array.data[0].m_CallState
305-
value: 2
306-
objectReference: {fileID: 0}
307-
- target: {fileID: 114734091223803794, guid: 628989ad7601cc449aa1a5ad29d1d483,
308-
type: 2}
309-
propertyPath: onSessionStart.m_PersistentCalls.m_Calls.Array.data[0].m_Target
310-
value:
311-
objectReference: {fileID: 42531503}
312-
- target: {fileID: 114734091223803794, guid: 628989ad7601cc449aa1a5ad29d1d483,
313-
type: 2}
314-
propertyPath: onSessionStart.m_PersistentCalls.m_Calls.Array.data[0].m_MethodName
315-
value: GenerateAndRunExperiment
316-
objectReference: {fileID: 0}
317-
- target: {fileID: 114734091223803794, guid: 628989ad7601cc449aa1a5ad29d1d483,
318-
type: 2}
319-
propertyPath: onSessionStart.m_PersistentCalls.m_Calls.Array.data[0].m_Arguments.m_ObjectArgumentAssemblyTypeName
320-
value: UnityEngine.Object, UnityEngine
321-
objectReference: {fileID: 0}
322-
- target: {fileID: 114734091223803794, guid: 628989ad7601cc449aa1a5ad29d1d483,
323-
type: 2}
324-
propertyPath: _customHeaders.Array.data[0]
325-
value: some_variable
326-
objectReference: {fileID: 0}
327-
- target: {fileID: 114734091223803794, guid: 628989ad7601cc449aa1a5ad29d1d483,
328-
type: 2}
329-
propertyPath: onTrialBegin.m_PersistentCalls.m_Calls.Array.data[0].m_Mode
330-
value: 1
331-
objectReference: {fileID: 0}
332-
- target: {fileID: 114734091223803794, guid: 628989ad7601cc449aa1a5ad29d1d483,
333-
type: 2}
334-
propertyPath: onTrialBegin.m_PersistentCalls.m_Calls.Array.data[0].m_CallState
335-
value: 2
336-
objectReference: {fileID: 0}
337-
- target: {fileID: 114734091223803794, guid: 628989ad7601cc449aa1a5ad29d1d483,
338-
type: 2}
339-
propertyPath: onTrialBegin.m_PersistentCalls.m_Calls.Array.data[0].m_Target
340-
value:
341-
objectReference: {fileID: 42531503}
342-
- target: {fileID: 114734091223803794, guid: 628989ad7601cc449aa1a5ad29d1d483,
343-
type: 2}
344-
propertyPath: onTrialBegin.m_PersistentCalls.m_Calls.Array.data[0].m_MethodName
345-
value: RunTrial
346-
objectReference: {fileID: 0}
347-
- target: {fileID: 114734091223803794, guid: 628989ad7601cc449aa1a5ad29d1d483,
348-
type: 2}
349-
propertyPath: onTrialBegin.m_PersistentCalls.m_Calls.Array.data[0].m_Arguments.m_ObjectArgumentAssemblyTypeName
350-
value: UnityEngine.Object, UnityEngine
351-
objectReference: {fileID: 0}
352-
m_RemovedComponents: []
353-
m_ParentPrefab: {fileID: 100100000, guid: 628989ad7601cc449aa1a5ad29d1d483, type: 2}
354-
m_IsPrefabParent: 0
355218
--- !u!1 &411377147
356219
GameObject:
357220
m_ObjectHideFlags: 0
@@ -417,6 +280,68 @@ Transform:
417280
m_Father: {fileID: 0}
418281
m_RootOrder: 1
419282
m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0}
283+
--- !u!1001 &448968640
284+
Prefab:
285+
m_ObjectHideFlags: 0
286+
serializedVersion: 2
287+
m_Modification:
288+
m_TransformParent: {fileID: 0}
289+
m_Modifications:
290+
- target: {fileID: 4522850482104986, guid: 0a3b6392f04558844bd340e68ced1ff9, type: 2}
291+
propertyPath: m_LocalPosition.x
292+
value: 0
293+
objectReference: {fileID: 0}
294+
- target: {fileID: 4522850482104986, guid: 0a3b6392f04558844bd340e68ced1ff9, type: 2}
295+
propertyPath: m_LocalPosition.y
296+
value: 0
297+
objectReference: {fileID: 0}
298+
- target: {fileID: 4522850482104986, guid: 0a3b6392f04558844bd340e68ced1ff9, type: 2}
299+
propertyPath: m_LocalPosition.z
300+
value: 0
301+
objectReference: {fileID: 0}
302+
- target: {fileID: 4522850482104986, guid: 0a3b6392f04558844bd340e68ced1ff9, type: 2}
303+
propertyPath: m_LocalRotation.x
304+
value: 0
305+
objectReference: {fileID: 0}
306+
- target: {fileID: 4522850482104986, guid: 0a3b6392f04558844bd340e68ced1ff9, type: 2}
307+
propertyPath: m_LocalRotation.y
308+
value: 0
309+
objectReference: {fileID: 0}
310+
- target: {fileID: 4522850482104986, guid: 0a3b6392f04558844bd340e68ced1ff9, type: 2}
311+
propertyPath: m_LocalRotation.z
312+
value: 0
313+
objectReference: {fileID: 0}
314+
- target: {fileID: 4522850482104986, guid: 0a3b6392f04558844bd340e68ced1ff9, type: 2}
315+
propertyPath: m_LocalRotation.w
316+
value: 1
317+
objectReference: {fileID: 0}
318+
- target: {fileID: 4522850482104986, guid: 0a3b6392f04558844bd340e68ced1ff9, type: 2}
319+
propertyPath: m_RootOrder
320+
value: 5
321+
objectReference: {fileID: 0}
322+
- target: {fileID: 114916036141644208, guid: 0a3b6392f04558844bd340e68ced1ff9,
323+
type: 2}
324+
propertyPath: onSessionBegin.m_PersistentCalls.m_Calls.Array.data[0].m_Target
325+
value:
326+
objectReference: {fileID: 42531503}
327+
- target: {fileID: 114916036141644208, guid: 0a3b6392f04558844bd340e68ced1ff9,
328+
type: 2}
329+
propertyPath: onTrialBegin.m_PersistentCalls.m_Calls.Array.data[0].m_Target
330+
value:
331+
objectReference: {fileID: 42531503}
332+
- target: {fileID: 224130118367839794, guid: 0a3b6392f04558844bd340e68ced1ff9,
333+
type: 2}
334+
propertyPath: m_AnchorMax.x
335+
value: 1
336+
objectReference: {fileID: 0}
337+
- target: {fileID: 224130118367839794, guid: 0a3b6392f04558844bd340e68ced1ff9,
338+
type: 2}
339+
propertyPath: m_AnchorMax.y
340+
value: 1
341+
objectReference: {fileID: 0}
342+
m_RemovedComponents: []
343+
m_ParentPrefab: {fileID: 100100000, guid: 0a3b6392f04558844bd340e68ced1ff9, type: 2}
344+
m_IsPrefabParent: 0
420345
--- !u!1 &1294342339
421346
GameObject:
422347
m_ObjectHideFlags: 0
@@ -441,10 +366,10 @@ MonoBehaviour:
441366
m_GameObject: {fileID: 1294342339}
442367
m_Enabled: 1
443368
m_EditorHideFlags: 0
444-
m_Script: {fileID: 11500000, guid: 9e3a2cc66bfc0464ab17c2b52f43036a, type: 3}
369+
m_Script: {fileID: 11500000, guid: c4f3a3956a7d23649a55f93fefa9f7b3, type: 3}
445370
m_Name:
446371
m_EditorClassIdentifier:
447-
objectName: my_game_object
372+
objectName: mygameobjects
448373
--- !u!4 &1294342341
449374
Transform:
450375
m_ObjectHideFlags: 0

Assets/ExpMngr/Examples/Basic/BasicExampleScript.cs

Lines changed: 34 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
/// </summary>
1010
public class BasicExampleScript : MonoBehaviour {
1111

12-
ExpMngr.ExperimentSession exp;
12+
ExpMngr.ExperimentSession session;
1313
float startNextTime;
1414

1515

@@ -19,11 +19,11 @@ void Start()
1919
enabled = false;
2020
}
2121

22-
public void GenerateAndRunExperiment(ExpMngr.ExperimentSession expSession)
22+
public void GenerateExperiment(ExpMngr.ExperimentSession expSession)
2323
{
24-
25-
exp = expSession;
26-
/// This function can be called using the ExperimentSession inspector OnSessionStart() event, or otherwise
24+
// save reference to session
25+
session = expSession;
26+
/// This function can be called using the ExperimentSession inspector OnSessionBegin() event, or otherwise
2727

2828

2929
// / In the StreamingAssets folder we have a several .json files that contain settings, e.g.
@@ -44,65 +44,67 @@ public void GenerateAndRunExperiment(ExpMngr.ExperimentSession expSession)
4444
// create our blocks & trials
4545

4646
// practice block
47-
var practiceBlock = new ExpMngr.Block(exp); // block 1
48-
for (int i = 0; i < Convert.ToInt32(exp.settings["n_practice_trials"]); i++)
49-
new ExpMngr.Trial(practiceBlock);
50-
// main block
51-
var mainBlock = new ExpMngr.Block(exp); // block 2
52-
for (int i = 0; i < Convert.ToInt32(exp.settings["n_main_trials"]); i++)
53-
new ExpMngr.Trial(mainBlock);
5447

48+
// retrieve the n_practice_trials setting, which was loaded from our .json file
49+
int numPracticeTrials = Convert.ToInt32(session.settings["n_practice_trials"]);
50+
// create block 1
51+
ExpMngr.Block practiceBlock = session.CreateBlock(numPracticeTrials);
52+
53+
54+
// retrieve the n_main_trials setting, which was loaded from our .json file
55+
int numMainTrials = Convert.ToInt32(session.settings["n_main_trials"]);
56+
// create block 2
57+
ExpMngr.Block mainBlock = session.CreateBlock(numMainTrials); // block 2
5558

5659
// here we set a setting for the 2nd trial of the main block as an example.
57-
exp.GetBlock(2).GetRelativeTrial(2).settings["size"] = 10;
60+
mainBlock.GetRelativeTrial(2).settings["size"] = 10;
5861

5962
// setting this script to enabled allows the MonoBehaviour scripts to run e.g. Update()
6063
enabled = true;
61-
62-
// begin first trial
63-
exp.BeginNextTrial();
6464
}
6565

6666
void Update()
6767
{
6868
// here we are mimicking some experiment behaviour, e.g waiting for user to interact with scene
69-
if (Time.time > startNextTime && exp.inTrial)
69+
if (Time.time > startNextTime && session.inTrial)
7070
{
7171
Debug.Log("Ending trial");
72-
exp.currentTrial.End();
72+
session.EndCurrentTrial();
7373

74-
if (exp.currentTrial == exp.lastTrial)
74+
if (session.currentTrial == session.lastTrial)
7575
{
76-
// end, then quit
77-
#if UNITY_EDITOR
78-
UnityEditor.EditorApplication.isPlaying = false;
79-
#elif UNITY_WEBPLAYER
80-
Application.OpenURL(webplayerQuitURL);
81-
#else
82-
Application.Quit();
83-
#endif
76+
#if UNITY_EDITOR
77+
UnityEditor.EditorApplication.isPlaying = false;
78+
#elif UNITY_WEBPLAYER
79+
Application.OpenURL(webplayerQuitURL);
80+
#else
81+
Application.Quit();
82+
#endif
8483
}
8584
else
8685
{
8786
// start next trial
88-
exp.BeginNextTrial();
87+
session.BeginNextTrial();
8988
}
9089
}
9190
}
9291

93-
public void RunTrial()
92+
public void PresentStimulus(ExpMngr.Trial trial)
9493
{
94+
// we can call this function via the event "On Trial Begin", which is called when the trial starts
95+
// here we can imagine presentation of some stimulus
96+
9597

96-
// we call this function via the event "On Trial Begin", which is called when the trial starts
9798
Debug.Log("Running trial!");
9899

99100
// we can access our settings to (e.g.) modify our scene
100-
Debug.LogFormat("The 'size' for this trial is: {0}", Convert.ToSingle(exp.currentTrial.settings["size"]));
101+
int size = (int) trial.settings["size"];
102+
Debug.LogFormat("The 'size' for this trial is: {0}", size);
101103

102104
// record custom values...
103105
string observation = UnityEngine.Random.value.ToString();
104106
Debug.Log(string.Format("We observed: {0}", observation));
105-
exp.currentTrial.result["some_variable"] = observation;
107+
trial.result["some_variable"] = observation;
106108

107109
// wait 1 second until we end trial and run the next one
108110
startNextTime = Time.time + 1;

0 commit comments

Comments
 (0)