CharacterController.Move没有设置碰撞标志

时间:2018-08-25 02:02:51

标签: c# unity3d

我在“ LevitateMotor”类中有一个函数,该函数使我的CharacterController悬浮或游动。应该通过调用CharacterController.Move方法来设置CollisionFlags变量。但是由于某些原因,在CharacterController移动并与墙碰撞后未设置collisionFlags。角色正在被墙停止,但没有CollisionFlag更改发生。我不知道的Move方法有一些限制吗?

完全相同的CharacterController使用不同的“ GroundMotor”类使角色在地面上行走,并且该类中的crashFlags变量会根据其碰撞的内容正确更改。

playerMotor.controller是CharacterController,朝下面方法的底部看,以找到冲撞标记分配。

    // this is the member-level declaration reference to PlayerMotor inside LevitateMotor class
    public PlayerMotor playerMotor;

    // PlayerMotor is initialized like this in the Start method
    playerMotor = GetComponent<PlayerMotor>();

    void Move(Vector3 direction, bool upOrDown = false)
    {
        if (playerSwimming)
        {
            // Do not allow player to swim up out of water, as he would immediately be pulled back in, making jerky movement and playing the splash sound repeatedly
            if ((direction.y > 0) && (playerMotor.controller.transform.position.y + (50 * MeshReader.GlobalScale) - 0.93f) >=
            (GameManager.Instance.PlayerEnterExit.blockWaterLevel * -1 * MeshReader.GlobalScale) &&
            !playerLevitating)
                direction.y = 0;

            Entity.PlayerEntity player = GameManager.Instance.PlayerEntity;
            float baseSpeed = speedChanger.GetBaseSpeed();
            moveSpeed = speedChanger.GetSwimSpeed(baseSpeed);
        }

        // There's a fixed speed for up/down movement
        if (upOrDown)
            moveSpeed = 80f / PlayerSpeedChanger.classicToUnitySpeedUnitRatio;

        collisionFlags = playerMotor.controller.Move(direction * moveSpeed * Time.deltaTime);
        // Reset to levitate speed in case it has been changed by swimming
        moveSpeed = 4.0f;
    }

以下是GroundMotor类中的赋值语句,该赋值语句正确地分配了冲撞标志。而且CharacterController也可以正确移动。

    // this is the member level CharacterController declaration
    private CharacterController controller;

    // Initialized in start method
    controller = GetComponent<CharacterController>();

        // Called to move the controller via walking
        collisionFlags = controller.Move(moveDirection * Time.deltaTime);

0 个答案:

没有答案