Как обратиться к static переменной из нестат. класса?

Форум для самых маленьких, а так же тех, кому недосуг читать справку самостоятельно.

Как обратиться к static переменной из нестат. класса?

Сообщение AndreyMust19 03 мар 2012, 17:27

В справке написано:
To access it from another script you need to use the name of the script followed by a dot and the global variable name.print(TheScriptName.someGlobal);
TheScriptName.someGlobal = 10;

То есть Имя_класса.Поле.

На MSDN тоже так написано:
Синтаксис:
Используется csharp
public class Employee4
{
...
public static int employeeCounter;
}

class MainClass : Employee4
{
    static void Main()
    {
    ...
    Employee4.employeeCounter;
    }
}


Решил создать класс, производный от MonoBehaviour и в нем - статическую переменную:
Синтаксис:
Используется csharp
public class Ladder : MonoBehaviour {

        // Статичные данные:
        public static int distStair;
}


Обращаюсь так:
int a = Ladder.distStair;

пишет ошибку:
Expression denotes a `method group', where a `variable', `value' or `type' was expected


Обращаюсь так:
Ladder info;
...
int a = info.distStair;

пишет другую ошибку:
Static member `Ladder.distStair' cannot be accessed with an instance reference, qualify it with a type name instead


Правильный - первый вариант, но он ему не нравится. Причем с ненаследованным классом от MonoBehaviour (обычным или статическим) - все в порядке:
Так что ему надо?
Unity 3.3.0f4
Нужна помощь? Сами, сами, сами, сами, сами... делаем все сами
AndreyMust19
Адепт
 
Сообщения: 1119
Зарегистрирован: 07 июн 2011, 13:19

Re: Как обратиться к static переменной из нестат. класса?

Сообщение Woolf 03 мар 2012, 17:35

Первый вариант правильный. И должен работать, но вас не насторожило сообщение об ошибке? У вас нет метода с этим же названием?

А вообще, я бы делал бы чуть по другому:

Синтаксис:
Используется csharp
public class Ladder : MonoBehaviour {

        public static  Ladder getI=null;
        public int distStair;

       void onAwake(){
         getI=this;
       }
}

int v=Ladder .getI.distStair;


Мне кажется, так малость правильней (естественно, если объект Ladder у вас один в сцене)
Разработчик theFisherOnline - там, где клюёт
Разработчик Atom Fishing II - Первая 3D MMO про рыбалку
Разработчик Atom Fishing - Рыбалка на поплавок, донку, нахлыст, блесну в постъядерный период.
Аватара пользователя
Woolf
Адепт
 
Сообщения: 7179
Зарегистрирован: 02 мар 2009, 16:59

Re: Как обратиться к static переменной из нестат. класса?

Сообщение AndreyMust19 03 мар 2012, 17:58

Woolf
У вас нет метода с этим же названием?

Нет, проверил.
В принципе это не критично, обхожусь дополнительным статическим классом, в к-м хранятся только статические данные. Просто сейчас решил разобраться что не так, раз по документации объявлять статические члены нестатических классов можно.
Нужна помощь? Сами, сами, сами, сами, сами... делаем все сами
AndreyMust19
Адепт
 
Сообщения: 1119
Зарегистрирован: 07 июн 2011, 13:19

Re: Как обратиться к static переменной из нестат. класса?

Сообщение seaman 04 мар 2012, 15:25

Что-то Вы не то делаете. У меня никакой ошибки.
На пустышке:
Синтаксис:
Используется csharp
using UnityEngine;

public class Temp : MonoBehaviour
{

    public static int temp;
        void Start ()
        {
            transform.up = new Vector3(1, 1, 0);
            temp = 111;

        }
}


На другом объекте:
Синтаксис:
Используется csharp
using UnityEngine;

class Class1 : MonoBehaviour
{
    public int tt;

    void Start()
    {
        tt = Temp.temp;
    }
}

Четко видно, что tt в классе Class1 при запуске становится равным 111, т.е. все работает.
seaman
Адепт
 
Сообщения: 8352
Зарегистрирован: 24 янв 2011, 12:32
Откуда: Самара

Re: Как обратиться к static переменной из нестат. класса?

Сообщение AndreyMust19 04 мар 2012, 16:19

Попробовал ваш пример, все работает. Переименовал свой класс Ladder в Ladder2 (и все обращения к нему), ошибка исчезла. Вернул имя Ladder - снова появилась.
Выходит ему просто имя класса не нравится. Справка по поиску имени Ladder никаких результатов не выдает, т. е. класс не занят. Никаких других скриптов с именем Ladder у меня нет. Ошибка в чем-то другом.

Вот эта злосчастная лестница:
Синтаксис:
Используется csharp
using UnityEngine;
using System.Collections;

public class Ladder : MonoBehaviour {

        // Статичные данные:
        public static float distanceStair = 0.5f;
        public static int distStair = 5;
       
        public Vector3 first_stair;     // координаты нпервой ступеньки
        public enum typeLadder {
                Front, Left, Right
        }
        public typeLadder type = typeLadder.Right;      // расположение лестницы (1 - левая, 2 - напротив камеры, 3 - правая)
        public int stairs = 5;  // число ступенек (/2)
       
        // для ИИ
        private uint conn1, conn2;      // номера соединяемых платформ
}
 
Нужна помощь? Сами, сами, сами, сами, сами... делаем все сами
AndreyMust19
Адепт
 
Сообщения: 1119
Зарегистрирован: 07 июн 2011, 13:19

Re: Как обратиться к static переменной из нестат. класса?

Сообщение Woolf 04 мар 2012, 17:07

А попробуйте переименовать СВОЙ класс в Ladder2, а создать объект класса Ladder, получится ? Если да, то всё понятно ))
Разработчик theFisherOnline - там, где клюёт
Разработчик Atom Fishing II - Первая 3D MMO про рыбалку
Разработчик Atom Fishing - Рыбалка на поплавок, донку, нахлыст, блесну в постъядерный период.
Аватара пользователя
Woolf
Адепт
 
Сообщения: 7179
Зарегистрирован: 02 мар 2009, 16:59

Re: Как обратиться к static переменной из нестат. класса?

Сообщение AndreyMust19 04 мар 2012, 20:19

Нашел. У меня функция в этом же модуле называется Ladder. Поэтому компилятор думает что я обращаюсь к функции, а не к классу. Переименовал функцию и ошибка улетучилась.
Нужна помощь? Сами, сами, сами, сами, сами... делаем все сами
AndreyMust19
Адепт
 
Сообщения: 1119
Зарегистрирован: 07 июн 2011, 13:19


Вернуться в Почемучка

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex [Bot] и гости: 18