Страница 1 из 1
Глобальные переменные
Добавлено:
25 авг 2009, 17:07
Tolking
А вот как вы без глобальных переменных обходитесь? Или как сделать переменную, чтоб ее везде было видно?
Например нужно зпомнить какой объект кликнули мышей последний раз и в других объектах, узнать об этом событии?
Re: Глобальные переменные
Добавлено:
25 авг 2009, 17:42
Neodrop
Я во всех программах пишу скрипт
CsGlobals.csВ него складываю все глобальные переменные и частовызываемые функции данного проекта. И вешаю скрипт на GO в сцене.
Но только в единственном экземпляре.
В скриптах пишу :
- Код: Выделить всё
CsGlobals gl;
void Start()
{
gl = GameObject.FindObjectOfType(typeof(CsGlobals)) as CsGlobals;
}
И использую переменную
gl как интерфейс доступа ко всем моим "глобальным" переменным.
Re: Глобальные переменные
Добавлено:
25 авг 2009, 17:45
Neodrop
Кстати, к примеру, если в CsGlobals собрать все запросы к классу Input (GetKeyDown, GetMouseButtonUp и пр.) и из прочих скриптов вызывать не класс Input а наш CsGlobals и от него получать состояние часто вызываемых клавиш (а он их проверяет в кадре) то этот метод в 20 раз быстрее прямого запроса к Input.
Вот такая находочка.
10 000 обращений из одного скрипта к другому, занимают 0,000015 миллисекунды на моём компьютере. Это очень быстрый метод.
Re: Глобальные переменные
Добавлено:
25 авг 2009, 17:49
gnoblin
Еще можно использовать статические переменные (относятся к классу, а не объекту).
в объявлении класса MyClass:
...
static int blabla;
...
в скриптах:
MyClass.blabla = 10;
Re: Глобальные переменные
Добавлено:
25 авг 2009, 17:55
Neodrop
Чего то я тебя недопонял...
А если у тебя этих MyClass висит десять в сцене? Меняя на одном компоненте значение, ты сменишь на всех?
Re: Глобальные переменные
Добавлено:
25 авг 2009, 18:05
gnoblin
MyClass myClass;
myClass.someVar = 10; //обычная переменная, уникальна для этого экземпляра класса
MyClass.blabla = 10; //статическая переменная, для всего класса она одна... даже не надо создавать ни одного объекта класса чтобы можно было получить к ней доступ.
Re: Глобальные переменные
Добавлено:
25 авг 2009, 18:16
Neodrop
Вот, блин! Опять ученик сделал учителя.
Намотаю на ус. Вряд ли пригодиться... Хотя.. Удобно для задания глобальных состояний - направления ветра, силы излучения или времени суток там...
Или скорости юнитов заданного типа.. Пригадиться-ааа...
Re: Глобальные переменные
Добавлено:
25 авг 2009, 21:17
Tolking
gnoblin писал(а):Еще можно использовать статические переменные (относятся к классу, а не объекту).
в объявлении класса MyClass:
...
static int blabla;
...
в скриптах:
MyClass.blabla = 10;
Т.е. я в каком-то гейм объекте пишу:
Class Global
static gameobject TekObj;
Потом везде можно делать просто
Global.TekObj ? Без всякого поиска?
Re: Глобальные переменные
Добавлено:
25 авг 2009, 22:19
Neodrop
ЗА тем минусом, что эта переменная сменится во всех скриптах этого типа. Так что это не всегда самое оптимальное решение.
Re: Глобальные переменные
Добавлено:
25 авг 2009, 22:59
Const_47
Она изменится из любого скрипта, что очень удобно. И по моему как для глобальной переменной само то.
Re: Глобальные переменные
Добавлено:
17 ноя 2009, 12:19
Tolking
- Код: Выделить всё
public class Global
{
public static int test;
}
вот так нужно объявлять глобалы, в любом скрипте например:
- Код: Выделить всё
using UnityEngine;
using System.Collections;
public class Global
{
public static int test;
}
public class CamPivot: MonoBehaviour {
// Use this for initialization
void Start () {
DontDestroyOnLoad(this);
}
// Update is called once per frame
void Update () {
}
}
P.S. тема для ФАКа
Re: Глобальные переменные
Добавлено:
17 ноя 2009, 20:20
Const_47
Классы которые ты используешь как обертки для хранения глобальных переменных используй с спецификатором static. Это гарантирует тебе невозможность создания экземпляра класса, а значит ты заведомо предотвратишь возможную ошибку. Если у тебя есть много глобальных переменных, и некоторые из них близки по логическому смыслу используй вложенные классы, это улучшит читабельность и сопровождение кода.
Например.
- Код: Выделить всё
public static class Global {
public static class Agent
{
public static string Tanya;
public static string Kolya;
}
public static class Country
{
public static string Russia;
public static string USA;
}
}
Re: Глобальные переменные
Добавлено:
12 авг 2011, 11:27
AndreyMust19
Создаю класс для редактора с using UnityEditor. Глобальные значения хранятся в статических переменных, другие скрипты их получают так: Имя_класса.Имя_переменной. В папку Editor скрипт положить не могу, поскольку он обращается к объектам сцены.
При запуске игры в редакторе значения статических переменных скрипта возвращаются к начальным (заданным при объявлении). А нужно чтобы они сохранялись.
Re: Глобальные переменные
Добавлено:
12 авг 2011, 13:04
gnoblin
а что делает скрипт?
значения можно хранить в объекте сцены в паблик переменных
не понял про ограничение с папкой Editor
Re: Глобальные переменные
Добавлено:
12 авг 2011, 13:31
AndreyMust19
Скрипт должен работать в режиме редактора. Но положить его в папку Editor не могу, поскольку другие игровые скрипты, обращаются к нему, спрашивая настройки в глобальных переменных. Не знаю куда положить эти глобальные переменные.
Думаю создать отдельный скрипт для объекта сцены, чтобы хранить в нем настройки.