Created
June 8, 2019 16:54
-
-
Save blackbret94/7da50352537fa4a9d7381f9287a70027 to your computer and use it in GitHub Desktop.
A useful model for creating ScriptableObject directories in Unity. This makes it easy to create an asset that stores AudioClips, Sprites, and other sets of data you want to be able to reference in many places throughout your project. Can be accessed like a Dictionary[string]. I use many variations of this in all my Unity projects.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using System.Collections.Generic; | |
using UnityEngine; | |
namespace Util.Directories | |
{ | |
[CreateAssetMenu(fileName = "AudioDirectory", menuName = "Directory/Audio Directory", order = 1)] | |
public class AudioDirectory : ScriptableObject | |
{ | |
public Wrapper[] Directory; | |
private Dictionary<string, AudioClip> _dictionary; | |
void OnEnable() | |
{ | |
CreateDictionaryIfDoesNotExist(); | |
} | |
private void CreateDictionaryIfDoesNotExist() | |
{ | |
if (_dictionary != null) | |
return; | |
_dictionary = new Dictionary<string, AudioClip>(); | |
foreach (Wrapper acw in Directory) | |
_dictionary.Add(acw.Name,acw.AudioClip); | |
} | |
/// <summary> | |
/// Use this accessor to get the desired clip from other classes | |
/// audioDirectory["shoot"] | |
/// </summary> | |
/// <param name="key"></param> | |
public AudioClip this[string key] => _dictionary.ContainsKey(key) ? _dictionary[key] : null; | |
/// <summary> | |
/// This wrapper allows you to specify audioclips from the inspector. System.Collections.Generic Dictionary is not | |
/// serializable. | |
/// </summary> | |
[System.Serializable] | |
public struct Wrapper | |
{ | |
public string Name; | |
public AudioClip AudioClip; | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment