Unity C # - Пользовательский макрос #if препроцессора - PullRequest
1 голос
/ 07 марта 2019

В настоящее время я пытаюсь достичь чего-то и не могу найти решение:

Я хочу создать небольшой кусок кода (на самом деле класс), который будет обрабатывать функции покупки InApp.нужно включить UnityEngine.Purchasing .

Дело в том, что у меня не всегда это есть, и я хочу, чтобы мой класс читался только при наличии доступа к нему, включая: Если Unity In-Приложение Служба закупок включена.

Я знаю, что мы можем указать некоторый код для комментария с зависимой от платформы #if.И я попытался перейти по этой ссылке , чтобы обработать ее с определенным файлом (который следует добавить, только если у вас включена служба Unity IAP).

private static List<AssetDefine> CustomDefines = new List<AssetDefine> {
    new AssetDefine ("UnityPurchasing.m", new BuildTargetGroup[] { BuildTargetGroup.Standalone, BuildTargetGroup.Android, BuildTargetGroup.iOS, BuildTargetGroup.Unknown }, "UnityIAP_Enabled"),
};

Вот текущая "AssetDefine "и

#if UnityIAP_Enabled
using UnityEngine.Purchasing;
#endif

Вот как я пытаюсь его использовать.Мой редактор Unity сообщает мне, что

"имя типа или пространства имен 'Закупки' не существует в пространстве имен UnityEngine"

Я не уверен, есть ли другоеспособ определения пользовательского #if, чтобы мой код всегда был здесь, но не всегда учитывался при попытке компиляции.

Заранее спасибо!

1 Ответ

1 голос
/ 07 марта 2019

Импорт пространства имен разрешается во время компиляции, поэтому вам необходимо убедиться, что на сборку, содержащую пространство имен, ссылается ваш проект.

Вы можете использовать условные директивы препроцессора для создания разных версий вашего приложения (игра в этомcase) с заданной ссылкой или без нее, но необходимо убедиться, что создаваемая версия соответствует директиве препроцессора и содержит ли она справочную сборку, например:

Case 1 - Buildверсия, которая не поддерживает «покупки в приложении»

  1. Удалите пакет «В покупке приложения» в Window -> Диспетчер пакетов в Unity.
  2. Определите директиву препроцессорадля случая 1 (это должно присутствовать перед любой директивой using или кодом, использующим классы покупок в приложении.

#undef UnityIAP_Enabled

Оберните код с помощью директив #if, код внутри блока будет игнорироваться во время компиляции (он даже не будет частью вашего исполняемого файла, что уменьшит размер вашей игры)
    #if UnityIAP_Enabled
    using UnityEngine.Purchasing;
    #endif
Сборка игры.

Пример 2 - Сборка версии приложения (игры), которая поддерживает «покупки внутри приложения»

Теперь вы делаетенаоборот

  1. Добавьте пакет «В приложении покупки» в Window -> Диспетчер пакетов в Unity.
  2. Определите директиву препроцессора для случая 2

#define UnityIAP_Enabled

Сборка игры.

Редактировать

Вы можете избежать ручной установки определений в своем коде, используя пользовательские #defines платформы, как указано здесь: https://docs.unity3d.com/Manual/PlatformDependentCompilation.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...