From f6c767577fa42ce0d64f417d7952a18c860c4e38 Mon Sep 17 00:00:00 2001
From: Eric Heine <erheine@nps.edu>
Date: Wed, 8 Jan 2020 14:51:55 -0800
Subject: [PATCH] Added GameObject and Transform variables and events.

---
 .../Editor/GameObjectGameEventEditor.cs       | 22 +++++++++++++++++++
 .../Editor/GameObjectGameEventEditor.cs.meta  | 13 +++++++++++
 .../Events/Editor/TransformGameEventEditor.cs | 22 +++++++++++++++++++
 .../Editor/TransformGameEventEditor.cs.meta   | 13 +++++++++++
 .../Events/GameObjectGameEvent.cs             |  8 +++++++
 .../Events/GameObjectGameEvent.cs.meta        | 13 +++++++++++
 .../Events/GameObjectUnityEvent.cs            |  7 ++++++
 .../Events/GameObjectUnityEvent.cs.meta       | 13 +++++++++++
 .../Events/TransformGameEvent.cs              |  8 +++++++
 .../Events/TransformGameEvent.cs.meta         | 13 +++++++++++
 .../Events/TransformUnityEvent.cs             |  7 ++++++
 .../Events/TransformUnityEvent.cs.meta        | 13 +++++++++++
 .../Listeners/GameObjectGameEventListener.cs  | 19 ++++++++++++++++
 .../GameObjectGameEventListener.cs.meta       | 13 +++++++++++
 .../Listeners/GameObjectVariableListener.cs   | 21 ++++++++++++++++++
 .../GameObjectVariableListener.cs.meta        | 13 +++++++++++
 .../Listeners/TransformGameEventListener.cs   | 19 ++++++++++++++++
 .../TransformGameEventListener.cs.meta        | 13 +++++++++++
 .../Listeners/TransformVariableListener.cs    | 21 ++++++++++++++++++
 .../TransformVariableListener.cs.meta         | 13 +++++++++++
 .../Base Types/GameObjectVariable.cs          | 21 ++++++++++++++++++
 .../Base Types/GameObjectVariable.cs.meta     | 13 +++++++++++
 .../Variables/Base Types/TransformVariable.cs | 21 ++++++++++++++++++
 .../Base Types/TransformVariable.cs.meta      | 13 +++++++++++
 .../ReferenceGameObjectVariable.cs            |  8 +++++++
 .../ReferenceGameObjectVariable.cs.meta       | 13 +++++++++++
 .../ReferenceTransformVariable.cs             |  8 +++++++
 .../ReferenceTransformVariable.cs.meta        | 13 +++++++++++
 28 files changed, 394 insertions(+)
 create mode 100644 Scriptable Variables/Events/Editor/GameObjectGameEventEditor.cs
 create mode 100644 Scriptable Variables/Events/Editor/GameObjectGameEventEditor.cs.meta
 create mode 100644 Scriptable Variables/Events/Editor/TransformGameEventEditor.cs
 create mode 100644 Scriptable Variables/Events/Editor/TransformGameEventEditor.cs.meta
 create mode 100644 Scriptable Variables/Events/GameObjectGameEvent.cs
 create mode 100644 Scriptable Variables/Events/GameObjectGameEvent.cs.meta
 create mode 100644 Scriptable Variables/Events/GameObjectUnityEvent.cs
 create mode 100644 Scriptable Variables/Events/GameObjectUnityEvent.cs.meta
 create mode 100644 Scriptable Variables/Events/TransformGameEvent.cs
 create mode 100644 Scriptable Variables/Events/TransformGameEvent.cs.meta
 create mode 100644 Scriptable Variables/Events/TransformUnityEvent.cs
 create mode 100644 Scriptable Variables/Events/TransformUnityEvent.cs.meta
 create mode 100644 Scriptable Variables/Listeners/GameObjectGameEventListener.cs
 create mode 100644 Scriptable Variables/Listeners/GameObjectGameEventListener.cs.meta
 create mode 100644 Scriptable Variables/Listeners/GameObjectVariableListener.cs
 create mode 100644 Scriptable Variables/Listeners/GameObjectVariableListener.cs.meta
 create mode 100644 Scriptable Variables/Listeners/TransformGameEventListener.cs
 create mode 100644 Scriptable Variables/Listeners/TransformGameEventListener.cs.meta
 create mode 100644 Scriptable Variables/Listeners/TransformVariableListener.cs
 create mode 100644 Scriptable Variables/Listeners/TransformVariableListener.cs.meta
 create mode 100644 Scriptable Variables/Variables/Base Types/GameObjectVariable.cs
 create mode 100644 Scriptable Variables/Variables/Base Types/GameObjectVariable.cs.meta
 create mode 100644 Scriptable Variables/Variables/Base Types/TransformVariable.cs
 create mode 100644 Scriptable Variables/Variables/Base Types/TransformVariable.cs.meta
 create mode 100644 Scriptable Variables/Variables/Reference Types/ReferenceGameObjectVariable.cs
 create mode 100644 Scriptable Variables/Variables/Reference Types/ReferenceGameObjectVariable.cs.meta
 create mode 100644 Scriptable Variables/Variables/Reference Types/ReferenceTransformVariable.cs
 create mode 100644 Scriptable Variables/Variables/Reference Types/ReferenceTransformVariable.cs.meta

