Как отключить rigidbody unity3d через скрипт
Перейти к содержимому

Как отключить rigidbody unity3d через скрипт

  • автор:

Как получить ссылку / добавить / отключить / удалить компонент из скрипта

Приветствую начинающих разработчиков Unity. В данной статье мы рассмотрим сразу четыре возможности, которые можно реализовать с компонентами объекта, через скрипт, а именно: получение ссылки на компонент, добавление компонента, отключение компонента и удаление компонента.

Давайте пройдёмся по порядку.

Получение ссылки на компонент

Предположим, у нас имеется переменная obj, которая хранит в себе ссылку на наш объект. И нам необходимо получить ссылку на компонент данного объекта, например, на компонент Rigidbody. Для этого воспользуемся методом GameObject.GetComponent.

Rigidbody _rb = obj.GetComponent(); 

Тепер в переменной _rb у нас имеется ссылка на компонент Rigidbody, объекта obj. Так же убедитесь в том, что компонент, на который вы хотите получить ссылку, добавлен к Вашему объекту, иначе данный код работать не будет.

Добавление компонента

Как и в предыдущем примере, предположим, у нас имеется переменная obj, которая хранит в себе ссылку на наш объект.

Там нам необходимо добавить компонент для нашего объекта. Для этого нам понадобится метод GameObject.AddComponent. Воспользуемся им, добавив компонент, например, Rigidbody:

Rigidbody _rb = obj.AddComponent();

Готово! К объекту obj мы добавили компонент Rigidbody, и в переменную _rb записали ссылку для её хранение. Но на самом деле хранить ссылку на добавленный компонент не обязательно, поэтому, Вы можете обойтись и без этого.

Отключение компонента

Отключение и включение компонента используется довольно часто, для временного отключения или включения его свойств.

Предположим, что у Вас имеется переменная _rb, которая хранит в себе ссылку на какой-либо компонент.

У любого компонента имеется свойство enabled, которое принимая значения true и false, включает и отключает компонент соответственно. Воспользуемся им:

_rb.enabled = true;

Данный код отключит Ваш компонет. А чтобы его опять включить, поменяйте значение true на false.

_rb.enabled = false;

Удаление компонента

Удаление компонента, пожалуй, самое простое из всех тем этой статьи. За удаление компонента отвечает метод Destroy.

Destroy(_rb);

Так же убедитесь, что в переменной _rb имеется ссылка на Ваш компонент, который Вы хотите удалить.

На этом всё, теперь Вы умеете работать с компонентами 🙂 Если остались вопросы, задавайте их в комментариях.

Rigidbody

Благодарим вас за то, что вы помогаете нам улучшить качество документации по Unity. Однако, мы не можем принять любой перевод. Мы проверяем каждый предложенный вами вариант перевода и принимаем его только если он соответствует оригиналу.

Ошибка внесения изменений

По определённым причинам предложенный вами перевод не может быть принят. Пожалуйста попробуйте снова через пару минут. И выражаем вам свою благодарность за то, что вы уделяете время, чтобы улучшить документацию по Unity.

Ваше имя Адрес вашей электронной почты Предложение * Разместить предложенное

Описание

Управляет положением объекта через имитацию физики.

Добавление компонента Rigidbody к объекту отдает его движение под контроль физического движка Unity. Даже без добавления какого либо кода, объект с Rigidbody будет подвержен гравитации и реагировать на коллизии с входящими объектами, если имеет компонент Collider.

Rigidbody также имеет scripting API, который позволит вам применить силы к объекту и контролировать его на физически реалистичном пути. Например, поведение машины может быть определено в силах, приложенных к колесам. Учитывая эту информацию, физический движок может справляться с множеством других аспектов движения машины, она будет реалистично ускоряться и корректно реагировать на коллизии.

В скрипте функция FixedUpdate рекомендуется как место для применения сил и изменения настроек Rigidbody (в противоположность Update, которая используется для большинства других задач). Причина этого в том, что физика обновляется в измеряемых временных шагах, которые не совпадают с обновлением кадров. FixedUpdate вызывается немедленно перед каждым физическим обновлением и все изменения, сделанные в нем , будут обработаны сразу же.

Большинство проблем при запуске с Rigidbody в том, что игровая физика кажется запущенной в режиме «slow motion» (замедленного движения). На самом деле это из за масштаба (scale) ваших моделей. Настройки гравитации по умолчанию допускают что один мировой юнит (единица) соответствует одному метру. В играх без использования физики юниты не имеют особого значения, можно сделать их всех масштабом в 100. Но когда используется физика, они будут обработаны как очень большие объекты. Если большой масштаб используется для объектов, которые должны быть маленькими, они будут казаться падающими очень медленно — физический движок будет принимать их за большие объекты, падающие на очень большое расстояние. Имея это ввиду, не забудьте сохранить масштаб ваших объектов более-менее приближенном к реальному (для автомобиля это примерно 4 юнита = 4 метра, к примеру).

Переменные

angularDrag Угловое торможение объекта.
angularVelocity Вектор угловой скорости твердого тела.
centerOfMass Центр массы относительно источника transform.
collisionDetectionMode Режим обнаружения коллизии Rigidbody.
constraints Управляет тем, какая степень свободы допустима при симуляции данного Rigidbody.
detectCollisions Должно ли определение коллизии быть активным? (по умолчанию оно активно всегда).
drag Торможение объекта.
freezeRotation Контролирует будет ли физика изменять вращение объекта.
inertiaTensor Диагональный тензор инерции массы относительно центра массы.
inertiaTensorRotation Вращение тензора инерции.
interpolation Интерполяция позволит вам сгладить эффект работающей физики по числу фиксированной частоты кадров.
isKinematic Контролирует влияние физики на твердое тело.
mass Масса физического тела.
maxAngularVelocity Максимальная угловая скорость объекта. (По умолчанию 7) в диапазоне < 0, бесконечность>.
maxDepenetrationVelocity Скорость твердого тела к точке мировой точке в глобальном пространстве.
position Позиция физического тела.
rotation Вращение твердого тела.
sleepThreshold Линейная скорость, ниже которой объекты начинают погружаться в сон (По умолчанию 0.14), диапазон .
solverIterationCount Позволяет вам переопределять решения счетчика итерации каждого твердого тела.
useConeFriction Для этого твердого тела используется сила трения конуса.
useGravity Контролирует, оказывает ли влияние гравитация на твердое тело.
velocity Вектор скорости твердого тела.
worldCenterOfMass Центр масс твердого тела в мировом пространстве.

Открытые функции

AddExplosionForce Применение силы к твердому телу имитирует эффект взрыва. Сила взрыва убывает линейно относительно расстояния до твердого тела.
AddForce Добавляет крутящий момент к физическому телу.
AddForceAtPosition Применяет силу к / позиции/. В результате будет применено торможение и сила к объекту.
AddRelativeForce Добавление силы к твердому телу относительно его системы координат.
AddRelativeTorque Добавление силы к твердому телу относительно его системы координат.
AddTorque Добавляет крутящий момент к физическому телу.
ClosestPointOnBounds Ближайшая точка к ограничивающей рамке прикрепленных коллайдеров.
GetPointVelocity Скорость твердого тела к точке мировой точке в глобальном пространстве.
GetRelativePointVelocity Скорость относительно точки твердого тела (относительной точки).
IsSleeping Твердое тело спит?
MovePosition Двигает твердое тело к пизиции.
MoveRotation Вращает твердое тело к вращение.
ResetCenterOfMass Масса физического тела.
ResetInertiaTensor inertiaTensorRotation вращает тензор инерции.
SetDensity Назначить массу, основанную на прикрепленных коллайдерах, при условии постоянной плотности.
Sleep Отправляет твердое тело в сон по меньшей мере на один кадр.
SweepTest Проверяет, столкнулось ли твердое тело с чем либо. Если да — перемещает через сцену.
SweepTestAll Похож на Rigidbody.SweepTest, но возвращает все прикосновения.
WakeUp Силы для пробуждения твердого тела.

Сообщения

OnCollisionEnter OnCollisionEnter вызывается когда collider/rigidbody начинает соприкасаться с другим rigidbody/collider.
OnCollisionExit OnCollisionEnter вызывается когда collider/rigidbody был остановлен прикосновением другого rigidbody/collider.
OnCollisionStay OnCollisionStay вызывается каждый кадр для каждого collider/rigidbody, который прикасается к rigidbody/collider.

