reckfellENGINE

CharacterBody2D

Управляемое кодом тело персонажа 2D.

На этой странице
class CharacterBody2DReckfellSharpНаследует PhysicsBody2D

CharacterBody2D двигается через MoveAndSlide или MoveAndCollide. Ускорение, ввод и правила прыжка задаёт скрипт; тип тела сам по себе не добавляет управление или гравитацию.

Velocity перед MoveAndSlide задаётся в единицах/с без дополнительного delta. MoveAndCollide принимает перемещение за вызов. IsOnFloor/IsOnWall и slide-контакты описывают последнее MoveAndSlide, а не постоянное соседство. После телепорта не разрешайте действие по старому состоянию пола. Настройки Grounded/Floating, UpDirection, snap и предельного угла имеют отдельные роли.

Рабочие примеры.

Объявления сверены с C# SDK 1.0.0. Раскройте имя, чтобы увидеть сигнатуры и описание.

Конструкторы1

CharacterBody2DКонструктор
# CharacterBody2D
C#
public CharacterBody2D();

Свойства15

FloorBlockOnWallСвойство
# FloorBlockOnWall
C#
public bool FloorBlockOnWall { get; set; }

Если true, тело сможет двигаться только по полу. Эта опция исключает возможность ходить по стенам, однако позволяет скользить по ним.

FloorConstantSpeedСвойство
# FloorConstantSpeed
C#
public bool FloorConstantSpeed { get; set; }

Если false (по умолчанию), тело будет двигаться быстрее на спусках и медленнее на подъемах. Если true, тело всегда будет двигаться с одинаковой скоростью на земле, независимо от уклона. Обратите внимание, что вам нужно использовать CharacterBody2D.FloorSnapLength, чтобы придерживаться спуска с постоянной скоростью.

FloorMaxAngleСвойство
# FloorMaxAngle
C#
public float FloorMaxAngle { get; set; }

Предельный угол классификации поверхности как пола/потолка относительно UpDirection, в радианах. Для 45 градусов используйте Mathf.DegToRad(45).

FloorSnapLengthСвойство
# FloorSnapLength
C#
public float FloorSnapLength { get; set; }

Устанавливает расстояние привязки. Если установлено значение, отличное от 0.0, тело остается прикрепленным к склонам при вызове CharacterBody2D.MoveAndSlide. Вектор привязки определяется заданным расстоянием вдоль противоположного направления CharacterBody2D.UpDirection. Пока вектор привязки находится в контакте с землей и тело движется против CharacterBody2D.UpDirection, тело будет оставаться прикрепленным к поверхности. Привязка не применяется, если тело движется вдоль CharacterBody2D.UpDirection, то есть оно содержит вертикальную скорость подъема, поэтому оно сможет оторваться от земли при прыжке или когда тело что-то толкает вверх. Если вы хотите применить привязку без учета скорости, используйте CharacterBody2D.ApplyFloorSnap.

FloorStopOnSlopeСвойство
# FloorStopOnSlope
C#
public bool FloorStopOnSlope { get; set; }

Если true, тело не будет скользить по склонам при вызове CharacterBody2D.MoveAndSlide, когда тело стоит на месте. Если false, тело будет скользить по склонам пола, когда CharacterBody2D.Velocity прикладывает направленную вниз силу.

MaxSlidesСвойство
# MaxSlides
C#
public int MaxSlides { get; set; }

Максимальное количество раз, которое тело может изменить направление, прежде чем оно остановится при вызове CharacterBody2D.MoveAndSlide. Должно быть больше нуля.

MotionModeСвойство
# MotionMode
C#
public CharacterBody2D.MotionModeEnum MotionMode { get; set; }

Устанавливает режим движения, который определяет поведение CharacterBody2D.MoveAndSlide.

PlatformFloorLayersСвойство
# PlatformFloorLayers
C#
public uint PlatformFloorLayers { get; set; }

Слои столкновений, которые будут включены для обнаружения напольных тел, которые будут действовать как движущиеся платформы, за которыми будет следовать CharacterBody2D. По умолчанию все напольные тела обнаруживаются и распространяют свою скорость.

PlatformOnLeaveСвойство
# PlatformOnLeave
C#
public CharacterBody2D.PlatformOnLeaveEnum PlatformOnLeave { get; set; }

