Недавно наткнулся на весьма полезный скрипт и решил написать пост. Выложить ссылку было бы слишком просто для меня, поэтому я накидал здесь кучу буковок. Кому не интересно переходим сразу в конец поста и открываем ссылку. Для остальных продолжу, пожалуй!
Довольно часто у нас возникает необходимость изменять код на этапе компиляции в зависимости от каких бы то ни было условий. Для этого можно использовать всем известную директиву препроцессора #define. А теперь для наглядности немного кода:
В следующих директориях создаем текстовый файл с расширением .rsp, имя даем в зависимости от языка.
C#-< Project Path>/Assets/smcs.rsp
C# Скрипты редактора-< Project Path>/Assets/gmcs.rsp
UnityScript -< Project Path>/Assets/us.rsp
Boo-< Project Path>/Assets/boo.rsp
В нем в одну единственную строчку прописываем наши define'ы, следующим образом:
Вот и обещанная ссылочка.
А так он выглядит:

Вот и все, собственно говоря =)
Довольно часто у нас возникает необходимость изменять код на этапе компиляции в зависимости от каких бы то ни было условий. Для этого можно использовать всем известную директиву препроцессора #define. А теперь для наглядности немного кода:
/*
* DefineTest.cs
*/
#define DEV_MODE
#define TRACE_STEP
using UnityEngine;
using System.Collections;
public class DefineTest : MonoBehaviour
{
private void Start ()
{
#if DEV_MODE
Test();
#endif
}
private void Test()
{
#if TRACE_STEP
Debug.Log( " - DefineTest::Test();");
#endif
Debug.Log ("Hello world!");
}
}
Думаю всем понятно как все это дело работает. В противном случае закомментируйте первый или второй #define в начале кода, и проследите за работой скрипта. А теперь создадим еще один скрипт.
/*
* OtherTest.cs
*/
/* если здесь объявим те же Define,
что и в первом скрипте, то все будет работать,
но представьте, что скриптов использующих их
очень много и в каждый из них дублировать
эти строки на мой взгляд неразумно
*/
using UnityEngine;
using System.Collections;
public class OtherTest : MonoBehaviour
{
private void Start ()
{
Test ();
}
private void Test()
{
#if (DEV_MODE || TRACE_STEP)
Debug.Log("Define visible");
#else
Debug.Log("Defines invisible");
#endif
}
}
Для того чтобы наши define'ы были видны во всем проекте будем использовать стандартные средства Unity редактора. В панели меню выбираем: File->Build Settings... -> Player Settings, далее на панели раздел Other Settings -> Configurations ниже поле ввода там и прописываем через запятую наши define'ы: DEV_MODE;TRACE_STEP. Но я все же покажу еще один способ:В следующих директориях создаем текстовый файл с расширением .rsp, имя даем в зависимости от языка.
C#-< Project Path>/Assets/smcs.rsp
C# Скрипты редактора-< Project Path>/Assets/gmcs.rsp
UnityScript -< Project Path>/Assets/us.rsp
Boo-< Project Path>/Assets/boo.rsp
В нем в одну единственную строчку прописываем наши define'ы, следующим образом:
-define:DEV_MODE;TRACE_STEP
Пару раз проделав это вручную, мне захотелось упростить процесс и я начал писать свой скрипт который делал бы это за меня, но совершенно случайным образом наткнулся на уже готовое решение. Вот оно:Вот и обещанная ссылочка.
А так он выглядит:

Вот и все, собственно говоря =)
Комментариев нет:
Отправить комментарий