CharacterController(角色控制器)

CharacterController


描述:

        角色控制器可以让你更容易的处理有有碰撞的运动,同时不用处理刚体。(也就是说角色控制器负责处理角色的移动,如果添加角色控制器,就不用在添加刚体组件)

        角色控制器不受力的影响,并且只有当你调用move函数时才会移动。他的运动收碰撞的约束。




变量:

        public Vector3 center;

        描述:

                角色胶囊体的中心相对于transform的位置。     

public class ExampleClass : MonoBehaviour {
    public CharacterController controller;
    void Example() {
        controller = GetComponent<CharacterController>();
        controller.center = new Vector3(0, 1, 0);
    }
}

           public CollisionFlags collisionFlags;

       描述:

                 上一次调用CharacterController.Move后, 胶囊碰撞体的那个部位与换景发生了碰撞。(CollisionFlags是位掩码标记,其值分别是:None。 Side--身体发生碰撞,如撞在了墙上。  Above--头顶发生碰撞。 Below--脚底发生碰撞,如站在了地面)

public class ExampleClass : MonoBehaviour {
    void Update() {
        CharacterController controller = GetComponent<CharacterController>();
        if ((controller.collisionFlags & CollisionFlags.Above) != 0)
            print("touched the ceiling");
        
    }
}


          public bool detectCollisions;

      (这个属性不知道有什么用。如果要忽略碰撞请使用 Physics.IgnoreCollision,把这个属性设置为false没用 )



       public float height;

      描述:

                角色胶囊体的高度。

public class ExampleClass : MonoBehaviour {
    public CharacterController controller;
    void Example() {
        controller = GetComponent<CharacterController>();
        controller.height = 2.0F;
    }
}

          public bool isGrounded;

      描述:

                判断角色控制器在移动中是否碰到了地面。

public class ExampleClass : MonoBehaviour {
    void Update() {
        CharacterController controller = GetComponent<CharacterController>();
        if (controller.isGrounded)
            print("We are grounded");
        
    }
}

        public float radius;

      描述:

               角色胶囊体的半径。

public class ExampleClass : MonoBehaviour {
    public CharacterController controller;
    void Example() {
        controller = GetComponent<CharacterController>();
        controller.radius = 0.3F;
    }
}


          public float skinWidth;

      描述:

                角色的碰撞体的外皮的宽。(也就是额外的增加这段距离可以触发碰撞, 一般其值很小但不为0)


       public float slopeLimit;

      描述:

                角色控制器能爬的最大坡度的斜坡。

public class ExampleClass : MonoBehaviour {
    public CharacterController controller;
    void Example() {
        controller = GetComponent<CharacterController>();
        controller.slopeLimit = 45.0F;
    }
}


         public float stepOffset;

      描述:

               米为单位,角色控制器每一步的位移。

   

public class ExampleClass : MonoBehaviour {
    public CharacterController controller;
    void Example() {
        controller = GetComponent<CharacterController>();
        controller.stepOffset = 2.0F;
    }
}


       public Vector3 velocity;

      描述:

               角色当前的相对速度。(只读)

               可以让你追踪到角色当前行走的速度,例如角色被墙卡住时其值为零向量。

               注意:这个值与角色调用CharacterController.MoveCharacterController.SimpleMove 函数之后其行走的距离是不同的。这个值是相对的是因为他不能追踪 CharacterController 之外的 tranform 的移动,比如角色在其父物体下产生的移动,例如在车里。

 

public class ExampleClass : MonoBehaviour {
    void Update() {
        CharacterController controller = GetComponent<CharacterController>();
        Vector3 horizontalVelocity = controller.velocity;
        horizontalVelocity = new Vector3(controller.velocity.x, 0, controller.velocity.z);
        float horizontalSpeed = horizontalVelocity.magnitude;
        float verticalSpeed = controller.velocity.y;
        float overallSpeed = controller.velocity.magnitude;
    }
}


      


函数:

         public CollisionFlags Move(Vector3 motion);

         描述:

                   一个复合的移动函数完成一个绝对的运动。

                   根据motion移动控制器,只受碰撞体约束。collisionFlags简述了在移动过程中发生的情况。这个函数不提供任何重力


  

public class ExampleClass : MonoBehaviour {
    public float speed = 6.0F;
    public float jumpSpeed = 8.0F;
    public float gravity = 20.0F;
    private Vector3 moveDirection = Vector3.zero;
    void Update() {
        CharacterController controller = GetComponent<CharacterController>();
        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);
    }
}


          public bool SimpleMove(Vector3 speed);

         描述:

                  通过speed移动角色。

                  这个函数忽略Y轴的移动。速度是以米为单位。自动添加重力。角色在地面上时返回true。

   

[RequireComponent(typeof(CharacterController))]
public class ExampleClass : MonoBehaviour {
    public float speed = 3.0F;
    public float rotateSpeed = 3.0F;
    void Update() {
        CharacterController controller = GetComponent<CharacterController>();
        transform.Rotate(0, Input.GetAxis("Horizontal") * rotateSpeed, 0);
        Vector3 forward = transform.TransformDirection(Vector3.forward);
        float curSpeed = speed * Input.GetAxis("Vertical");
        controller.SimpleMove(forward * curSpeed);
    }
}



  • 16
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值