diff --git a/Scriptable Variables/Events/Editor/GameObjectGameEventEditor.cs b/Scriptable Variables/Events/Editor/GameObjectGameEventEditor.cs
new file mode 100644
index 0000000..4242e0b
--- /dev/null
+++ b/Scriptable Variables/Events/Editor/GameObjectGameEventEditor.cs	
@@ -0,0 +1,22 @@
+using UnityEditor;
+using UnityEngine;
+
+namespace Shared.ScriptableVariables {
+  //---------------------------------------------------------------------------
+  [CustomEditor(typeof(GameObjectGameEvent))]
+  public class GameObjectGameEventEditor : Editor {
+    private GameObject testValue;
+
+    //---------------------------------------------------------------------------
+    public override void OnInspectorGUI() {
+      base.OnInspectorGUI();
+
+      EditorGUILayout.BeginHorizontal();
+      testValue = (GameObject)EditorGUILayout.ObjectField("Test Value", testValue, typeof(GameObject), true);
+      if (GUILayout.Button("Fire Event")) {
+        ((GameObjectGameEvent)target).Raise(testValue);
+      }
+      EditorGUILayout.EndHorizontal();
+    }
+  }
+}
diff --git a/Scriptable Variables/Events/Editor/GameObjectGameEventEditor.cs.meta b/Scriptable Variables/Events/Editor/GameObjectGameEventEditor.cs.meta
new file mode 100644
index 0000000..9de633f
--- /dev/null
+++ b/Scriptable Variables/Events/Editor/GameObjectGameEventEditor.cs.meta	
@@ -0,0 +1,13 @@
+fileFormatVersion: 2
+guid: ee6b1c586c9bea84d91372b244254de6
+timeCreated: 1513206436
+licenseType: Pro
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Scriptable Variables/Events/Editor/TransformGameEventEditor.cs b/Scriptable Variables/Events/Editor/TransformGameEventEditor.cs
new file mode 100644
index 0000000..4d6dbbc
--- /dev/null
+++ b/Scriptable Variables/Events/Editor/TransformGameEventEditor.cs	
@@ -0,0 +1,22 @@
+using UnityEditor;
+using UnityEngine;
+
+namespace Shared.ScriptableVariables {
+  //---------------------------------------------------------------------------
+  [CustomEditor(typeof(TransformGameEvent))]
+  public class TransformGameEventEditor : Editor {
+    private Transform testValue;
+
+    //---------------------------------------------------------------------------
+    public override void OnInspectorGUI() {
+      base.OnInspectorGUI();
+
+      EditorGUILayout.BeginHorizontal();
+      testValue = (Transform)EditorGUILayout.ObjectField("Test Value", testValue, typeof(Transform), true);
+      if (GUILayout.Button("Fire Event")) {
+        ((TransformGameEvent)target).Raise(testValue);
+      }
+      EditorGUILayout.EndHorizontal();
+    }
+  }
+}
diff --git a/Scriptable Variables/Events/Editor/TransformGameEventEditor.cs.meta b/Scriptable Variables/Events/Editor/TransformGameEventEditor.cs.meta
new file mode 100644
index 0000000..9603c53
--- /dev/null
+++ b/Scriptable Variables/Events/Editor/TransformGameEventEditor.cs.meta	
@@ -0,0 +1,13 @@
+fileFormatVersion: 2
+guid: b75f707cd7c69d84f94f5d8fab44e889
+timeCreated: 1513206436
+licenseType: Pro
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Scriptable Variables/Events/GameObjectGameEvent.cs b/Scriptable Variables/Events/GameObjectGameEvent.cs
new file mode 100644
index 0000000..60ce264
--- /dev/null
+++ b/Scriptable Variables/Events/GameObjectGameEvent.cs	
@@ -0,0 +1,8 @@
+using UnityEngine;
+
+namespace Shared.ScriptableVariables {
+  // ScriptableVariable that decouples components firing and listening to game events that require a GameObject parameter
+  [CreateAssetMenu(menuName = "Scriptable Objects/Events/Game Object Game Event")]
+  public class GameObjectGameEvent : GameEvent<GameObject> {
+  }
+}
diff --git a/Scriptable Variables/Events/GameObjectGameEvent.cs.meta b/Scriptable Variables/Events/GameObjectGameEvent.cs.meta
new file mode 100644
index 0000000..8f18291
--- /dev/null
+++ b/Scriptable Variables/Events/GameObjectGameEvent.cs.meta	
@@ -0,0 +1,13 @@
+fileFormatVersion: 2
+guid: e04e52238d5e84e4993faf76d33b291a
+timeCreated: 1510599448
+licenseType: Pro
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Scriptable Variables/Events/GameObjectUnityEvent.cs b/Scriptable Variables/Events/GameObjectUnityEvent.cs
new file mode 100644
index 0000000..d17aaf9
--- /dev/null
+++ b/Scriptable Variables/Events/GameObjectUnityEvent.cs	
@@ -0,0 +1,7 @@
+using UnityEngine;
+using UnityEngine.Events;
+
+namespace Shared.ScriptableVariables {
+  [System.Serializable]
+  public class GameObjectUnityEvent : UnityEvent<GameObject> {}
+}
diff --git a/Scriptable Variables/Events/GameObjectUnityEvent.cs.meta b/Scriptable Variables/Events/GameObjectUnityEvent.cs.meta
new file mode 100644
index 0000000..5537a9d
--- /dev/null
+++ b/Scriptable Variables/Events/GameObjectUnityEvent.cs.meta	
@@ -0,0 +1,13 @@
+fileFormatVersion: 2
+guid: 3fbaadaeaab577a40b9d0873c6c11366
+timeCreated: 1510599448
+licenseType: Pro
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Scriptable Variables/Events/TransformGameEvent.cs b/Scriptable Variables/Events/TransformGameEvent.cs
new file mode 100644
index 0000000..f523177
--- /dev/null
+++ b/Scriptable Variables/Events/TransformGameEvent.cs	
@@ -0,0 +1,8 @@
+using UnityEngine;
+
+namespace Shared.ScriptableVariables {
+  // ScriptableVariable that decouples components firing and listening to game events that require a Transform parameter
+  [CreateAssetMenu(menuName = "Scriptable Objects/Events/Transform Game Event")]
+  public class TransformGameEvent : GameEvent<Transform> {
+  }
+}
diff --git a/Scriptable Variables/Events/TransformGameEvent.cs.meta b/Scriptable Variables/Events/TransformGameEvent.cs.meta
new file mode 100644
index 0000000..54f3618
--- /dev/null
+++ b/Scriptable Variables/Events/TransformGameEvent.cs.meta	
@@ -0,0 +1,13 @@
+fileFormatVersion: 2
+guid: 2dd5f4b25c226024d9804a115d9e40ab
+timeCreated: 1510599448
+licenseType: Pro
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Scriptable Variables/Events/TransformUnityEvent.cs b/Scriptable Variables/Events/TransformUnityEvent.cs
new file mode 100644
index 0000000..774a17b
--- /dev/null
+++ b/Scriptable Variables/Events/TransformUnityEvent.cs	
@@ -0,0 +1,7 @@
+using UnityEngine;
+using UnityEngine.Events;
+
+namespace Shared.ScriptableVariables {
+  [System.Serializable]
+  public class TransformUnityEvent : UnityEvent<Transform> {}
+}
diff --git a/Scriptable Variables/Events/TransformUnityEvent.cs.meta b/Scriptable Variables/Events/TransformUnityEvent.cs.meta
new file mode 100644
index 0000000..79f555f
--- /dev/null
+++ b/Scriptable Variables/Events/TransformUnityEvent.cs.meta	
@@ -0,0 +1,13 @@
+fileFormatVersion: 2
+guid: d8e1417a02d399b4fa63148c4fad8c1b
+timeCreated: 1510599448
+licenseType: Pro
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Scriptable Variables/Listeners/GameObjectGameEventListener.cs b/Scriptable Variables/Listeners/GameObjectGameEventListener.cs
new file mode 100644
index 0000000..e2fc36c
--- /dev/null
+++ b/Scriptable Variables/Listeners/GameObjectGameEventListener.cs	
@@ -0,0 +1,19 @@
+using UnityEngine;
+using UnityEngine.Events;
+
+namespace Shared.ScriptableVariables {
+  // Component to tie GameObjectGameEvents to Unity's event system
+  public class GameObjectGameEventListener : GameEventListener<GameObject> {
+    [Tooltip("The game event to listen to")]
+    public GameObjectGameEvent eventToListenTo;
+
+    [Tooltip("The UnityEvent to raise in response to the game event being raised")]
+    public GameObjectUnityEvent response;
+
+    //---------------------------------------------------------------------------
+    protected override GameEvent<GameObject> GetGameEvent() { return eventToListenTo; }
+
+    //---------------------------------------------------------------------------
+    protected override UnityEvent<GameObject> GetUnityEvent() { return response; }
+  }
+}
diff --git a/Scriptable Variables/Listeners/GameObjectGameEventListener.cs.meta b/Scriptable Variables/Listeners/GameObjectGameEventListener.cs.meta
new file mode 100644
index 0000000..1b5bd5e
--- /dev/null
+++ b/Scriptable Variables/Listeners/GameObjectGameEventListener.cs.meta	
@@ -0,0 +1,13 @@
+fileFormatVersion: 2
+guid: 2b57c9ebe59f6504fb36be48323716e4
+timeCreated: 1510599448
+licenseType: Pro
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Scriptable Variables/Listeners/GameObjectVariableListener.cs b/Scriptable Variables/Listeners/GameObjectVariableListener.cs
new file mode 100644
index 0000000..0d9376c
--- /dev/null
+++ b/Scriptable Variables/Listeners/GameObjectVariableListener.cs	
@@ -0,0 +1,21 @@
+using UnityEngine;
+using UnityEngine.Events;
+
+namespace Shared.ScriptableVariables {
+  /// <summary>
+  /// Used to trigger a UnityEvent in response to changes on a GameObjectVariable
+  /// </summary>
+  public class GameObjectVariableListener : ScriptableVariableListener<GameObject> {
+    [Tooltip("The ScriptableVariable to listen for changes")]
+    public GameObjectVariable variable;
+
+    [Tooltip("The UnityEvent that gets triggered when the variable changes value")]
+    public GameObjectUnityEvent OnValueChangedEvent;
+
+    //---------------------------------------------------------------------------
+    protected override ScriptableVariable<GameObject> GetScriptableVariable() { return variable; }
+
+    //---------------------------------------------------------------------------
+    protected override UnityEvent<GameObject> GetUnityEvent() { return OnValueChangedEvent; }
+  }
+}
diff --git a/Scriptable Variables/Listeners/GameObjectVariableListener.cs.meta b/Scriptable Variables/Listeners/GameObjectVariableListener.cs.meta
new file mode 100644
index 0000000..691a2f5
--- /dev/null
+++ b/Scriptable Variables/Listeners/GameObjectVariableListener.cs.meta	
@@ -0,0 +1,13 @@
+fileFormatVersion: 2
+guid: be924a55a600ad143b48151781b6fb9f
+timeCreated: 1513208270
+licenseType: Pro
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Scriptable Variables/Listeners/TransformGameEventListener.cs b/Scriptable Variables/Listeners/TransformGameEventListener.cs
new file mode 100644
index 0000000..67402c8
--- /dev/null
+++ b/Scriptable Variables/Listeners/TransformGameEventListener.cs	
@@ -0,0 +1,19 @@
+using UnityEngine;
+using UnityEngine.Events;
+
+namespace Shared.ScriptableVariables {
+  // Component to tie TransformGameEvents to Unity's event system
+  public class TransformGameEventListener : GameEventListener<Transform> {
+    [Tooltip("The game event to listen to")]
+    public TransformGameEvent eventToListenTo;
+
+    [Tooltip("The UnityEvent to raise in response to the game event being raised")]
+    public TransformUnityEvent response;
+
+    //---------------------------------------------------------------------------
+    protected override GameEvent<Transform> GetGameEvent() { return eventToListenTo; }
+
+    //---------------------------------------------------------------------------
+    protected override UnityEvent<Transform> GetUnityEvent() { return response; }
+  }
+}
diff --git a/Scriptable Variables/Listeners/TransformGameEventListener.cs.meta b/Scriptable Variables/Listeners/TransformGameEventListener.cs.meta
new file mode 100644
index 0000000..ddbed72
--- /dev/null
+++ b/Scriptable Variables/Listeners/TransformGameEventListener.cs.meta	
@@ -0,0 +1,13 @@
+fileFormatVersion: 2
+guid: 2833a1a78d0f1ac488ac49c421fe28bb
+timeCreated: 1510599448
+licenseType: Pro
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Scriptable Variables/Listeners/TransformVariableListener.cs b/Scriptable Variables/Listeners/TransformVariableListener.cs
new file mode 100644
index 0000000..be65b28
--- /dev/null
+++ b/Scriptable Variables/Listeners/TransformVariableListener.cs	
@@ -0,0 +1,21 @@
+using UnityEngine;
+using UnityEngine.Events;
+
+namespace Shared.ScriptableVariables {
+  /// <summary>
+  /// Used to trigger a UnityEvent in response to changes on a TransformVariable
+  /// </summary>
+  public class TransformVariableListener : ScriptableVariableListener<Transform> {
+    [Tooltip("The ScriptableVariable to listen for changes")]
+    public TransformVariable variable;
+
+    [Tooltip("The UnityEvent that gets triggered when the variable changes value")]
+    public TransformUnityEvent OnValueChangedEvent;
+
+    //---------------------------------------------------------------------------
+    protected override ScriptableVariable<Transform> GetScriptableVariable() { return variable; }
+
+    //---------------------------------------------------------------------------
+    protected override UnityEvent<Transform> GetUnityEvent() { return OnValueChangedEvent; }
+  }
+}
diff --git a/Scriptable Variables/Listeners/TransformVariableListener.cs.meta b/Scriptable Variables/Listeners/TransformVariableListener.cs.meta
new file mode 100644
index 0000000..a9bf1b8
--- /dev/null
+++ b/Scriptable Variables/Listeners/TransformVariableListener.cs.meta	
@@ -0,0 +1,13 @@
+fileFormatVersion: 2
+guid: f80c99495055b6441b28767f1adb90fd
+timeCreated: 1513208270
+licenseType: Pro
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Scriptable Variables/Variables/Base Types/GameObjectVariable.cs b/Scriptable Variables/Variables/Base Types/GameObjectVariable.cs
new file mode 100644
index 0000000..53887f3
--- /dev/null
+++ b/Scriptable Variables/Variables/Base Types/GameObjectVariable.cs	
@@ -0,0 +1,21 @@
+using UnityEngine;
+
+namespace Shared.ScriptableVariables {
+  // A GameObject value to share across components, scenes, and prefabs
+  [CreateAssetMenu(menuName = "Scriptable Objects/Variables/GameObject")]
+  public class GameObjectVariable : ScriptableVariable<GameObject> {
+    //---------------------------------------------------------------------------
+    [ContextMenu("Reset To Default Value")]
+    public void ContextMenuReset() {
+      Reset();
+    }
+  }
+
+#if UNITY_EDITOR
+  //-----------------------------------------------------------------------------
+  [UnityEditor.CustomEditor(typeof(GameObjectVariable))]
+  [UnityEditor.CanEditMultipleObjects]
+  public class GameObjectScriptableVariableEditor : GameObjectVariable.BaseScriptableVariableEditor {
+  }
+#endif
+}
diff --git a/Scriptable Variables/Variables/Base Types/GameObjectVariable.cs.meta b/Scriptable Variables/Variables/Base Types/GameObjectVariable.cs.meta
new file mode 100644
index 0000000..ba133da
--- /dev/null
+++ b/Scriptable Variables/Variables/Base Types/GameObjectVariable.cs.meta	
@@ -0,0 +1,13 @@
+fileFormatVersion: 2
+guid: ad701a5d8d1a01545bdb29c2209badba
+timeCreated: 1510599427
+licenseType: Pro
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Scriptable Variables/Variables/Base Types/TransformVariable.cs b/Scriptable Variables/Variables/Base Types/TransformVariable.cs
new file mode 100644
index 0000000..75a81b9
--- /dev/null
+++ b/Scriptable Variables/Variables/Base Types/TransformVariable.cs	
@@ -0,0 +1,21 @@
+using UnityEngine;
+
+namespace Shared.ScriptableVariables {
+  // A Transform value to share across components, scenes, and prefabs
+  [CreateAssetMenu(menuName = "Scriptable Objects/Variables/Transform")]
+  public class TransformVariable : ScriptableVariable<Transform> {
+    //---------------------------------------------------------------------------
+    [ContextMenu("Reset To Default Value")]
+    public void ContextMenuReset() {
+      Reset();
+    }
+  }
+
+#if UNITY_EDITOR
+  //-----------------------------------------------------------------------------
+  [UnityEditor.CustomEditor(typeof(TransformVariable))]
+  [UnityEditor.CanEditMultipleObjects]
+  public class TransformScriptableVariableEditor : TransformVariable.BaseScriptableVariableEditor {
+  }
+#endif
+}
diff --git a/Scriptable Variables/Variables/Base Types/TransformVariable.cs.meta b/Scriptable Variables/Variables/Base Types/TransformVariable.cs.meta
new file mode 100644
index 0000000..415fbcc
--- /dev/null
+++ b/Scriptable Variables/Variables/Base Types/TransformVariable.cs.meta	
@@ -0,0 +1,13 @@
+fileFormatVersion: 2
+guid: 8700b7cc1b8f2214681e7d46f5703b2c
+timeCreated: 1510599427
+licenseType: Pro
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Scriptable Variables/Variables/Reference Types/ReferenceGameObjectVariable.cs b/Scriptable Variables/Variables/Reference Types/ReferenceGameObjectVariable.cs
new file mode 100644
index 0000000..bd25df1
--- /dev/null
+++ b/Scriptable Variables/Variables/Reference Types/ReferenceGameObjectVariable.cs	
@@ -0,0 +1,8 @@
+using UnityEngine;
+
+namespace Shared.ScriptableVariables {
+  // A reference to a GameObject value to share across components, scenes, and prefabs that can be overridden to a constant different value
+  [CreateAssetMenu(menuName = "Scriptable Objects/Variables/Reference/GameObject")]
+  public class ReferenceGameObjectVariable : ReferenceScriptableVariable<GameObjectVariable, GameObject> {
+  }
+}
diff --git a/Scriptable Variables/Variables/Reference Types/ReferenceGameObjectVariable.cs.meta b/Scriptable Variables/Variables/Reference Types/ReferenceGameObjectVariable.cs.meta
new file mode 100644
index 0000000..a91680e
--- /dev/null
+++ b/Scriptable Variables/Variables/Reference Types/ReferenceGameObjectVariable.cs.meta	
@@ -0,0 +1,13 @@
+fileFormatVersion: 2
+guid: 2888fafc5d5b0224fae3f26946e440a1
+timeCreated: 1510599427
+licenseType: Pro
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Scriptable Variables/Variables/Reference Types/ReferenceTransformVariable.cs b/Scriptable Variables/Variables/Reference Types/ReferenceTransformVariable.cs
new file mode 100644
index 0000000..da7e45c
--- /dev/null
+++ b/Scriptable Variables/Variables/Reference Types/ReferenceTransformVariable.cs	
@@ -0,0 +1,8 @@
+using UnityEngine;
+
+namespace Shared.ScriptableVariables {
+  // A reference to a Transform value to share across components, scenes, and prefabs that can be overridden to a constant different value
+  [CreateAssetMenu(menuName = "Scriptable Objects/Variables/Reference/Transform")]
+  public class ReferenceTransformVariable : ReferenceScriptableVariable<TransformVariable, Transform> {
+  }
+}
diff --git a/Scriptable Variables/Variables/Reference Types/ReferenceTransformVariable.cs.meta b/Scriptable Variables/Variables/Reference Types/ReferenceTransformVariable.cs.meta
new file mode 100644
index 0000000..3fc5f46
--- /dev/null
+++ b/Scriptable Variables/Variables/Reference Types/ReferenceTransformVariable.cs.meta	
@@ -0,0 +1,13 @@
+fileFormatVersion: 2
+guid: 8d74a6bcf7404ac4d88d067b2a9e4868
+timeCreated: 1510599427
+licenseType: Pro
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
-- 
GitLab