Привет, подскажите пожалуйста как делают "правильно" физику столкновений в этом движке. Столкнулся с несколькими проблемами:
Вот есть у меня герой с двумя коллайдерами. один (круглый) с трением 1 для ног, второй (прямоугольный) с трением 0 чтоб не лип к стенам, когда прыгаешь в их сторону.
Так вот из-за того что у прямоугольного коллайдера стоит трение 0, то когда герой вбегает по наклонной поверхности (у поверхности трение 1, использовал материал как у ног героя) к стене, то он взлетает вверх и выглядит это ужасно :(
Была идея, что проблема с моим movementController'ом, потому что он позволяет двигаться в прыжке и из-за того герой липнет к стенам если трение 1 у прямоугольного коллайдера, но ведь почти во всех аналогичных играх можно двигаться в прыжке.
И еще одна проблема, что когда герой встает на наклонную поверхность, то съезжает с нее как лыжник, что тоже выглядит неправильно для таких игр (если поверхность не из льда).
MovementController.cs
Код
public class MovementController : MonoBehaviour {
[HideInInspector] public bool FacingRight = true; [HideInInspector] public bool Jump = false; public float MoveForce = 365f; public float MaxSpeed = 5f; public float JumpForce = 1000f; public Transform GroundCheck;
По поводу съезжания когда стоишь на наклонной поверхности: попробуй отключать массу у Rigidbody2D компонента, если герой стоит на земле. По поводу взлетания когда вбегает по наклонной: попробуй значительно увеличивать массу когда герой в воздухе.
А вообще я советую отказаться от наклонных поверхностей вообще (ну или хотя бы крутых склонов). Такой тип контроллера с ними не ладит.
По поводу съезжания когда стоишь на наклонной поверхности: попробуй отключать массу у Rigidbody2D компонента, если герой стоит на земле. По поводу взлетания когда вбегает по наклонной: попробуй значительно увеличивать массу когда герой в воздухе.
А вообще я советую отказаться от наклонных поверхностей вообще (ну или хотя бы крутых склонов). Такой тип контроллера с ними не ладит.
Спасибо, с этим все красиво получается
С этим вообще все красиво и аккуратно получается.
дописал в скрипт Update if (!grounded) { rb2d.mass = 100; } else { rb2d.mass = 0; } и выставил значения параметров по другому MoveForce = 0,01f; JumpForce = 0,03f;
==== На другом форуме предложили вариант - сделать для стен трение 0, а для земли 1 и оставить один коллайдер, но не до конца мне нравилась такая физика, хоть и была близка к ожидаемому результату)
На самом деле, я поковырял оба решения, и пришел к выводу, что ваше решение слабовато потому что может произойти столкновение героя в воздухе (с массой 100) и на земле (с массой 0) с другим объектом и будет разное поведение (в одном случае останется на месте, в другом улетит непонятно куда). в итоге поэксперементировал с трением разных поверхностей (стен 0, наклонных поверхностей 2, а для земли 1) и вроде удавлетворительно все выглядит)
Сообщение отредактировал iPanda - Среда, 23 Декабря 2015, 23:39