Вопрос об использовании Get Accessor вместо оператора if в коде C # для проекта 2d Platformer - PullRequest
0 голосов
/ 19 октября 2019

Я новичок в C #, и недавно я скачал платформер Unity 2D с Github. Я пытаюсь понять некоторую кодировку внутри файлов проекта для игрового объекта игрока, поскольку мне интересно узнать, как создавалась физика в игре. Текущий фрагмент кода, который я пытаюсь понять, показан ниже:

public float standingHeight = 40f;
public float ballHeight = 30f;

private float heightHalf
{
    get
    {
        if (rolling || jumped) { return ballHeight / 2f; }
        else { return standingHeight / 2f; }
    }
}

Я пытаюсь понять, что пытается сделать переменная heightHalf. Эта переменная, кажется, имеет «get accessor», если я не ошибаюсь. Правильно ли я думаю, что код говорит, что если игровой объект игрока прыгает или катится, он вернет переменную ballHeight, деленную на «2f»? В противном случае будет возвращено значение standHeight, деленное на «2f»?

Означает ли это, что переменной heightHalf будет присвоено значение на основе одного из двух вычислений, упомянутых в предыдущем абзаце? Могу я спросить, почему вместо получения оператора if используется «Get Accessor»? Например:

if (rolling || jumped) { 
heightHalf = ballHeight / 2f;
}else{
heightHalf =  standingHeight / 2f;
}

Любая полезная информация будет принята с благодарностью.

С уважением,

1 Ответ

1 голос
/ 19 октября 2019

Молодцы, чтобы понять это. Да, это именно то, что вы описали.

Лично я не думаю, что есть предпочтительные способы сделать это. Если вы знакомы с Java, у них нет методов доступа get / set. Вы можете сделать это только с помощью открытого свойства или создания методов get () / set (значение объекта).

C # дает вам больше контроля над тем, как вы можете использовать свойство.

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

Вы можете сделать это либо из свойства get / set, либометод getHeightHalf ().

Однако вместо объектно-ориентированных принципов можно сказать, что все методы объекта могут быть указаны как действие. то есть: класс, который обрабатывает игрока, может иметь функции Jump (), Move (), Attack ().

Средства доступа Get / Set предоставляют значения, необходимые для этих действий, поэтому логика heightHalf размещена насвойство вместо метода.

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