Унаследованные члены

Переменные

gameObject The game object this component is attached to. A component is always attached to a game object.
tag Тег данного игрового объекта.
transform The Transform attached to this GameObject (null if there is none attached).
hideFlags Should the object be hidden, saved with the scene or modifiable by the user?
name The name of the object.

Открытые функции

BroadcastMessage Вызывает метод названный methodName на каждом MonoBehaviour этого game object-а или любого из его потомков.
CompareTag Помечен ли этот игровой объект тэгом tag?
GetComponent Возвращает компонент типа type, если он прикреплен к игровому объекту и null, если не прикреплен.
GetComponentInChildren Returns the component of Type type in the GameObject or any of its children using depth first search.
GetComponentInParent Returns the component of Type type in the GameObject or any of its parents.
GetComponents Returns all components of Type type in the GameObject.
GetComponentsInChildren Returns all components of Type type in the GameObject or any of its children.
GetComponentsInParent Returns all components of Type type in the GameObject or any of its parents.
SendMessage Вызывает метод с именем methodName в каждом MonoBehaviour на этом объекте.
SendMessageUpwards Вызывает на каждом MonoBehaviour в данном игровом объекте и на каждом предке скрипта метод с именем methodName.
GetInstanceID Returns the instance id of the object.
ToString Returns the name of the game object.

Статические функции

Destroy Removes a gameobject, component or asset.
DestroyImmediate Destroys the object obj immediately. You are strongly recommended to use Destroy instead.
DontDestroyOnLoad Makes the object target not be destroyed automatically when loading a new scene.
FindObjectOfType Returns the first active loaded object of Type type.
FindObjectsOfType Returns a list of all active loaded objects of Type type.
Instantiate Returns a copy of the object original.

Операторы

bool Does the object exist?
operator != Compares if two objects refer to a different object.
operator == Compares two object references to see if they refer to the same object.

Как можно остановить объект, имеющий rigidbody, во время прыжка?

Есть объект, имеющий rigidbody. При нажатии на клавишу «Space» происходит увеличение его ускорения (velocity), и затем её понижение. Каким образом можно вставить в момент наивысшей точки задержку? Так, чтобы объект вёл себя как на земле в течение пары секунд. Мог пройти пару шагов, сделать какое-то действие, и затем упасть.

[Header("Keyboard Input Settings")] public KeyCode JumpButton = KeyCode.Space; public KeyCode AttackButton = KeyCode.E; private bool wasDelayedOnce = false; private PlayerBehaviour _player; public AnimationCurve JumpCurve; public float JumpTime; void Start() < _player = GetComponent(); > void Update() < if (Input.GetKeyDown(KeyCode.A) || Input.GetKeyDown(KeyCode.D)) _player.runDir = _player.MInput; if (_player.Acc) < _player.Speed = Mathf.Lerp(_player.Speed, _player.AccelerationPower, _player.AccelerationTime * Time.deltaTime); >else < _player.Speed = Mathf.Lerp(_player.Speed, 0f, _player.DecelerationTime * Time.deltaTime); >> public void KeyboardWalkAndAttack() < _player.MInput = Input.GetAxisRaw("Horizontal"); if (Input.GetKeyDown(AttackButton)) // атаковать enemy < if (_player.Anim.GetBool("Attack") == false) < Debug.Log("Pressing E"); _player.DetectEnemy(); >> if (Input.GetKey(KeyCode.A)|| Input.GetKey(KeyCode.D)) < _player.Acc = true; >else if(Input.GetKeyUp(KeyCode.A) || Input.GetKeyUp(KeyCode.D)) < _player.Acc = false; //_player.Speed = 0f; >if (_player.Acc) < _player.rb.velocity = new Vector2(_player.MInput * _player.Speed, _player.rb.velocity.y); >else < _player.rb.velocity = new Vector2(_player.runDir * _player.Speed, _player.rb.velocity.y); >_player.isGrounded = Physics2D.OverlapCircle(_player.Feet.position, _player.feetRadius, _player.Groundlayer); KeyboardJump(); > public void KeyboardJump() < if (!_player.DoubleJump) < if (Input.GetKeyDown(JumpButton) && _player.isGrounded) < _player.JumpingVelocity = JumpCurve.Evaluate(JumpTime); _player.rb.velocity = Vector2.up * _player.JumpingVelocity; >if (_player.rb.velocity.y < 0) //Ускорение падения < _player.rb.velocity = new Vector2(_player.rb.velocity.x, _player.rb.velocity.y * _player.FallAccelerationValue); >> else < if (Input.GetKeyDown(JumpButton) && _player.JumpsNum < 1) < ++_player.JumpsNum; _player.rb.velocity = (Vector2.up * _player.JumpingVelocity) + new Vector2(_player.rb.velocity.x, 0); >else if (_player.isGrounded && _player.JumpsNum > 0) < _player.JumpsNum = 0; >> > 

