62. ありがちなメモリアロケート~string~
• 空文字(“”)はstring.Emptyで扱う
• TagやLayerは事前に定義クラスを自動生成する
- 名前(文字列)からID検索は避ける(タイポ対策でもある)
public static class LAYERLIST {
public const int DEFAULT = 0;
public const int TRANSPARENTFX = 1;
public const int IGNORE_RAYCAST = 2;
public const int WATER = 4;
public const int UI = 5;
}
void Start() {
//int layer = LayerMask.NameToLayer(“Default”);
gameObject.layer = LAYERLIST.DEFAULT;
}
public static class SORTINGLAYERLIST {
public const int DEFAULT = 0;
public const int ADDITIVE = 1;
}
…
void Start() {
var sp = GetComponent< SpriteRenderer>();
//int id = SortingLayer.GetLayerValueFromName("Additive");
sp. sortingLayerID = SORTINGLAYERLIST.ADDITIVE;
}
63. ありがちなメモリアロケート~string~
• TagとLayerの一覧取得
public static string[] GetTagNames() {
string[] names = InternalEditorUtility.tags;
int length = names.Length;
for (int i = 0; i < length; ++i) names[i] = names[i].Replace(" ", "_");
return names;
}
public static int[] GetLayerIDs() {
string[] names = InternalEditorUtility.layers;
int length = names.Length;
int[] ids = new int[length];
for (int i = 0; i < length; ++i) ids[i] = LayerMask.NameToLayer(names[i]);
return ids;
}
64. ありがちなメモリアロケート~string~
• SortingLayerも同様に事前に定義クラスを生成
- 何故かTag/Layerのようにすんなりいかないので無理矢理取得
public static string[] GetSortingLayerNames() {
Type utilType = typeof(InternalEditorUtility);
PropertyInfo prop = utilType.GetProperty("sortingLayerNames", BindingFlags.Static | BindingFlags.NonPublic);
return (string[])prop.GetValue(null, new object[0]);
}
public static int[] GetSortingLayerUniqueIDs() {
Type utilType = typeof(InternalEditorUtility);
PropertyInfo prop = utilType.GetProperty("sortingLayerUniqueIDs", BindingFlags.Static | BindingFlags.NonPublic);
return (int[])prop.GetValue(null, new object[0]);
}