tps(第三人称射击游戏) 2.人物基础运动

脚本my_CharacteCrontroll

人物前后左右运动

       if (Input.GetKey(KeyCode.W))
            {
                transform.position += transform.forward * move_speed_forward * Time.deltaTime;

            }
            if (Input.GetKey(KeyCode.A))
            {
                transform.position -= transform.right * move_speed_right * Time.deltaTime;
            }
            if (Input.GetKey(KeyCode.D))
            {
                transform.position += transform.right * move_speed_right * Time.deltaTime;
            }
            if (Input.GetKey(KeyCode.S))
            {
                transform.position -= transform.forward * move_speed_back * Time.deltaTime;
            }

在FixedUpdate()中加入代码,在固定时间运动一段距离;

人物跳跃
给人物加一个RigidBody和BoxCollider,勾选use gravity?给plane一个Collider,不然会穿过plane

 bool IsGrounded()
 {
        return Physics.Raycast(transform.position, -Vector3.up, margin);
 }

通过射线检测判断角色是不是在地面上

if(!IsGrounded())
{
        rb.AddForce(0, -gravity, 0, ForceMode.Impulse);            
}

如果不在地面上就给人物的刚体加一个向下为gravity的冲量

private void OnCollisionEnter(Collision collision)
    {


        if (collision.collider.tag == "Plane" && flag_jump == true)
        {
            rb.Sleep();
            flag_jump = false;
        }

    }

当人物与地面碰到时,并且人物是按了跳跃键后落地的此时将人物的刚体sleep,防止其穿过地面。

if (flag_jump == false)
            {
                 if (Input.GetKey(KeyCode.Space))
                 {
                     rb.AddForce(0, jumpspeed, 0, ForceMode.Impulse);
                     flag_jump = true;
                 }
             }

当人物并没有在跳跃中时,按下按键跳跃,给人物一个向上的冲量。

猜你喜欢

转载自blog.csdn.net/qq_38105943/article/details/78577626