Функция KeyboardWalkAndAttack вызывается раз в Update из функции PlayerBehaviour . Подскажите, пожалуйста, направление движения.

Rigidbody

Adding a Rigidbody component to an object will put its motion under the control of Unity’s physics engine. Even without adding any code, a Rigidbody object will be pulled downward by gravity and will react to collisions with incoming objects if the right Collider component is also present.

Rigidbody также имеет scripting API, который позволит вам применить силы к объекту и контролировать его на физически реалистичном пути. Например, поведение машины может быть определено в силах, приложенных к колесам. Учитывая эту информацию, физический движок может справляться с множеством других аспектов движения машины, она будет реалистично ускоряться и корректно реагировать на коллизии.

В скрипте функция FixedUpdate рекомендуется как место для применения сил и изменения настроек Rigidbody (в противоположность Update, которая используется для большинства других задач). Причина этого в том, что физика обновляется в измеряемых временных шагах, которые не совпадают с обновлением кадров. FixedUpdate вызывается немедленно перед каждым физическим обновлением и все изменения, сделанные в нем , будут обработаны сразу же.

Большинство проблем при запуске с Rigidbody в том, что игровая физика кажется запущенной в режиме «slow motion» (замедленного движения). На самом деле это из за масштаба (scale) ваших моделей. Настройки гравитации по умолчанию допускают что один мировой юнит (единица) соответствует одному метру. В играх без использования физики юниты не имеют особого значения, можно сделать их всех масштабом в 100. Но когда используется физика, они будут обработаны как очень большие объекты. Если большой масштаб используется для объектов, которые должны быть маленькими, они будут казаться падающими очень медленно — физический движок будет принимать их за большие объекты, падающие на очень большое расстояние. Имея это ввиду, не забудьте сохранить масштаб ваших объектов более-менее приближенном к реальному (для автомобиля это примерно 4 юнита = 4 метра, к примеру).

Variables

angularDrag Угловое торможение объекта.
angularVelocity The angular velocity vector of the rigidbody measured in radians per second.
centerOfMass Центр массы относительно источника transform.
collisionDetectionMode Режим обнаружения коллизии Rigidbody.
constraints Управляет тем, какая степень свободы допустима при симуляции данного Rigidbody.
detectCollisions Должно ли определение коллизии быть активным? (по умолчанию оно активно всегда).
drag Торможение объекта.
freezeRotation Контролирует будет ли физика изменять вращение объекта.
inertiaTensor Диагональный тензор инерции массы относительно центра массы.
inertiaTensorRotation Вращение тензора инерции.
interpolation Интерполяция позволит вам сгладить эффект работающей физики по числу фиксированной частоты кадров.
isKinematic Контролирует влияние физики на твердое тело.
mass Масса физического тела.
maxAngularVelocity The maximimum angular velocity of the rigidbody measured in radians per second. (Default 7) range < 0, infinity >.
maxDepenetrationVelocity Скорость твердого тела к точке мировой точке в глобальном пространстве.
position Позиция твердого тела.
rotation The rotation of the Rigidbody.
sleepThreshold Линейная скорость, ниже которой объекты начинают погружаться в сон (По умолчанию 0.14), диапазон .
solverIterations solverIterationCount определяет насколько точные решения принимают суставы и связи.
solverVelocityIterations The solverVelocityIterations affects how how accurately Rigidbody joints and collision contacts are resolved. Overrides Physics.defaultSolverVelocityIterations. Must be positive.
useGravity Контролирует, оказывает ли влияние гравитация на твердое тело.
velocity The velocity vector of the rigidbody. It represents the rate of change of Rigidbody position.
worldCenterOfMass Центр масс твердого тела в мировом пространстве.

