空洞骑士=角色控制

基本就是知乎用Unity重现《空洞骑士》的苦痛之路(2)——人物控制篇 - 知乎 (zhihu.com)

的内容。文章纯自己梳理逻辑而已。

核心逻辑

左右控制+检测障碍物

 

跳跃+蓄力跳

 

    public float jumpTime;      //跳跃的最大蓄力时间
    float timeJump;             //跳跃当前的蓄力时间
    public void Jump()
    {
        if (Input.GetKeyDown(KeyCode.Space))
        {
            jumpState = true;  //进入跳跃状态
            moveSpeed.y += jumpPower;//初始添加向上的力
            timeJump = 0;//蓄力时间清零
        }
        else if (Input.GetKey(KeyCode.Space) && jumpCount<=2 && jumpState)
        {
            timeJump += Time.deltaTime;//蓄力时间增加
            if (timeJump < jumpTime)
            {
                moveSpeed.y += jumpPower;//蓄力
            }
        }
        else if (Input.GetKeyUp(KeyCode.Space))
        {
            jumpState = false;//退出跳跃状态
            timeJump = 0;//蓄力时间清零
        }
    }

冲刺状态

    public bool gravityEnable;  //重力开关
    public bool inputEnable;    //接受输入开关  true 游戏接受按键输入  false不接受按键输入
    public void SprintFunc()
    {
        if (Input.GetKeyDown(KeyCode.J) && isCanSprint)
        {
            StartCoroutine(SprintMove(sprintTime));//冲刺协程
        }
    }
    IEnumerator SprintMove(float time)
    {
        inputEnable = false;
        gravityEnable = false;//关闭按键输入,以及不在应用重力
        moveSpeed.y = 0;//Y轴速度清零
        isCanSprint = false;
        if (nowDir == PlayDir.Left)
        {
            moveSpeed.x = 15*-1;
        }
        else
        {
            moveSpeed.x = 15;
        }//根据方向施加速度
        yield return new WaitForSeconds(time);//延迟time秒后执行
        inputEnable = true;
        gravityEnable = true;
        isCanSprint = true;//状态回滚
    }

 

爬墙切换

原版游戏里,在空中时碰到特定墙壁会进入到爬墙的状态。

条件是下一帧需要碰到墙壁,且距离地面有一定的高度才行。代码如下:

下面代码也就是检测是否在地面一定高度上:

进入爬墙状态不能冲刺

    public void EnterClimpFunc(Vector3 rayPoint) //移动检测到下一帧碰到墙壁时调用
    {
        //设定碰到墙 且  从碰撞点往下 玩家碰撞盒子高度内  没有碰撞体  就可进入碰撞状态。
        RaycastHit2D hit2D = Physics2D.BoxCast(rayPoint, boxSize, 0, Vector2.down, boxSize.y, playerLayerMask);
        if (hit2D.collider != null)
        {
            Debug.Log("无法进入爬墙状态  "+ hit2D.collider.name);
        }
        else
        {
            playAnimator.SetTrigger("IsClimb");//动画切换
            isClimb = true;
            isCanSprint = true; //爬墙状态,冲刺重置
        }
    }

有3种方式可以退出爬墙状态:

1.玩家自己受重力下落,超出墙壁的范围。

2.玩家按下跳跃键退出。

3.玩家按下反方向移动键退出。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

嘿君

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值