Я изучаю Unity, пытаясь делать что-то, а затем, когда у меня ничего не получается (потому что это жизнь с XD), я пытаюсь найти несколько сценариев, на которых можно учиться.
Я пытался сделать плавный платформер-контроллер, а потом наткнулся на видео от Brackeys.
У меня проблемы с пониманием этой строки кода:
if (colliders[i].gameObject != gameObject)
{
m_Grounded = true;
if (!wasGrounded)
OnLandEvent.Invoke();
}
(Полный скрипт можно найти здесь: https://github.com/Brackeys/2D-Character-Controller/blob/master/CharacterController2D.cs)
Именно эта строка 54 вызывает у меня проблемы.
if (colliders[i].gameObject != gameObject)
Что он сравнивает? Первый — это игровой объект, прикрепленный к коллайдеру, а второй — класс по умолчанию. Может ли кто-нибудь объяснить, что он пытается здесь сделать?
Обратите внимание, что Monobehvaiour
наследуется от component. Таким образом, он имеет доступ ко всем своим свойствам gameObject
, transform
..и т.д. Проверить документация по компонентам
Итак, во фрагменте
if (colliders[i].gameObject != gameObject)
{
m_Grounded = true;
if (!wasGrounded)
OnLandEvent.Invoke();
}
вы сравниваете объект определенного массива (colliders[i].gameObject
) с текущим моноповедением, в котором выполняется код (gameObject
или this.gameObject
).
В классе вы можете получить доступ ко всем членам public
и protected
, которые он наследует, пропуская ключевое слово this
, поскольку можно понять, что по умолчанию вы ссылаетесь на текущий экземпляр.
Надеюсь, это имеет смысл.