Является ли использование #if UNITY_EDITOR возвращением вместо #if !UNITY_EDITOR, чтобы иметь возможность видеть ссылки в редакторе кода, хорошей идеей?

#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 . Таким образом, у вас есть один метод подписи, который можно изменить, если потребуется, вместо двух.