reckfellENGINE

CharacterBody3D

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

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

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

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

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

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

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

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

Свойства15

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Скорость тела в единицах в секунду для MoveAndSlide. Не умножайте её на delta перед вызовом: движение интегрирует шаг само. MoveAndSlide может изменить скорость при столкновениях.

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

Минимальный угол (в радианах), под которым тело может скользить при столкновении со стеной. Значение по умолчанию равно 15 градусам. Когда CharacterBody3D.MotionMode равно CharacterBody3D.MotionModeEnum.Grounded, это влияет на движение только в том случае, если CharacterBody3D.FloorBlockOnWall равно true.

Методы49

ApplyFloorSnapvoid
# ApplyFloorSnap
C#
public void ApplyFloorSnap();

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

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

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

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

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

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

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

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

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

Возвращает Vector3
GetLastSlideCollisionKinematicCollision3D
# GetLastSlideCollision
C#
public KinematicCollision3D GetLastSlideCollision();

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

Возвращает KinematicCollision3D
GetMaxSlidesint
# GetMaxSlides
C#
public int GetMaxSlides();
Возвращает int
GetMotionModeCharacterBody3D.MotionModeEnum
# GetMotionMode
C#
public CharacterBody3D.MotionModeEnum GetMotionMode();
Возвращает CharacterBody3D.MotionModeEnum
GetPlatformAngularVelocityVector3
# GetPlatformAngularVelocity
C#
public Vector3 GetPlatformAngularVelocity();

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

Возвращает Vector3
GetPlatformFloorLayersuint
# GetPlatformFloorLayers
C#
public uint GetPlatformFloorLayers();
Возвращает uint
GetPlatformOnLeaveCharacterBody3D.PlatformOnLeaveEnum
# GetPlatformOnLeave
C#
public CharacterBody3D.PlatformOnLeaveEnum GetPlatformOnLeave();
Возвращает CharacterBody3D.PlatformOnLeaveEnum
GetPlatformVelocityVector3
# GetPlatformVelocity
C#
public Vector3 GetPlatformVelocity();

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

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

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

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

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

Возвращает Vector3
GetSafeMarginfloat
# GetSafeMargin
C#
public float GetSafeMargin();
Возвращает float
GetSlideCollisionKinematicCollision3D
# GetSlideCollision
C#
public KinematicCollision3D GetSlideCollision(int slideIdx);

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

Параметры
ИмяТипПо умолчанию
slideIdxint—
Возвращает KinematicCollision3D
GetSlideCollisionCountint
# GetSlideCollisionCount
C#
public int GetSlideCollisionCount();

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

Возвращает int
GetUpDirectionVector3
# GetUpDirection
C#
public Vector3 GetUpDirection();
Возвращает Vector3
GetVelocityVector3
# GetVelocity
C#
public Vector3 GetVelocity();
Возвращает Vector3
GetWallMinSlideAnglefloat
# GetWallMinSlideAngle
C#
public float GetWallMinSlideAngle();
Возвращает float
GetWallNormalVector3
# GetWallNormal
C#
public Vector3 GetWallNormal();

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

Возвращает Vector3
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, если тело столкнулось с потолком при последнем вызове CharacterBody3D.MoveAndSlide. В противном случае возвращает false. CharacterBody3D.UpDirection и CharacterBody3D.FloorMaxAngle используются для определения того, является ли поверхность «потолком» или нет.

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

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

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

Читает состояние контакта с полом, полученное обработкой движения. Используйте после физического шага, а не как проверку наличия NavigationMesh.

Возвращает bool

true для отмеченного контакта с полом. Один навигационный меш без физической поверхности такой контакт не создаёт.

IsOnFloorOnlybool
# IsOnFloorOnly
C#
public bool IsOnFloorOnly();

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

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

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

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

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

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

Двигает тело с заданной Velocity и обработкой столкновений. Использует шаг движка; код сам задаёт скорость и ускорение гравитации. Не ищет навигационный путь и не доказывает достижение цели.

Возвращает bool

true, если при выполнении движения зарегистрированы столкновения; это не признак успешного завершения навигации.

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(CharacterBody3D.MotionModeEnum mode);
Параметры
ИмяТипПо умолчанию
modeCharacterBody3D.MotionModeEnum—
SetPlatformFloorLayersvoid
# SetPlatformFloorLayers
C#
public void SetPlatformFloorLayers(uint excludeLayer);
Параметры
ИмяТипПо умолчанию
excludeLayeruint—
SetPlatformOnLeavevoid
# SetPlatformOnLeave
C#
public void SetPlatformOnLeave(CharacterBody3D.PlatformOnLeaveEnum onLeaveApplyVelocity);
Параметры
ИмяТипПо умолчанию
onLeaveApplyVelocityCharacterBody3D.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(Vector3 upDirection);
Параметры
ИмяТипПо умолчанию
upDirectionVector3—
SetVelocityvoid
# SetVelocity
C#
public void SetVelocity(Vector3 velocity);
Параметры
ИмяТипПо умолчанию
velocityVector3—
SetWallMinSlideAnglevoid
# SetWallMinSlideAngle
C#
public void SetWallMinSlideAngle(float radians);
Параметры
ИмяТипПо умолчанию
radiansfloat—

CharacterBody3D.MotionModeEnum

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

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

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

Grounded = 0

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

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

CharacterBody3D.PlatformOnLeaveEnum

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

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

AddVelocity = 0

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

DoNothing = 2

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

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

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

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

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