#c# #unity3d
Вопрос:
Я работаю над существующим мобильным приложением. Есть некоторые случаи, подобные этому:
private void Example() { //some universal code #if UNITY_EDITOR return; #endif #pragma warning disable CS0162 // Unreachable code detected //some mobile platform code #pragma warning restore CS0162 // Unreachable code detected }
Я бы реализовал это в прошлом так:
private void Example() { //some universal code #if !UNITY_EDITOR //some mobile platform code #endif }
Версия UNITY_EDITOR выглядит очень некрасиво, и я не могу добавить универсальный код в конце функции. С другой стороны, у него есть преимущество в том, что он может находить ссылки на мобильный код при работе в редакторе.
Есть ли что-нибудь, что я упускаю? Есть ли возможность изменить Visual Studio, чтобы она находила ссылки, и у меня была подсветка кода в коде !UNITY_EDITOR?
Ответ №1:
Ты прав, это действительно выглядит довольно уродливо. В своих проектах я отправляю, чтобы сохранить файл, определяющий настройки платформы, и я бы использовал это здесь вот так:
public static class ApplicationSettings { #if UNITY_EDITOR public static bool IsUnityEditor = true; #else public static bool IsUnityEditor = false; #endif #if PLATFORM_STANDALONE_WIN public static bool IsPlatformStandaloneWin = true; #else public static bool IsPlatformStandaloneWin = false; #endif ... etc ... }
Затем, если ваша кодовая база действительно выполняет определенные действия в зависимости от платформы, ответвитесь на это условие.
public void Example() { if (ApplicationSettings.IsPlatformStandaloneWin) StandaloneWindowsExample(); // windows specific else EveryoneElseExample(); // other platforms: ... // code that applies to all platforms }
Или даже определите свое собственное перечисление для поддерживаемых вами платформ и включите его значение.
Комментарии:
1. Если вы разместите возвращаемую часть в новой строке, у вас будет одна подпись свойства в общей части, а затем возвращаемые значения в конкретных частях. Таким образом, у вас есть только одно место для обновления, если это необходимо.
2. @Everts извини, я не понимаю. Не могли бы вы поподробнее, пожалуйста?
3. Трудно написать здесь, но размещение общедоступного статического bool IsUnityEditor в строке, затем в новой строке и #если UNITY_EDITOR, затем в новой строке с = true; затем #еще раз новая строка =false; и #endif . Таким образом, у вас есть один метод подписи, который можно изменить, если потребуется, вместо двух.