Я использую MVC в своем проекте Unity 3D. У меня есть CollisionPoller для определения контактов и движения. Если я использую MoveController и CollisionPoller, мой персонаж трясет ось Y каждый кадр на +/- 0,01.
Если я использую «Кинематический», это работает, но мой персонаж проходит через склоны. Я могу уменьшить высоту капсульного коллайдера, но на склонах это не работает (моего персонажа снова трясет).
public class CollisionPoller
{
private readonly PlayerView _playerView;
private const int MaxBounces = 5;
private const float Threshold = 0.015f;
private const float MaxSlopeAngle = 45f;
private Bounds _bounds;
public CollisionPoller(PlayerView playerView)
{
_playerView = playerView;
_bounds = _playerView.Collider.bounds;
_bounds.Expand(-2 * Threshold);
}
public Vector3 CollideAndSlide(Vector3 velocity, Vector3 position, int depth, bool gravityPass, Vector3 velocityInit)
{
if(depth >= MaxBounces)
return Vector3.zero;
var distance = velocity.magnitude + Threshold;
if (!Physics.SphereCast(position, _bounds.extents.x, velocity.normalized, out var hit, distance))
return velocity;
var snapToSurface = velocity.normalized * (hit.distance - Threshold);
var leftOver = velocity - snapToSurface;
var angle = Vector3.Angle(Vector3.up, hit.normal);
if(snapToSurface.magnitude
Подробнее здесь: https://stackoverflow.com/questions/791 ... he-surface
Юнити 3Д. Мой персонаж дрожит на поверхности ⇐ C#
Место общения программистов C#
-
Anonymous
1731165794
Anonymous
Я использую MVC в своем проекте Unity 3D. У меня есть CollisionPoller для определения контактов и движения. Если я использую MoveController и CollisionPoller, мой персонаж трясет ось Y каждый кадр на +/- 0,01.
Если я использую «Кинематический», это работает, но мой персонаж проходит через склоны. Я могу уменьшить высоту капсульного коллайдера, но на склонах это не работает (моего персонажа снова трясет).
public class CollisionPoller
{
private readonly PlayerView _playerView;
private const int MaxBounces = 5;
private const float Threshold = 0.015f;
private const float MaxSlopeAngle = 45f;
private Bounds _bounds;
public CollisionPoller(PlayerView playerView)
{
_playerView = playerView;
_bounds = _playerView.Collider.bounds;
_bounds.Expand(-2 * Threshold);
}
public Vector3 CollideAndSlide(Vector3 velocity, Vector3 position, int depth, bool gravityPass, Vector3 velocityInit)
{
if(depth >= MaxBounces)
return Vector3.zero;
var distance = velocity.magnitude + Threshold;
if (!Physics.SphereCast(position, _bounds.extents.x, velocity.normalized, out var hit, distance))
return velocity;
var snapToSurface = velocity.normalized * (hit.distance - Threshold);
var leftOver = velocity - snapToSurface;
var angle = Vector3.Angle(Vector3.up, hit.normal);
if(snapToSurface.magnitude
Подробнее здесь: [url]https://stackoverflow.com/questions/79173068/unity-3d-my-character-is-shaking-on-the-surface[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия