明天实现的内容:
黑魂游戏中后跳、翻滚、跳跃的键位设计
在黑魂游戏中,后跳和翻滚是由一个键实现的,在站立不动时,按下(哪怕你是按住)该键会后跳。挪动时单击该键会翻滚,按住该键时挪动会奔跑。奔跑时按下跳跃键能力跳跃。最大的问题就是要辨别同一个按键的单击和按住,咱们将采纳的计划为通过计算按下按键的工夫来判断到底是按住了还是单击。
而在键盘上,跳跃和后跳翻滚奔跑竟然都是一个键(默认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; } }
值得注意的:
小细节,黑魂的跳跃落地动作也是有两种的,一种是落地时蹲一下,一种是落地时翻滚,仿佛是跟起跳速度无关。