В настоящее время я работаю над движением моего персонажа в Unity3D . Мне удалось заставить его двигаться относительно курсора мыши. Я установил предел наклона 45 °, который не позволяет персонажу подниматься в горы с более высокими градусами. Но он все еще может подпрыгнуть их.
Как мне удается заставить его снова скользить вниз, когда он прыгает в местах с слишком высоким уклоном?
Заранее спасибо.
редактировать: фрагмент кода моего основного движения. используя UnityEngine; использование System.Collections;
public class BasicMovement : MonoBehaviour {
private float speed;
private float jumpSpeed;
private float gravity;
private float slopeLimit;
private Vector3 moveDirection = Vector3.zero;
void Start()
{
PlayerSettings settings = GetComponent<PlayerSettings>();
speed = settings.GetSpeed();
jumpSpeed = settings.GetJumpSpeed();
gravity = settings.GetGravity();
slopeLimit = settings.GetSlopeLimit();
}
void Update() {
CharacterController controller = GetComponent<CharacterController>();
controller.slopeLimit = slopeLimit;
if (controller.isGrounded) {
moveDirection = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical"));
moveDirection = transform.TransformDirection(moveDirection);
moveDirection *= speed;
if (Input.GetButton("Jump")) {
moveDirection.y = jumpSpeed;
}
}
moveDirection.y -= gravity * Time.deltaTime;
controller.Move(moveDirection * Time.deltaTime);
}
}
Ответы:
Ваше торможение при ударе о землю - это неправильно, вы просто прекращаете вертикальное движение, но это только то, как удар по земле работает, когда земля ровная.
То, что вы должны сделать, это проецировать
moveDirection
на поверхность, которая поражена, которая даст вам новоеmoveDirection
. Если в вашей библиотеке есть функция для проекции вектора на плоскость или поверхность, это то, что вам следует использовать. Если нет, вы должны вычестьmoveDirection
проекцию на нормаль поверхности отmoveDirection
себя.источник
просто проверьте перед прыжком, стоит ли персонаж на земле, я имею в виду, если он не на высоком наклонном склоне. и оставьте что-нибудь еще физическому движку.
на основе предоставленного вами кода я вижу, в чем проблема:
согласно ссылке на скрипт Unity ,
CharacterController.isGrounded
возвращается только если персонаж касается земли. он не проверяет наличие наклона. после небольшого поиска FPSWalkerEnhanced, похоже, решает проблему.источник