Отскок и трение
Часть раздела Физика и игровой процесс путешествия по Unity на Coddy. Урок 12 из 71.
То, как коллайдер отскакивает и скользит, зависит от его PhysicsMaterial (название в Unity 6; в более старых версиях он назывался PhysicMaterial). bounciness изменяется от 0 (без отскока) до 1 (сохраняет всю скорость). dynamicFriction замедляет скользящее тело, а staticFriction определяет, с какой силой нужно толкнуть неподвижное тело, чтобы оно начало скользить. Коллайдер без материала ведёт себя так, будто его трение равно 0.6, а упругость — 0. Этот супер-мяч задаёт собственному коллайдеру упругий материал:
void Start()
{
PhysicsMaterial mat = GetComponent<Collider>().material; // собственная копия этого коллайдера
mat.bounciness = 0.9f;
mat.bounceCombine = PhysicsMaterialCombine.Maximum;
}В контакте участвуют два коллайдера, поэтому Unity объединяет их значения. Каждый материал задаёт способ объединения: bounceCombine для упругости и frictionCombine для трения. Для каждого параметра можно выбрать один из четырёх режимов: Average (по умолчанию), Minimum, Multiply или Maximum. Если коллайдеры запрашивают разные режимы, побеждает тот, который стоит позже в этом списке. На полу без материала режим Average дал бы мячу значение (0.9 + 0) / 2 = 0.45. В режиме Maximum мяч сохраняет 0.9 своей скорости при каждом отскоке, что составляет 0.9 x 0.9 = 81% его высоты, поскольку высота пропорциональна квадрату скорости.
.material создаёт для этого коллайдера собственную копию материала, поэтому изменения влияют только на него. .sharedMaterial — это сам ресурс материала, общий для всех использующих его коллайдеров; у коллайдера, которому материал никогда не назначали, это значение равно null.
Задание
ЛегкоЗадай батуту и льду собственные значения отскока и трения.
- В
Start()возьмиPhysicsMaterial mat = GetComponent<Collider>().material;и задайmat.bounciness = bounce;,mat.dynamicFrictionиmat.staticFrictionзначениеfriction. - Задай
mat.bounceCombine = PhysicsMaterialCombine.Maximum;иmat.frictionCombine = PhysicsMaterialCombine.Minimum;, чтобы использовались собственные значения поверхности.
Нажми «Играть»: мяч высоко подпрыгнет на батуте. Затем нажми «Проверить».
Попробуйте сами
using UnityEngine;
public class Surface : MonoBehaviour
{
public float bounce = 0f;
public float friction = 0.6f;
void Start()
{
// Назначьте этому коллайдеру собственный материал с параметрами bounce и friction
}
}
Все уроки раздела Физика и игровой процесс
1Твёрдое тело
Гравитация и массаТолкаем с помощью AddForceПрыжок с импульсомFixedUpdate для физикиСкоростьКинематические телаПовторение: пусковая площадка4Корутины
InvokeInvokeRepeating, CancelInvokeВаша первая корутинаЦиклы в корутинахОстановка корутинПовторение: обратный отсчёт10Проект: Побег с арены
АренаОхотники2Столкновения
OnCollisionEnterВо что я попал?Разрушение при столкновенииСтояние на землеОтскок и трениеФормы коллайдеровПовторение: разрушаемая стена5Проект: Монетная гонка
Катящийся шарСобираем монетыПотренируйтесь самостоятельно: Песочница Unity