Синтаксис:
Используется csharp
using UnityEngine;
using System.Collections.Generic;
public class LocalizationHelper
{
public const string TAP_TO_CONTINUE = "tap.to.continue";
public const string LEVEL_TUTORIAL_POINT_1 = "level.tutorial.point1";
private static Dictionary<string, string> dictionary = new Dictionary<string, string> ();
private static Locale currentLocale = Locale.English;
private static IniParser parser = new IniParser ("Localization");
public static void ChangeLocalization (Locale locale)
{
dictionary.Clear();
currentLocale = locale;
string[] keys = parser.EnumSection (locale.ToString ());
foreach (string key in keys) {
dictionary.Add (key, parser.GetSetting (locale.ToString (), key));
}
}
public static string GetString (string key)
{
if (!dictionary.ContainsKey (key.ToUpper ()))
ChangeLocalization (currentLocale);
return dictionary [key.ToUpper ()];
}
#region Nested type: Locale
public enum Locale
{
English,
Russian
}
#endregion
}
using System.Collections.Generic;
public class LocalizationHelper
{
public const string TAP_TO_CONTINUE = "tap.to.continue";
public const string LEVEL_TUTORIAL_POINT_1 = "level.tutorial.point1";
private static Dictionary<string, string> dictionary = new Dictionary<string, string> ();
private static Locale currentLocale = Locale.English;
private static IniParser parser = new IniParser ("Localization");
public static void ChangeLocalization (Locale locale)
{
dictionary.Clear();
currentLocale = locale;
string[] keys = parser.EnumSection (locale.ToString ());
foreach (string key in keys) {
dictionary.Add (key, parser.GetSetting (locale.ToString (), key));
}
}
public static string GetString (string key)
{
if (!dictionary.ContainsKey (key.ToUpper ()))
ChangeLocalization (currentLocale);
return dictionary [key.ToUpper ()];
}
#region Nested type: Locale
public enum Locale
{
English,
Russian
}
#endregion
}
Теперь сам вопрос. Насколько плохо (в плане производительности) текст для GUI.Lable сетить прямо в методе OnGUI()? Как видно в примере кода ниже, я каждый раз считываю текст для GUI.Label из Dictionary методом LocalizationHelper.GetString(...). Я понимаю, что можно, например, создать переменную класса, засетить в нее текст из Dictionary в методе Awake() и потом использовать эту переменную в методе OnGUI(), но сейчас меня интересует именно вариант, показанный мною в примере ниже. Спасибо!
Синтаксис:
Используется csharp
using UnityEngine;
using System.Collections;
public class Point1 : MonoBehaviour
{
public GUIStyle guiStyle;
private Rect tooltipPosition;
private int lableWidth = Screen.width / 3;
private int paddingY = Screen.height / 4;
private void Awake ()
{
tooltipPosition = new Rect (lableWidth, 0, lableWidth, Screen.height);
}
private void OnGUI ()
{
guiStyle.contentOffset = new Vector2 (lableWidth, 0);
guiStyle.padding = new RectOffset (10, 10, paddingY, 10);
GUI.Label (tooltipPosition, tooltipText, LocalizationHelper.GetString(LocalizationHelper.LEVEL_TUTORIAL_POINT_1));
GUI.Label (new Rect (0, 0, Screen.width, Screen.height), LocalizationHelper.GetString(LocalizationHelper.TAP_TO_CONTINUE));
}
}
using System.Collections;
public class Point1 : MonoBehaviour
{
public GUIStyle guiStyle;
private Rect tooltipPosition;
private int lableWidth = Screen.width / 3;
private int paddingY = Screen.height / 4;
private void Awake ()
{
tooltipPosition = new Rect (lableWidth, 0, lableWidth, Screen.height);
}
private void OnGUI ()
{
guiStyle.contentOffset = new Vector2 (lableWidth, 0);
guiStyle.padding = new RectOffset (10, 10, paddingY, 10);
GUI.Label (tooltipPosition, tooltipText, LocalizationHelper.GetString(LocalizationHelper.LEVEL_TUTORIAL_POINT_1));
GUI.Label (new Rect (0, 0, Screen.width, Screen.height), LocalizationHelper.GetString(LocalizationHelper.TAP_TO_CONTINUE));
}
}