黑魂复刻游戏的玩家控制器(后跳奔跑翻滚跳跃的再重新设计)——Unity随手记

Posted 0qqppyvt

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了黑魂复刻游戏的玩家控制器(后跳奔跑翻滚跳跃的再重新设计)——Unity随手记相关的知识,希望对你有一定的参考价值。

今天实现的内容:
黑魂游戏中后跳、翻滚、跳跃的键位设计
在黑魂游戏中,后跳和翻滚是由一个键实现的,在站立不动时,按下(哪怕你是按住)该键会后跳。移动时单击该键会翻滚,按住该键时移动会奔跑。奔跑时按下跳跃键才能跳跃。最大的问题就是要区分同一个按键的单击和按住,我们将采用的方案为通过计算按下按键的时间来判断到底是按住了还是单击。
而在键盘上,跳跃和后跳翻滚奔跑居然都是一个键(默认space),通过奔跑时快速再按下该键来实现跳跃,而手柄上连按两下该键是翻滚。

单击和按住的代码实现

    // 按键按压计时器
    private float pressTimer;
    // 单击的间隔时间 小于等于这个时间是单击 大于这个时间是长按(Long Press)
    private float clickIntervalTime = 0.2f;

    // 长按还是单击 决定是冲刺还是翻滚/后跃
    private void RollOrRun(string _key)
    {
        if (Input.GetKeyDown(_key))
        { 
            timer = 0; 
        }

        if (Input.GetKeyUp(_key) && timer <= clickLimitTime)
        {
            jab_roll = true;
        }
        else
        {
            jab_roll = false;
        }

        if (Input.GetKey(_key))
        {
            timer += Time.deltaTime;
            if (timer > clickLimitTime)
                run = true;
        }
        else
        {
            run = false;
        }


    }

运用

    // Update is called once per frame
    void Update()
    {
        // ...
        
        // 跳跃信号
        if (run && Input.GetKeyDown(keyB))
            jump = true;
        else
            jump = false;

        //冲刺/后跃/翻滚信号
        RollOrRun(keyA);
    }

BUG以及缺陷:
本来原计划是实现键盘上的操作,也就是跳跃也由翻滚这个键控制。但是效果不佳,所以跳跃设计为另一个键,这是原计划实现的逻辑。能用,但是跳不远,我已经受够了。

    // 双击计时器
    private float doubleClickTimer;
    // 开始检测双击
    private bool startDoubleClickCheck = false;
        
    private float doubleClickIntervalTime = 0.2f;
    
    private void RollJab_Run_Jump_Signal(string _keyRollJabOrRun, string _keyJump)
    {
        // ...
        
        // 双击检测
        if(startDoubleClickCheck)
        {
            doubleClickTimer += Time.deltaTime;
            startDoubleClickCheck = (doubleClickTimer > doubleClickIntervalTime) ? false : true;

            // 跳跃信号
            if (Input.GetKeyDown(_keyJump))
            {
                jump = true;
            }
            else
            {
                jump = false;
            }
        }
        else
        {
            jump = false;
        }
    }

值得注意的:
小细节,黑魂的跳跃落地动作也是有两种的,一种是落地时蹲一下,一种是落地时翻滚,似乎是跟起跳速度有关。

以上是关于黑魂复刻游戏的玩家控制器(后跳奔跑翻滚跳跃的再重新设计)——Unity随手记的主要内容,如果未能解决你的问题,请参考以下文章

黑魂复刻游戏的玩家控制器(锁定状态)——Unity随手记

黑魂复刻游戏的碰撞摩擦问题——Unity随手记

unity中animator中Trigger多次触发动画解决方法

玩家跳跃高度不一致 - Unity

《刺客信条:起源》内置彩蛋盘点 致敬黑魂/权力的游戏

如何找到 SKSpriteNode 的速度作为 x 和 y 值?