设置持续按键的间隔时间,解决手速问题(雾
通常在按键操作的游戏中,特别是发射子弹,都会有几种情况出现,一种是按下按键就发射一次,一种是一直按下按键就持续发射。但是在不仅是Unity里,java的按键检测中也同样存在问题。当持续按键时Unity实例化子弹的间隔会非常的快,触发时间极端。
比如 Input.GetKey() 方法→我们想发射子弹,如果使用GetKeyDown的话就得每发射一次就按一次,频繁的操作带来的是极度的手酸和麻烦。但GetKey方法的话,检测的是持续按下持续触发。目前本萌新没有找到可以控制触发速率的内置方法,网上也没找到,当初实属头疼。
后来通过设置间隔时间和按下弹起粗略的解决了问题,希望dalao们能指点一下,更好的优化方法。不过对于萌新来说,还是有很好的用途的。
// 弹幕间隔时间
public float currentTime = 0.1f;
// 弹幕计时
private float invokeTime;
// start方法中赋初值
void Start()
{
invokeTime = currentTime;
}
void Update()
{
// 弹幕射击操作
if (Input.GetKey(KeyCode.Z))
{
// 按键按下时进行计时
invokeTime += Time.deltaTime;
// 间隔时间大于自定义时间才执行
if (invokeTime -currentTime> 0)
{
// 进行实例化弹幕、子弹等操作
//Instantiate(*****);
// 实例化一次后计时归零
invokeTime = 0;
}
}
// 同时,按键弹起时也对计时器归位
if (Input.GetKeyUp(KeyCode.Z))
{
invokeTime = currentTime;
}
}
代码中给出了核心的算法思路,这样是保证了每次按下按键时,能立即触发弹幕生成。不会存在断断续续的情况,或者按下无反应而过段时间才生成的情况。很简单的思路,希望能够帮助萌新们在基础阶段解决问题。