Устанавливает поведение, применяемое при покидании движущейся платформы. По умолчанию, для физической точности, при покидании применяется последняя скорость платформы.

PlatformWallLayersСвойство
# PlatformWallLayers
C#
public uint PlatformWallLayers { get; set; }

Слои столкновений, которые будут включены для обнаружения тел стен, которые будут действовать как движущиеся платформы, за которыми будет следовать CharacterBody2D. По умолчанию все тела стен игнорируются.

SafeMarginСвойство
# SafeMargin
C#
public float SafeMargin { get; set; }

Дополнительный запас используется для восстановления столкновений при вызове CharacterBody2D.MoveAndSlide. Если тело находится как минимум на таком расстоянии от другого тела, оно будет считать их сталкивающимися и будет оттолкнуто перед выполнением фактического движения. Более высокое значение означает большую гибкость для обнаружения столкновений, что помогает последовательно обнаруживать стены и полы. Более низкое значение заставляет алгоритм столкновений использовать более точное обнаружение, поэтому его можно использовать в случаях, когда требуется особая точность, например, в очень низком масштабе, чтобы избежать видимого дрожания, или для стабильности со стопкой тел персонажей.

SlideOnCeilingСвойство
# SlideOnCeiling
C#
public bool SlideOnCeiling { get; set; }

Если true, то при прыжке у потолка тело будет скользить, если false — остановится и упадет вертикально.

UpDirectionСвойство
# UpDirection
C#
public Vector2 UpDirection { get; set; }

Вектор, направленный вверх, используется для определения того, что является стеной, а что полом (или потолком) при вызове CharacterBody2D.MoveAndSlide. По умолчанию Vector2.Up. Поскольку вектор будет нормализован, он не может быть равен Vector2.Zero, если вы хотите, чтобы все столкновения были зарегистрированы как стены, рассмотрите возможность использования CharacterBody2D.MotionModeEnum.Floating в качестве CharacterBody2D.MotionMode.

VelocityСвойство
# Velocity
C#
public Vector2 Velocity { get; set; }

Запрошенная/скорректированная движением скорость в единицах за секунду. MoveAndSlide интегрирует её по времени; это не точное мировое перемещение последнего кадра или полная скорость платформы.

WallMinSlideAngleСвойство
# WallMinSlideAngle
C#
public float WallMinSlideAngle { get; set; }

Минимальный угол (в радианах), под которым тело может скользить при столкновении со стеной. Значение по умолчанию равно 15 градусам. Это свойство влияет на движение только тогда, когда CharacterBody2D.MotionMode равно CharacterBody2D.MotionModeEnum.Floating.

Методы48

ApplyFloorSnapvoid
# ApplyFloorSnap
C#
public void ApplyFloorSnap();

Позволяет вручную применить привязку к полу независимо от скорости тела. Эта функция ничего не делает, когда CharacterBody2D.IsOnFloor возвращает true.

GetFloorAnglefloat
# GetFloorAngle
C#
public float GetFloorAngle(Vector2? upDirection = default);

Возвращает угол столкновения пола в последней точке столкновения в соответствии с CharacterBody2D.UpDirection, который по умолчанию равен Vector2.Up. Это значение всегда положительно и действительно только после вызова CharacterBody2D.MoveAndSlide и когда CharacterBody2D.IsOnFloor возвращает true.

Параметры
ИмяТипПо умолчанию
upDirectionVector2?default
upDirection

Если параметр не имеет значения, то значение по умолчанию: new Vector2(0.0f, -1.0f).

Возвращает float
GetFloorMaxAnglefloat
# GetFloorMaxAngle
C#
public float GetFloorMaxAngle();
Возвращает float
GetFloorNormalVector2
# GetFloorNormal
C#
public Vector2 GetFloorNormal();

Возвращает нормаль столкновения пола в последней точке столкновения. Действительно только после вызова CharacterBody2D.MoveAndSlide и когда CharacterBody2D.IsOnFloor возвращает true. Предупреждение: Нормаль столкновения не всегда совпадает с нормалью поверхности.

Возвращает Vector2
GetFloorSnapLengthfloat
# GetFloorSnapLength
C#
public float GetFloorSnapLength();
Возвращает float
GetLastMotionVector2
# GetLastMotion
C#
public Vector2 GetLastMotion();

