Unity简单的移动实现(三)

回顾

上一篇Unity简单的移动实现(二)我们添加了一个小功能,就是角色可以跑了,观察力强的可能发现里面有两个方法并没有实现,一个是跳,一个是蹲,所以这次我们就来完成这两个功能。

实现蹲和跳

先单纯的理解一下角色如何蹲下,蹲下后角色会怎么样;角色如何跳,跳起来会怎么样。

先说蹲,一般来说打fps的玩家都习惯用LeftControl去下蹲(也就是键盘左下角的那个Ctrl键),所以我们通过这个键去实现角色下蹲,不过我可以通过外部去更改按键,所以不做强制。
角色蹲下去之后,最明显的变化就是摄像机高度出现了变化,所以我们需要去调整摄像机位置,其次就是碰撞体积发生了变化,之前进不去的地方可以进去了,这是两处最明显的变化,其次就是速度的变化,这些都是最直观的体验,所以我们先实现这些效果

	CapsuleCollider PlayerCollider;
	private void Start()
    { 
        rig = GetComponent<Rigidbody>();//获取组件
        PlayerCollider = GetComponent<CapsuleCollider>();//获取角色碰撞盒       
    }


	public float Height;//高度
	public override void Squad()//蹲
    {
        MoveCoefficient = SquadCoefficient;//改变速度
        //改变摄像机位置 只要摄像机挂载到头部,就不需要改变摄像机位置了,只要调整头部就可以了
        PlayerCollider.height = Height;//设置碰撞大小
    }

这样角色就可以进行下蹲了,如果有的碰撞盒高度不对,就手动记录位置去调整就可以了

角色起跳,是让角色整体向上移动,一般通过Space键(空格键)去执行跳跃,跳跃既不会改变角色摄像机,也不会改变角色碰撞盒大小(除了特殊效果),但是,它最大的问题就是去判断角色是否落地,因为角色的落地决定了它是否可以执行,除非你的角色是一个飞行角色不太需要跳跃管理。

	bool IsJump = false;//是否跳跃
    public override void Jump()//跳
    {
        rig.AddForce(transform.up * 5,ForceMode.VelocityChange);//添加向上的力
        IsJump = true;//确定跳起来了
    }
private void OnCollisionEnter(Collision collision)
    {
        if (collision.transform.tag == "Ground")
        {
            IsJump = false;
        }     
    }

我通过碰撞检测去判断是否落地,用射线检测地面的也是可以的,只不过比这个要麻烦,不过可以得到更好的检测效果,不过我正在思考有没有比这些又方便有简单的检测方法,如果有更好的方法可以在下面留言分享。

总结

这次我们实现了一个简单的下蹲和跳跃,但是在运行的时候会有一些不合理的行为,所以下一篇我们就要去修改这些小问题,顺便将移动中关键的一步加上,那就是角色旋转,我们下一篇见。

Unity简单的移动实现(四)

你可能感兴趣的:(Unity经验分享)