CharacterBody3D
Управляемое кодом тело персонажа 3D.
CharacterBody3D двигается через MoveAndSlide или MoveAndCollide. Ускорение, ввод и правила прыжка задаёт скрипт; тип тела сам по себе не добавляет управление или гравитацию.
Velocity перед MoveAndSlide задаётся в единицах/с без дополнительного delta. MoveAndCollide принимает перемещение за вызов. IsOnFloor/IsOnWall и slide-контакты описывают последнее MoveAndSlide, а не постоянное соседство. После телепорта не разрешайте действие по старому состоянию пола. Настройки Grounded/Floating, UpDirection, snap и предельного угла имеют отдельные роли.
Объявления сверены с C# SDK 1.0.0. Раскройте имя, чтобы увидеть сигнатуры и описание.
Конструкторы1
CharacterBody3DКонструктор
public CharacterBody3D();Свойства15
FloorBlockOnWallСвойство
public bool FloorBlockOnWall { get; set; }Если true, тело сможет двигаться только по полу. Эта опция исключает возможность ходить по стенам, однако позволяет скользить по ним.
FloorConstantSpeedСвойство
public bool FloorConstantSpeed { get; set; }Если false (по умолчанию), тело будет двигаться быстрее на спусках и медленнее на подъемах.
Если true, тело всегда будет двигаться с одинаковой скоростью на земле, независимо от уклона. Обратите внимание, что вам нужно использовать CharacterBody3D.FloorSnapLength, чтобы придерживаться спуска с постоянной скоростью.
FloorMaxAngleСвойство
public float FloorMaxAngle { get; set; }Предельный угол классификации поверхности как пола/потолка относительно UpDirection, в радианах. Для 45 градусов используйте Mathf.DegToRad(45).
FloorSnapLengthСвойство
public float FloorSnapLength { get; set; }Устанавливает расстояние привязки. Если установлено значение, отличное от 0.0, тело остается прикрепленным к склонам при вызове CharacterBody3D.MoveAndSlide. Вектор привязки определяется заданным расстоянием вдоль противоположного направления CharacterBody3D.UpDirection.
Пока вектор привязки находится в контакте с землей и тело движется против CharacterBody3D.UpDirection, тело будет оставаться прикрепленным к поверхности. Привязка не применяется, если тело движется вдоль CharacterBody3D.UpDirection, то есть оно содержит вертикальную скорость подъема, поэтому оно сможет оторваться от земли при прыжке или когда тело что-то толкает вверх. Если вы хотите применить привязку без учета скорости, используйте CharacterBody3D.ApplyFloorSnap.
FloorStopOnSlopeСвойство
public bool FloorStopOnSlope { get; set; }Если true, тело не будет скользить по склонам при вызове CharacterBody3D.MoveAndSlide, когда тело стоит на месте.
Если false, тело будет скользить по склонам пола, когда CharacterBody3D.Velocity прикладывает направленную вниз силу.
MaxSlidesСвойство
public int MaxSlides { get; set; }Максимальное количество раз, которое тело может изменить направление, прежде чем оно остановится при вызове CharacterBody3D.MoveAndSlide. Должно быть больше нуля.
MotionModeСвойство
public CharacterBody3D.MotionModeEnum MotionMode { get; set; }Устанавливает режим движения, который определяет поведение CharacterBody3D.MoveAndSlide.
PlatformFloorLayersСвойство
public uint PlatformFloorLayers { get; set; }Слои столкновений, которые будут включены для обнаружения тел пола, которые будут действовать как движущиеся платформы, за которыми будет следовать CharacterBody3D. По умолчанию все тела пола обнаруживаются и распространяют свою скорость.
PlatformOnLeaveСвойство
public CharacterBody3D.PlatformOnLeaveEnum PlatformOnLeave { get; set; }Устанавливает поведение, применяемое при покидании движущейся платформы. По умолчанию, для физической точности, при покидании применяется последняя скорость платформы.
PlatformWallLayersСвойство
public uint PlatformWallLayers { get; set; }Слои столкновений, которые будут включены для обнаружения тел стен, которые будут действовать как движущиеся платформы, за которыми будет следовать CharacterBody3D. По умолчанию все тела стен игнорируются.
SafeMarginСвойство
public float SafeMargin { get; set; }Дополнительный запас используется для восстановления столкновений при вызове CharacterBody3D.MoveAndSlide.
Если тело находится как минимум на таком расстоянии от другого тела, оно будет считать их сталкивающимися и будет оттолкнуто перед выполнением фактического движения.
Более высокое значение означает большую гибкость для обнаружения столкновений, что помогает последовательно обнаруживать стены и полы.
Более низкое значение заставляет алгоритм столкновений использовать более точное обнаружение, поэтому его можно использовать в случаях, когда требуется особая точность, например, в очень низком масштабе, чтобы избежать видимого дрожания, или для стабильности со стопкой тел персонажей.
SlideOnCeilingСвойство
public bool SlideOnCeiling { get; set; }Если true, то при прыжке у потолка тело будет скользить, если false — остановится и упадет вертикально.
UpDirectionСвойство
public Vector3 UpDirection { get; set; }Вектор, направленный вверх, используется для определения того, что является стеной, а что полом (или потолком) при вызове CharacterBody3D.MoveAndSlide. По умолчанию Vector3.Up. Поскольку вектор будет нормализован, он не может быть равен Vector3.Zero, если вы хотите, чтобы все столкновения были зарегистрированы как стены, рассмотрите возможность использования CharacterBody3D.MotionModeEnum.Floating в качестве CharacterBody3D.MotionMode.
VelocityСвойство
public Vector3 Velocity { get; set; }Скорость тела в единицах в секунду для MoveAndSlide. Не умножайте её на delta перед вызовом: движение интегрирует шаг само. MoveAndSlide может изменить скорость при столкновениях.
WallMinSlideAngleСвойство
public float WallMinSlideAngle { get; set; }Минимальный угол (в радианах), под которым тело может скользить при столкновении со стеной. Значение по умолчанию равно 15 градусам. Когда CharacterBody3D.MotionMode равно CharacterBody3D.MotionModeEnum.Grounded, это влияет на движение только в том случае, если CharacterBody3D.FloorBlockOnWall равно true.
Методы49
ApplyFloorSnapvoid
public void ApplyFloorSnap();Позволяет вручную применить привязку к полу независимо от скорости тела. Эта функция ничего не делает, когда CharacterBody3D.IsOnFloor возвращает true.
GetFloorAnglefloat
public float GetFloorAngle(Vector3? upDirection = default);Возвращает угол столкновения пола в последней точке столкновения в соответствии с CharacterBody3D.UpDirection, который по умолчанию равен Vector3.Up. Это значение всегда положительно и действительно только после вызова CharacterBody3D.MoveAndSlide и когда CharacterBody3D.IsOnFloor возвращает true.
| Имя | Тип | По умолчанию |
|---|---|---|
upDirection | Vector3? | default |
upDirectionЕсли параметр не имеет значения, то значение по умолчанию: new Vector3(0.0f, 1.0f, 0.0f).
floatGetFloorMaxAnglefloat
public float GetFloorMaxAngle();floatGetFloorNormalVector3
public Vector3 GetFloorNormal();Возвращает нормаль столкновения пола в последней точке столкновения. Действительно только после вызова CharacterBody3D.MoveAndSlide и когда CharacterBody3D.IsOnFloor возвращает true.
Предупреждение: Нормаль столкновения не всегда совпадает с нормалью поверхности.
Vector3GetFloorSnapLengthfloat
public float GetFloorSnapLength();floatGetLastMotionVector3
public Vector3 GetLastMotion();Возвращает последнее движение, примененное к CharacterBody3D во время последнего вызова CharacterBody3D.MoveAndSlide. Движение может быть разделено на несколько движений, когда происходит скольжение, и этот метод возвращает последнее, что полезно для получения текущего направления движения.
Vector3GetLastSlideCollisionKinematicCollision3D
public KinematicCollision3D GetLastSlideCollision();Возвращает KinematicCollision3D, если произошло столкновение. Возвращаемое значение содержит информацию о последнем столкновении, произошедшем во время последнего вызова метода CharacterBody3D.MoveAndSlide. Возвращает null, если столкновения не произошло. См. также CharacterBody3D.GetSlideCollision.
KinematicCollision3DGetMaxSlidesint
public int GetMaxSlides();intGetMotionModeCharacterBody3D.MotionModeEnum
public CharacterBody3D.MotionModeEnum GetMotionMode();CharacterBody3D.MotionModeEnumGetPlatformAngularVelocityVector3
public Vector3 GetPlatformAngularVelocity();Возвращает угловую скорость платформы в последней точке столкновения. Действует только после вызова CharacterBody3D.MoveAndSlide.
Vector3GetPlatformFloorLayersuint
public uint GetPlatformFloorLayers();uintGetPlatformOnLeaveCharacterBody3D.PlatformOnLeaveEnum
public CharacterBody3D.PlatformOnLeaveEnum GetPlatformOnLeave();CharacterBody3D.PlatformOnLeaveEnumGetPlatformVelocityVector3
public Vector3 GetPlatformVelocity();Возвращает линейную скорость платформы в последней точке столкновения. Действительно только после вызова CharacterBody3D.MoveAndSlide.
Vector3GetPlatformWallLayersuint
public uint GetPlatformWallLayers();uintGetPositionDeltaVector3
public Vector3 GetPositionDelta();Возвращает перемещение (дельту положения), произошедшее во время последнего вызова CharacterBody3D.MoveAndSlide.
Vector3GetRealVelocityVector3
public Vector3 GetRealVelocity();Возвращает текущую реальную скорость с момента последнего вызова CharacterBody3D.MoveAndSlide. Например, когда вы поднимаетесь по склону, вы будете двигаться по диагонали, даже если скорость горизонтальная. Этот метод возвращает диагональное движение, в отличие от CharacterBody3D.Velocity, который возвращает запрошенную скорость.
Vector3GetSafeMarginfloat
public float GetSafeMargin();floatGetSlideCollisionKinematicCollision3D
public KinematicCollision3D GetSlideCollision(int slideIdx);Возвращает KinematicCollision3D, содержащий информацию о столкновении, произошедшем во время последнего вызова метода CharacterBody3D.MoveAndSlide. Поскольку тело может столкнуться несколько раз за один вызов CharacterBody3D.MoveAndSlide, необходимо указать индекс столкновения в диапазоне от 0 до (CharacterBody3D.GetSlideCollisionCount - 1). См. также CharacterBody3D.GetLastSlideCollision.
| Имя | Тип | По умолчанию |
|---|---|---|
slideIdx | int | — |
KinematicCollision3DGetSlideCollisionCountint
public int GetSlideCollisionCount();Число slide-контактов последнего MoveAndSlide. Не является количеством всех соседних тел; результаты MoveAndCollide читаются из возвращённого им объекта.
intGetUpDirectionVector3
public Vector3 GetUpDirection();Vector3GetVelocityVector3
public Vector3 GetVelocity();Vector3GetWallMinSlideAnglefloat
public float GetWallMinSlideAngle();floatGetWallNormalVector3
public Vector3 GetWallNormal();Возвращает нормаль столкновения стены в последней точке столкновения. Действительно только после вызова CharacterBody3D.MoveAndSlide и когда CharacterBody3D.IsOnWall возвращает true.
Предупреждение: Нормаль столкновения не всегда совпадает с нормалью поверхности.
Vector3IsFloorBlockOnWallEnabledbool
public bool IsFloorBlockOnWallEnabled();boolIsFloorConstantSpeedEnabledbool
public bool IsFloorConstantSpeedEnabled();boolIsFloorStopOnSlopeEnabledbool
public bool IsFloorStopOnSlopeEnabled();boolIsOnCeilingbool
public bool IsOnCeiling();Возвращает true, если тело столкнулось с потолком при последнем вызове CharacterBody3D.MoveAndSlide. В противном случае возвращает false. CharacterBody3D.UpDirection и CharacterBody3D.FloorMaxAngle используются для определения того, является ли поверхность «потолком» или нет.
boolIsOnCeilingOnlybool
public bool IsOnCeilingOnly();Возвращает true, если тело столкнулось только с потолком при последнем вызове CharacterBody3D.MoveAndSlide. В противном случае возвращает false. CharacterBody3D.UpDirection и CharacterBody3D.FloorMaxAngle используются для определения того, является ли поверхность «потолком» или нет.
boolIsOnFloorbool
public bool IsOnFloor();Читает состояние контакта с полом, полученное обработкой движения. Используйте после физического шага, а не как проверку наличия NavigationMesh.
booltrue для отмеченного контакта с полом. Один навигационный меш без физической поверхности такой контакт не создаёт.
IsOnFloorOnlybool
public bool IsOnFloorOnly();Возвращает true, если тело столкнулось только с полом при последнем вызове CharacterBody3D.MoveAndSlide. В противном случае возвращает false. CharacterBody3D.UpDirection и CharacterBody3D.FloorMaxAngle используются для определения того, является ли поверхность «полом» или нет.
boolIsOnWallbool
public bool IsOnWall();Returns (Возврат) true если тело столкнулось со стеной по последнему призыву CharacterBody3D.MoveAndSlide. В противном случае возвращение false. . . . . CharacterBody3D.UpDirection и CharacterBody3D.FloorMaxAngle используются для определения того, является ли поверхность "стеной" или нет.
boolIsOnWallOnlybool
public bool IsOnWallOnly();Returns (Возврат) true если тело столкнулось только со стеной по последнему призыву CharacterBody3D.MoveAndSlide. В противном случае возвращение false. . . . . CharacterBody3D.UpDirection и CharacterBody3D.FloorMaxAngle используются для определения того, является ли поверхность "стеной" или нет.
boolIsSlideOnCeilingEnabledbool
public bool IsSlideOnCeilingEnabled();boolMoveAndSlidebool
public bool MoveAndSlide();Двигает тело с заданной Velocity и обработкой столкновений. Использует шаг движка; код сам задаёт скорость и ускорение гравитации. Не ищет навигационный путь и не доказывает достижение цели.
booltrue, если при выполнении движения зарегистрированы столкновения; это не признак успешного завершения навигации.
SetFloorBlockOnWallEnabledvoid
public void SetFloorBlockOnWallEnabled(bool enabled);| Имя | Тип | По умолчанию |
|---|---|---|
enabled | bool | — |
SetFloorConstantSpeedEnabledvoid
public void SetFloorConstantSpeedEnabled(bool enabled);| Имя | Тип | По умолчанию |
|---|---|---|
enabled | bool | — |
SetFloorMaxAnglevoid
public void SetFloorMaxAngle(float radians);| Имя | Тип | По умолчанию |
|---|---|---|
radians | float | — |
SetFloorSnapLengthvoid
public void SetFloorSnapLength(float floorSnapLength);| Имя | Тип | По умолчанию |
|---|---|---|
floorSnapLength | float | — |
SetFloorStopOnSlopeEnabledvoid
public void SetFloorStopOnSlopeEnabled(bool enabled);| Имя | Тип | По умолчанию |
|---|---|---|
enabled | bool | — |
SetMaxSlidesvoid
public void SetMaxSlides(int maxSlides);| Имя | Тип | По умолчанию |
|---|---|---|
maxSlides | int | — |
SetMotionModevoid
public void SetMotionMode(CharacterBody3D.MotionModeEnum mode);| Имя | Тип | По умолчанию |
|---|---|---|
mode | CharacterBody3D.MotionModeEnum | — |
SetPlatformFloorLayersvoid
public void SetPlatformFloorLayers(uint excludeLayer);| Имя | Тип | По умолчанию |
|---|---|---|
excludeLayer | uint | — |
SetPlatformOnLeavevoid
public void SetPlatformOnLeave(CharacterBody3D.PlatformOnLeaveEnum onLeaveApplyVelocity);| Имя | Тип | По умолчанию |
|---|---|---|
onLeaveApplyVelocity | CharacterBody3D.PlatformOnLeaveEnum | — |
SetPlatformWallLayersvoid
public void SetPlatformWallLayers(uint excludeLayer);| Имя | Тип | По умолчанию |
|---|---|---|
excludeLayer | uint | — |
SetSafeMarginvoid
public void SetSafeMargin(float margin);| Имя | Тип | По умолчанию |
|---|---|---|
margin | float | — |
SetSlideOnCeilingEnabledvoid
public void SetSlideOnCeilingEnabled(bool enabled);| Имя | Тип | По умолчанию |
|---|---|---|
enabled | bool | — |
SetUpDirectionvoid
public void SetUpDirection(Vector3 upDirection);| Имя | Тип | По умолчанию |
|---|---|---|
upDirection | Vector3 | — |
SetVelocityvoid
public void SetVelocity(Vector3 velocity);| Имя | Тип | По умолчанию |
|---|---|---|
velocity | Vector3 | — |
SetWallMinSlideAnglevoid
public void SetWallMinSlideAngle(float radians);| Имя | Тип | По умолчанию |
|---|---|---|
radians | float | — |
CharacterBody3D.MotionModeEnum
| Значение | Описание |
|---|---|
Floating = 1 | Применять, когда нет понятия пола или потолка. Все столкновения будут сообщаться как ПЛАТФОРМ ОНА Обратно ВОССТАНОВЛЕНИЕ |
Grounded = 0 | Применять, когда важны понятия стен, потолка и пола. В этом режиме движение тела будет реагировать на наклоны (ускорение/замедление). Этот режим подходит для игр с приземлением, таких как платформеры. Мотивирование |
CharacterBody3D.PlatformOnLeaveEnum
| Значение | Описание |
|---|---|
AddUpwardVelocity = 1 | Добавьте последнюю скорость платформы к |
AddVelocity = 0 | Добавьте последнюю скорость платформы к |
DoNothing = 2 | Покидая платформу, не предпринимайте никаких действий. |