Unity c # - Как я могу сделать так, чтобы я мог получить доступ ко всем другим моим классам, переменным и методам через один класс? - PullRequest
0 голосов
/ 11 января 2019

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

Чтобы привести в порядок вещи, сделать их более доступными и избежать конфликтов, я пытался объединить их в один класс.

Например, если у меня есть эти три класса

public class Head
{
   public string eye_color = "blue";
   public string hair_color = "black";

   public void nod()
   {
      //some code to nod
   }
}

public class Body
{
   public string type = "athletic";
}

public class Hands
{
   public int fingers = 10;
}

Я бы хотел вставить их всех в класс Person, чтобы все в этих классах можно было вызывать или получать к ним доступ с помощью чего-то вроде

private Person person = new Person(); 
Debug.Log(person.body.type);
person.head.nod();

Так что в настоящее время я использую подход к настройке класса персонажа примерно так

public class Person
{
   public Head head = new Head();
   public Body body = new Body();
   public Hands hands = new Hands();
}

Формат: MainClassInstance.SomeOtherClassReferencedInTheMainClassInstance.SomeMethodOrVariable - мне нужен доступ ко всему этому через этот первый MainClass.

По большей части это работает. Тем не менее, я сталкиваюсь с несколькими проблемами с классами Monobehaviour, а также со статическими переменными. К ним нельзя получить доступ с экземпляром.

Как я могу справиться с этим, чтобы я мог продолжать звонить / получать доступ ко всему таким же образом (как описано выше)?

Заранее благодарим за любое просвещение: -)

1 Ответ

0 голосов
/ 14 января 2019

Если это просто для решения проблем, связанных с конфликтами и повторным использованием имен переменных и т. Д. Я думаю, что вам действительно нужно пространство имен, а не использование пустого класса, который просто содержит кучу других классов без какой-либо реальной причины. Я могу ошибаться, вы всегда хотите, чтобы ваша группа классов создавалась вместе? Требуете ли вы, чтобы тело головы и руки создавались вместе каждый раз из-за некоторой взаимозависимости? Или все они на самом деле отделены друг от друга и не имеют прямой зависимости друг от друга? В последнем случае, вероятно, было бы лучше хранить их в пространстве имен вместе, а не в классе.

Что касается вашего основного вопроса, доступ к статическим переменным в экземпляре выполняется с помощью:

public class Head
{
    public static int eyeCount;
    public int eyelashCount;

    public GrowEyeLash()
    {
        eyelashCount++; //accessing a normal variable
    }

    public SetEyeCount(int eyes)
    {
        Head.eyeCount = eyes; //accessing a static variable
    }
}

Когда вы хотите получить доступ к статической переменной, вы используете класс, а не экземпляр, поскольку статическая переменная связана с самим типом, а не с каким-либо конкретным экземпляром. По сути, статическая переменная существует только в одном месте в вашем коде и применяется к всем экземплярам.

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