Доброго времени суток. В игре есть класс GameScore, в котором есть некоторое кол-во вложенных классов, которые должны хранить данные для сравнений. Вот сам класс:
public class GameScore : MonoBehaviour
{
//first level info
public class FirstLevel
{
internal const float HightScore = 7f;
internal const float MiddleScore = 11f;
internal const float LowScore = 15f;
internal static int bestResult = 0;
}
//second level info
public class SecondLevel
{
internal const float HightScore = 5f;
internal const float MiddleScore = 7f;
internal const float LowScore = 9f;
internal static int bestResult = 0;
}
}
А теперь сам вопрос: как мне из другого класса получить доступ к вложенному классу FirstLevel
, например?
P.S. Я пытаюсь добавить к другому классу public переменную GameScore
и уже оттуда получить доступ к вложенному классу, но ничего не получается.
Update (как я пытаюсь получить доступ к классу FirstLevel):
public GameScore GameScorePrefab;
private void CheckStars()
{
int bestResult = GameScorePrefab.FirstLevel.bestResult;
//другой код
}
После этого пишет: "GameScore.FirstLevel is a type, which is not valid in the given context.FirstLevel cannot reference a type through an expresion, try GameScore.FirstLevel instead." А интелесенс класс FirstLevel вообще не видит.
Я бы на вашем месте сделал public
переменные в GameScore
и обращался через них. И возможно вместо internal
использование public
, поскольку вы возможно пытаетесь обращаться из другого namespace
public class GameScore : MonoBehaviour
{
public FirstLevel firstLevel;
public SecondLevel secondLevel;
//first level info
public class FirstLevel
{
internal const float HightScore = 7f;
internal const float MiddleScore = 11f;
internal const float LowScore = 15f;
public /*static*/ int bestResult = 0;
}
//second level info
public class SecondLevel
{
internal const float HightScore = 5f;
internal const float MiddleScore = 7f;
internal const float LowScore = 9f;
public /*static*/ int bestResult = 0;
}
}
тогда доступ будет следующим образом:
public GameScore GameScorePrefab;
private void CheckStars()
{
int bestResult = GameScorePrefab.firstLevel.bestResult;
//другой код
}
Если вложенный тип нужно применять вне включающего типа, его надо квалифицировать именем включающего типа.
То есть если имеется класс:
public class OuterClass {
public class PublicInnerClass {}
private class PrivatelnnerClass {}
}
то обращение должно быть таким:
void MyMethod() {
// Создать и использовать открытый вложенный класс.
OuterClass.PublicInnerClass inner;
inner = new OuterClass.PublicInnerClass();
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - полное имя
}
или
OuterClass.PublicInnerClass inner;
void MyMethod() {
inner = new OuterClass.PublicInnerClass();
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - полное имя
}
и т.д.
Если хочешь сохранять данные по каждому лвл, то почему бы не использовать какой-нибудь словарь, где ключом будет номер лвл? Да или просто в список добавлять. А этот список хранить в asset
, к примеру.
Вам не нужна переменная типа GameScore
. Статические поля принадлежат типам, а не объектам.
int bestResult1 = GameScore.FirstLevel.bestResult;
int bestResult2 = GameScore.SecondLevel.bestResult;
Добавьте в код:
using static YourNamespace.GameScore;
и используйте:
int bestResult = FirstLevel.bestResult;
или через имя "внешнего" класса:
int bestResult = GameScore.FirstLevel.bestResult;
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Господа, шаблон регвыражения состоит из трех частей - переменная, рег
этот код на 64 битной винде выдает путь до "C:\Program Files (x86)", а как получить путь до папки ProgramFiles?
Добрый день, занялся реализацией кастомной командыРеализовал ICommand и все отлично работает, но возникла мысль, а хорошо бы получать данные...