Возвращает последнее движение, примененное к CharacterBody2D во время последнего вызова CharacterBody2D.MoveAndSlide. Движение может быть разделено на несколько движений, когда происходит скольжение, и этот метод возвращает последнее, что полезно для получения текущего направления движения.

Возвращает Vector2
GetLastSlideCollisionKinematicCollision2D
# GetLastSlideCollision
C#
public KinematicCollision2D GetLastSlideCollision();

Возвращает KinematicCollision2D, если произошло столкновение. Возвращаемое значение содержит информацию о последнем столкновении, произошедшем во время последнего вызова CharacterBody2D.MoveAndSlide. Возвращает null, если столкновения не произошло. См. также CharacterBody2D.GetSlideCollision.

Возвращает KinematicCollision2D
GetMaxSlidesint
# GetMaxSlides
C#
public int GetMaxSlides();
Возвращает int
GetMotionModeCharacterBody2D.MotionModeEnum
# GetMotionMode
C#
public CharacterBody2D.MotionModeEnum GetMotionMode();
Возвращает CharacterBody2D.MotionModeEnum
GetPlatformFloorLayersuint
# GetPlatformFloorLayers
C#
public uint GetPlatformFloorLayers();
Возвращает uint
GetPlatformOnLeaveCharacterBody2D.PlatformOnLeaveEnum
# GetPlatformOnLeave
C#
public CharacterBody2D.PlatformOnLeaveEnum GetPlatformOnLeave();
Возвращает CharacterBody2D.PlatformOnLeaveEnum
GetPlatformVelocityVector2
# GetPlatformVelocity
C#
public Vector2 GetPlatformVelocity();

Возвращает линейную скорость платформы в последней точке столкновения. Действительно только после вызова CharacterBody2D.MoveAndSlide.

Возвращает Vector2
GetPlatformWallLayersuint
# GetPlatformWallLayers
C#
public uint GetPlatformWallLayers();
Возвращает uint
GetPositionDeltaVector2
# GetPositionDelta
C#
public Vector2 GetPositionDelta();

Возвращает перемещение (дельту положения), произошедшее во время последнего вызова CharacterBody2D.MoveAndSlide.

Возвращает Vector2
GetRealVelocityVector2
# GetRealVelocity
C#
public Vector2 GetRealVelocity();

Возвращает текущую реальную скорость с момента последнего вызова CharacterBody2D.MoveAndSlide. Например, когда вы поднимаетесь по склону, вы будете двигаться по диагонали, даже если скорость горизонтальная. Этот метод возвращает диагональное движение, в отличие от CharacterBody2D.Velocity, который возвращает запрошенную скорость.

Возвращает Vector2
GetSafeMarginfloat
# GetSafeMargin
C#
public float GetSafeMargin();
Возвращает float
GetSlideCollisionKinematicCollision2D
# GetSlideCollision
C#
public KinematicCollision2D GetSlideCollision(int slideIdx);

Возвращает KinematicCollision2D, содержащий информацию о столкновении, произошедшем во время последнего вызова метода CharacterBody2D.MoveAndSlide. Поскольку тело может столкнуться несколько раз за один вызов CharacterBody2D.MoveAndSlide, необходимо указать индекс столкновения в диапазоне от 0 до (CharacterBody2D.GetSlideCollisionCount - 1). См. также CharacterBody2D.GetLastSlideCollision. Пример: Переберите столкновения с помощью цикла for:

C#
for (int i = 0; i < GetSlideCollisionCount(); i++)
{
    KinematicCollision2D collision = GetSlideCollision(i);
    ReckfellApi.Print("Collided with: ", (collision.GetCollider() as Entity).Name);
}
Параметры
ИмяТипПо умолчанию
slideIdxint—
Возвращает KinematicCollision2D
GetSlideCollisionCountint
# GetSlideCollisionCount
C#
public int GetSlideCollisionCount();

Число slide-контактов последнего MoveAndSlide. Не является количеством всех соседних тел; результаты MoveAndCollide читаются из возвращённого им объекта.

Возвращает int
GetUpDirectionVector2
# GetUpDirection
C#
public Vector2 GetUpDirection();
Возвращает Vector2
GetVelocityVector2
# GetVelocity
C#
public Vector2 GetVelocity();
Возвращает Vector2
GetWallMinSlideAnglefloat
# GetWallMinSlideAngle
C#
public float GetWallMinSlideAngle();
Возвращает float
GetWallNormalVector2
# GetWallNormal
C#
public Vector2 GetWallNormal();