Public Functions

AddExplosionForce Применение силы к твердому телу имитирует эффект взрыва. Сила взрыва убывает линейно относительно расстояния до твердого тела.
AddForce Добавляет крутящий момент к физическому телу.
AddForceAtPosition Применяет силу к / позиции/. В результате будет применено торможение и сила к объекту.
AddRelativeForce Добавление силы к твердому телу относительно его системы координат.
AddRelativeTorque Добавление силы к твердому телу относительно его системы координат.
AddTorque Добавляет крутящий момент к физическому телу.
ClosestPointOnBounds Ближайшая точка к ограничивающей рамке прикрепленных коллайдеров.
GetPointVelocity Скорость твердого тела к точке мировой точке в глобальном пространстве.
GetRelativePointVelocity Скорость относительно точки твердого тела (относительной точки).
IsSleeping Твердое тело спит?
MovePosition Moves the kinematic Rigidbody towards position.
MoveRotation Вращает твердое тело к вращение.
ResetCenterOfMass Масса физического тела.
ResetInertiaTensor inertiaTensorRotation вращает тензор инерции.
SetDensity Назначить массу, основанную на прикрепленных коллайдерах, при условии постоянной плотности.
Sleep Отправляет твердое тело в сон по меньшей мере на один кадр.
SweepTest Tests if a rigidbody would collide with anything, if it was moved through the Scene.
SweepTestAll Похож на Rigidbody.SweepTest, но возвращает все прикосновения.
WakeUp Силы для пробуждения твердого тела.

Messages

OnCollisionEnter OnCollisionEnter вызывается, когда этот collider/rigidbody начал соприкосновение с другим rigidbody/collider.
OnCollisionExit OnCollisionExit вызывается, когда collider/rigidbody прекращает контакт с другим rigidbody/collider.
OnCollisionStay OnCollisionStay вызывается один раз в кадр для каждого collider/rigidbody, который касается другого rigidbody/collider.

Inherited members

Variables

gameObject Игровой объект к которому прикреплён данный компонент. Компонент всегда прикреплён к игровому объекту.
tag Тег данного игрового объекта.
transform The Transform attached to this GameObject.
hideFlags Should the object be hidden, saved with the Scene or modifiable by the user?
name The name of the object.

Public Functions

BroadcastMessage Вызывает метод названный methodName на каждом MonoBehaviour этого game object-а или любого из его потомков.
CompareTag Помечен ли данный игровой объект тегом tag?
GetComponent Возвращает компонент типа type, если он прикреплен к игровому объекту и null, если не прикреплен.
GetComponentInChildren Возвращает компонент типа type в GameObject или некоторого его потомка через поиск в глубину.
GetComponentInParent Возвращает все компоненты типа type из GameObject’а или из любого его родителя.
GetComponents Возвращает все компоненты типа type в GameObject.
GetComponentsInChildren Возвращает все компоненты типа type в GameObject или любому из его потомков.
GetComponentsInParent Возвращает все компоненты типа type в GameObject или любому из его родителей.
SendMessage Вызывает метод с названием methodName в каждом MonoBehaviour в этом игровом объекте.
SendMessageUpwards Вызывает метод с именем methodName в каждом MonoBehaviour в этом игровом объекте и в каждом предке поведения.
TryGetComponent Gets the component of the specified type, if it exists.
GetInstanceID Returns the instance id of the object.
ToString Returns the name of the object.

Static Functions

Destroy Removes a GameObject, component or asset.
DestroyImmediate Destroys the object obj immediately. You are strongly recommended to use Destroy instead.
DontDestroyOnLoad Do not destroy the target Object when loading a new Scene.
FindObjectOfType Returns the first active loaded object of Type type.
FindObjectsOfType Returns a list of all active loaded objects of Type type.
Instantiate Clones the object original and returns the clone.

Operators

bool Does the object exist?
operator != Compares if two objects refer to a different object.
operator == Compares two object references to see if they refer to the same object.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *