Капсульный коллайдер не синхронизирован с анимацией - PullRequest
1 голос
/ 28 октября 2019

Я создаю функцию прыжка игрока, и коллайдер не достигает такой же высоты, как ноги моих игроков при прыжке.

В настоящее время я пытаюсь вручную расположить коллайдер в зависимости от положения игрока. Однако это привело к тому, что капсула слишком сильно поднялась, и из-за времени, которое требуется для падения, игрок оказывается наполовину погруженным в землю.

void Jump() {
        if (Input.GetKeyDown(KeyCode.Space)&& isGrounded == true) {
            isGrounded = false;
            actions.Jump();
            rigidbody.AddRelativeForce(Vector3.up * jumpSpeed);
            startTime = Time.time;
        }
        else {
            if (transform.position.y < .6f) {
                isGrounded = true;
            }
        }
    }

private void Update() {
        if (!isGrounded) {
            dist = (Time.time - startTime) * capSpeed;
            fracOfJourney = dist / journeyLength;
            capCollider.center = Vector3.Lerp(start, end, fracOfJourney);
        }
        else {
            // capCollider.center = Vector3.Lerp(end, start, fracOfJourney);
        }
    } 

1 Ответ

0 голосов
/ 28 октября 2019

Вместо того, чтобы рассчитывать положение капсульного коллайдера самостоятельно, лучшим решением было бы отделить компоненты рендеринга вашего игрока от капсульного коллайдера. В качестве возможного решения вы могли бы иметь в своей иерархии:

Player Root: (rigidbody, player animator, Movement Script)
    Renderer: (Mesh of player and renderer here)
    Collider: (Capsule Colider here)

После этого вы можете сопоставить границы вашего капсульного коллайдера, изменяя масштаб и положение по мере необходимости во время анимации прыжка. Разделение коллайдера на его собственный игровой объект позволяет изменять масштаб, не влияя на внешний вид или положение игрока.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...