胶囊对撞机与动画不同步

时间:2019-10-28 00:20:26

标签: c# unity3d scripting

我正在创建玩家跳跃功能,对撞机无法达到与我的玩家跳跃时相同的高度。

我目前正在尝试根据玩家的位置手动定位对撞机。但是,这导致胶囊现在变得过高,并且由于需要花费一定的时间才能落下,因此玩家最终会淹没在地下的一半。

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 :(得分:0)

除了自己计算胶囊对撞机的位置外,更好的解决方案是将播放器的渲染组件与胶囊对撞机分开。作为一种可能的解决方案,您可以将其置于层次结构中:

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

完成此操作后,可以在跳跃动画期间根据需要更改比例和位置,从而匹配胶囊对撞机的边界。将对撞机分成自己的游戏对象,使您可以更改比例,而不会影响玩家的外观或位置。