В эти дни я пытаюсь создать 2D-контроллер персонажа с единством (используя физику). Я довольно плохо знаком с физическими двигателями, и мне действительно сложно почувствовать, что я ищу. Я был бы очень рад, если бы кто-нибудь мог предложить решение для проблемы, которую я нахожу:
Это мое FixedUpdate прямо сейчас:
public void FixedUpdate()
{
Vector3 v=new Vector3(0,-10000*Time.fixedDeltaTime,0);
_body.AddForce(v);
v.y=0;
if(state(MovementState.Left))
{
v.x=-_walkSpeed*Time.fixedDeltaTime+v.x;
if(Mathf.Abs(v.x)>_maxWalkSpeed) v.x=-_maxWalkSpeed;
}
else if(state(MovementState.Right))
{
v.x= _walkSpeed*Time.fixedDeltaTime+v.x;
if(Mathf.Abs(v.x)>_maxWalkSpeed) v.x=_maxWalkSpeed;
}
_body.velocity=v;
Debug.Log("Velocity: "+_body.velocity);
}
Я здесь пытаюсь просто переместить твердое тело, применяя гравитацию и линейную силу для левых и правых. У меня настроить PHYSIC материал, который не имеет никакого раскачивания и 0 трения при движении и 1 трение с подставкой еще. Основная проблема заключается в том, что у меня есть коллайдеров с наклонами и изменения скорости от подходя (медленнее), идя вниз по склону (быстрее) и ходить по прямой коллайдера (нормальный). Как можно это исправить? Как вы видите, я применяю Allways одинаковую скорость для оси х.
Для игрока у меня есть его установка со сферой в положении ног, что является Rigidbody я применяю силу к.
Любой другой совет, который мог бы сделать свою жизнь проще с этим приветствуются :).
PD В то время как возвращение домой, я заметил, что я мог бы решить эту проблему применения постоянной силы параллельно поверхности игрок ходит, но не знаю, если это лучший способ.
источник
Ответы:
Если вы хотите мимических старой школы приставочных шаг один заключается в канаву физике в целом. Вы будете в конечном итоге борьба систему физики , чтобы получить решительно , не реалистичное движение старой школы платформер. Посмотрите на эту CharacterController замену , что физика канавы в целом , чтобы получить хорошее представление о том , один из способов его осуществления.
источник
Вы, вероятно, будете счастливее, если будете использовать то, что рекомендовал Меона. Но если вы собираетесь использовать физику Unity, то вы, вероятно, хотите использовать
ForceMode.VelocityChange
.Пример:
Вам также следует применить глобальную гравитацию в настройках физики вашего проекта, а для объектов, которые вы хотите упасть быстрее, добавить компонент постоянной силы .
ForceMode.Impulse
похоже, но зависит от массы твердого тела. Это усложняет настройку.источник
Даже если вам не нравится встроенный компонент Character Controller (как и я), взгляните на пример кода Unity для учебника по 2D-игре .
Код реализует полноценный 2D-геймплей с движущимися платформами, врагами и ящиками при столкновении с использованием Контроллера персонажей.
Но если вы даже не хотите смотреть, я предлагаю вам свести к минимуму использование физики и попытаться скопировать ее поведение с вашим собственным кодом. В зависимости от того, какую 2D игру вы планируете, она может работать довольно хорошо. Например, вместо применения силы для
Rigidbody.velocity
перемещения вашего персонажа вы можете напрямую связыватьсяTransform.Translate()
, перемещая объект вTransform.position
зависимости от его оси. Вы можете определитьforward
иback
относящийся к самому объекту или, может быть, платформу или полTransform.up
, так что вы будете знать, знает ли он наклон и своего рода угол его наклона.Кроме того, если вы создаете какой-либо атрибут контроля скорости (например, как долго нажимается клавиша), вы можете применить его вместе с вашим направлением во время перевода, чтобы предотвратить перемещение вашего персонажа по чему-то слишком наклонному без некоторой скорости, так же, как это делали в ежике Sonic для Бытие / Мега Драйв.
Если вы решите продолжать использовать физику, я вам ничем не могу помочь, потому что я не очень хорош в этом, но помните, что это нормальное поведение - идти вверх по склону медленнее, поскольку телу нужно больше силы, чтобы не отставать. как в реальной жизни.
источник
Что вы хотите, это встроенный контроллер персонажей . Установив
step offset
свойство этого компонента, вы можете заставить игрока легко перемещаться вверх и вниз по склонам.источник
Я предполагаю, что это происходит потому, что сила не параллельно платформе, и результат заканчивает тем ниже в подъеме и выше по происхождению.
Если применить относительную силу к системе координат
Вы хотите, чтобы сохранить максимальную скорость в «х» и сравнить ее с скаляр, помните, что скорость является вектором и составьте ух и уу, в плоской местности иу равна нулю, но обязательно на склонах больше нуля.
Скорость изменяется в соответствии с направлением тела, и его относительная vx изменяется относительно его общей vx
Это может изменить ваш V таким образом, вы не хотите, тоже:
поддержание того же глобального Vx может показаться странным для глаз. (Нежелательные Ускорения)
источник