Возвращает нормаль столкновения стены в последней точке столкновения. Действительно только после вызова CharacterBody2D.MoveAndSlide и когда CharacterBody2D.IsOnWall возвращает true. Предупреждение: Нормаль столкновения не всегда совпадает с нормалью поверхности.

Возвращает Vector2
IsFloorBlockOnWallEnabledbool
# IsFloorBlockOnWallEnabled
C#
public bool IsFloorBlockOnWallEnabled();
Возвращает bool
IsFloorConstantSpeedEnabledbool
# IsFloorConstantSpeedEnabled
C#
public bool IsFloorConstantSpeedEnabled();
Возвращает bool
IsFloorStopOnSlopeEnabledbool
# IsFloorStopOnSlopeEnabled
C#
public bool IsFloorStopOnSlopeEnabled();
Возвращает bool
IsOnCeilingbool
# IsOnCeiling
C#
public bool IsOnCeiling();

Возвращает true, если тело столкнулось с потолком при последнем вызове CharacterBody2D.MoveAndSlide. В противном случае возвращает false. CharacterBody2D.UpDirection и CharacterBody2D.FloorMaxAngle используются для определения того, является ли поверхность «потолком» или нет.

Возвращает bool
IsOnCeilingOnlybool
# IsOnCeilingOnly
C#
public bool IsOnCeilingOnly();

Возвращает true, если тело столкнулось только с потолком при последнем вызове CharacterBody2D.MoveAndSlide. В противном случае возвращает false. CharacterBody2D.UpDirection и CharacterBody2D.FloorMaxAngle используются для определения того, является ли поверхность «потолком» или нет.

Возвращает bool
IsOnFloorbool
# IsOnFloor
C#
public bool IsOnFloor();

Состояние пола после последнего MoveAndSlide относительно UpDirection/FloorMaxAngle. До первого движения или после телепорта старое состояние нельзя считать новой проверкой опоры.

Возвращает bool
IsOnFloorOnlybool
# IsOnFloorOnly
C#
public bool IsOnFloorOnly();

Возвращает true, если тело столкнулось только с полом при последнем вызове CharacterBody2D.MoveAndSlide. В противном случае возвращает false. CharacterBody2D.UpDirection и CharacterBody2D.FloorMaxAngle используются для определения того, является ли поверхность «полом» или нет.

Возвращает bool
IsOnWallbool
# IsOnWall
C#
public bool IsOnWall();

Returns (Возврат) true если тело столкнулось со стеной по последнему призыву CharacterBody2D.MoveAndSlide. В противном случае возвращение false. . . . . CharacterBody2D.UpDirection и CharacterBody2D.FloorMaxAngle используются для определения того, является ли поверхность "стеной" или нет.

Возвращает bool
IsOnWallOnlybool
# IsOnWallOnly
C#
public bool IsOnWallOnly();

Returns (Возврат) true если тело столкнулось только со стеной по последнему призыву CharacterBody2D.MoveAndSlide. В противном случае возвращение false. . . . . CharacterBody2D.UpDirection и CharacterBody2D.FloorMaxAngle используются для определения того, является ли поверхность "стеной" или нет.

Возвращает bool
IsSlideOnCeilingEnabledbool
# IsSlideOnCeilingEnabled
C#
public bool IsSlideOnCeilingEnabled();
Возвращает bool
MoveAndSlidebool
# MoveAndSlide
C#
public bool MoveAndSlide();

Двигает тело по Velocity, учитывая шаг времени и выполняя скольжение. Не умножайте Velocity на delta перед вызовом. Возвращает bool столкновения, обновляет состояние контактов и может изменить Velocity.

Возвращает bool
SetFloorBlockOnWallEnabledvoid
# SetFloorBlockOnWallEnabled
C#
public void SetFloorBlockOnWallEnabled(bool enabled);
Параметры
ИмяТипПо умолчанию
enabledbool—
SetFloorConstantSpeedEnabledvoid
# SetFloorConstantSpeedEnabled
C#
public void SetFloorConstantSpeedEnabled(bool enabled);
Параметры
ИмяТипПо умолчанию
enabledbool—
SetFloorMaxAnglevoid
# SetFloorMaxAngle
C#
public void SetFloorMaxAngle(float radians);
Параметры
ИмяТипПо умолчанию
radiansfloat—
SetFloorSnapLengthvoid
# SetFloorSnapLength
C#
public void SetFloorSnapLength(float floorSnapLength);
Параметры
ИмяТипПо умолчанию
floorSnapLengthfloat—
SetFloorStopOnSlopeEnabledvoid
# SetFloorStopOnSlopeEnabled
C#
public void SetFloorStopOnSlopeEnabled(bool enabled);
Параметры
ИмяТипПо умолчанию
enabledbool—
SetMaxSlidesvoid
# SetMaxSlides
C#
public void SetMaxSlides(int maxSlides);
Параметры
ИмяТипПо умолчанию
maxSlidesint—
SetMotionModevoid
# SetMotionMode
C#
public void SetMotionMode(CharacterBody2D.MotionModeEnum mode);
Параметры
ИмяТипПо умолчанию
modeCharacterBody2D.MotionModeEnum—
SetPlatformFloorLayersvoid
# SetPlatformFloorLayers
C#
public void SetPlatformFloorLayers(uint excludeLayer);
Параметры
ИмяТипПо умолчанию
excludeLayeruint—
SetPlatformOnLeavevoid
# SetPlatformOnLeave
C#
public void SetPlatformOnLeave(CharacterBody2D.PlatformOnLeaveEnum onLeaveApplyVelocity);
Параметры
ИмяТипПо умолчанию
onLeaveApplyVelocityCharacterBody2D.PlatformOnLeaveEnum—
SetPlatformWallLayersvoid
# SetPlatformWallLayers
C#
public void SetPlatformWallLayers(uint excludeLayer);
Параметры
ИмяТипПо умолчанию
excludeLayeruint—
SetSafeMarginvoid
# SetSafeMargin
C#
public void SetSafeMargin(float margin);
Параметры
ИмяТипПо умолчанию
marginfloat—
SetSlideOnCeilingEnabledvoid
# SetSlideOnCeilingEnabled
C#
public void SetSlideOnCeilingEnabled(bool enabled);
Параметры
ИмяТипПо умолчанию
enabledbool—
SetUpDirectionvoid
# SetUpDirection
C#
public void SetUpDirection(Vector2 upDirection);
Параметры
ИмяТипПо умолчанию
upDirectionVector2—
SetVelocityvoid
# SetVelocity
C#
public void SetVelocity(Vector2 velocity);
Параметры
ИмяТипПо умолчанию
velocityVector2—
SetWallMinSlideAnglevoid
# SetWallMinSlideAngle
C#
public void SetWallMinSlideAngle(float radians);
Параметры
ИмяТипПо умолчанию
radiansfloat—

CharacterBody2D.MotionModeEnum

ЗначениеОписание
Floating = 1

Применять, когда нет понятия пола или потолка. Все столкновения будут сообщаться как on_wall. В этом режиме при скольжении скорость всегда будет постоянной. Этот режим подходит для игр сверху вниз.

ПЛАТФОРМ ОНА Обратно ВОССТАНОВЛЕНИЕ

Grounded = 0

Применять, когда важны понятия стен, потолка и пола. В этом режиме движение тела будет реагировать на наклоны (ускорение/замедление). Этот режим подходит для односторонних игр, таких как платформеры.

Мотивирование

CharacterBody2D.PlatformOnLeaveEnum

ЗначениеОписание
AddUpwardVelocity = 1

Добавьте последнюю скорость платформы к CharacterBody2D.Velocity, когда вы покидаете движущуюся платформу, но любое движение вниз игнорируется. Полезно сохранять полную высоту прыжка, даже когда платформа движется вниз.

AddVelocity = 0

Добавьте последнюю скорость платформы к CharacterBody2D.Velocity, когда вы покидаете движущуюся платформу.

DoNothing = 2

Покидая платформу, не предпринимайте никаких действий.

Документация Reckfell EngineНаверх ↑
БЫСТРЫЙ ПЕРЕХОДНачало работыEntity и иерархияC# & .NET 10Сцены и префабы
Руководства и полный API Reckfell K
reckfellENGINE
RECKFELL ACCOUNT

Вход в аккаунт

Войдите в аккаунт Reckfell.

Один аккаунт для всей платформы Reckfell.