-
-
Notifications
You must be signed in to change notification settings - Fork 0
Extra Resources
When using InputLayers, you are likely to notice the formatted logging that it uses. This is the result of custom versions of default Unity classes with built-in extended logging functionality:
Original Class | Custom Class |
---|---|
MonoBehavior🔗 | LowryBehavior |
ScriptableObject🔗 | LowryScriptable |
Editor🔗 | LowryEditor |
EditorWindow🔗 | LowryEditorWindow |
PropertyDrawer🔗 | LowryPropertyDrawer |
These custom classes offer a number of logging tools designed to perform well, and offer better visual clarity when reading logs in the Unity Editor, as well as when exported. Here is a list of the built-in features, and how they can be used/configured:
The core idea is to replace standard logging methods with custom variants that inject visual information to help identify the class they originate from, and display objects in a human-readable way using JSON.
Original Class | Custom Class |
---|---|
Debug.Log()🔗 | LogMsg() |
Debug.LogWarning()🔗 | LogWarning() |
Debug.LogError()🔗 | LogError() |
Note: Some variants, like
LowryEditor
may not include the full suite of logging tools as InputLayers does not require them in that context.
// Standard approach to logging
Debug.LogWarning("Beware!");
Debug.Log("Something happened", _contextObject);
// Custom logging approach
LogWarning("Beware!");
LogMsg(_objectToDisplayAsJson, "Something happened");
For optimization purposes, it is recommended to avoid passing formatted strings, and instead pas elements as arguments:
// DO NOT DO THIS
LogMsg("A log about {_name}").
// Do this instead
LogMsg("A log about {0}", _name)
When using the above methods, a colorful title can be injected before the log. This is designed to help quickly and easily distinguish the source of the log.
In order to use this functionality, your class inhabiting from a custom "Lowry" class will need to override the d_logHeader
value:
protected override string d_logHeader => "[The name of the class, or some other identifyer]";
For visual clarity, InputLayers always puts these titles betwee, brackets.
By default, different colors are used for various class types:
Class | Default Color |
---|---|
LowryBehavior |
|
LowryScriptable |
|
LowryEditor |
|
LowryEditorWindow |
|
LowryPropertyDrawer |
|
However, in the case of LowryBehavior
and LowryScriptable
classes, the color can be overridden like this:
protected override Log.Colors d_logHeaderColor => Log.Colors.headerGrass;
Here is the list of available colors; which can be modified by editing the Lowry.Utils.Logs
file:
-
headerOrange
-
headerPink
-
headerGrass
-
headerPurple
-
headerGreen
-
headerWine
Namespace: namespace Lowry.Utils.CodeExtensions
public sealed class PseudoSerializableDictionary<TKey, TValue>
Input Layers makes use of a serializable "dictionary", which consists instead of a List
of keys and a List
of values kept in sync.
This "dictionary" functions a lot like a typical C# Dictionary🔗:
public List<TKey> Keys { get {...}, set {...} }
Stores the
TKey
keys of the dictionary.
public List<TValue> Values { get {...}, set {...} }
Stores the
TValue
values of the dictionary.
public int Count { get {...} }
Returns: the number of elements currently in the dictionary.
public void Set (TKey key, TValue value) {...}
Assigns a
value
to a specifickey
in the dictionary.
public void Set (KeyValuePair<TKey, TValue> pair) {...}
Adds a
KeyValuePair
direcly to the dictionary.
public void Set (TKey key, TValue value) {...}
Removes the entry at a specific
key
from the dictionary.Returns:
true
if thekey
was found and removed.
public void Set (KeyValuePair<TKey, TValue> pair) {...}
Removes the entry at a specific
KeyValuePair
'skey
from the dictionary.Returns:
true
if theKeyValuePair
'skey
was found and removed.
public void RemoveAt (int id) {...}
Removes the entry at a specific
id
in the dictionary.Returns:
true
if theid
was found and removed.
public void Contains (TKey key) {...}
Returns:
true
if thekey
was found in the dictionary.
public void Contains (KeyValuePair<TKey, TValue> pair) {...}
Returns:
true
if theKeyValuePair
'skey
was found in the dictionary.
public void Clear () {...}
Clears the contents of the dictionary.
public TValue At (int id) {...}
Returns: the
TValue
found at the positionid
in dictionary ordefault
if the id is ut of bounds.
public TValue At (TKey key) {...}
Returns: the
TValue
corresponding to theTKey
in dictionary or throws anArgumentOutOfRangeException
if theTKey
cannot be found in the dictionary.
👉🏻 Download InputLayers on the Unity Asset Store!