整体代码如下:
[SerializeField] private float dashTime;
[SerializeField] private float dashDuration;
[SerializeField] private float dashSpeed;
[SerializeField] private float dashCd;
[SerializeField] private float dashCd2;
void Update()
dash();
dashCd -= Time.deltaTime;
dashTime -= Time.deltaTime;
private void Dash()
{
if (UnityEngine.Input.GetKeyDown(KeyCode.LeftShift)&&dashCd<=0&&!isAttacking)
{
dashTime = dashDuration;
;dashCd = dashCd2;
}
if (dashTime > 0)
{
rb.velocity = new Vector2(facingdir * dashSpeed, 0);
}
}
代码解析
初步设置:
在开始之前,请确保你的角色上已经附加了一个刚体(在代码中被称为rb),因为我们将修改它的速度来创建冲刺效果。
冲刺变量:
[SerializeField] private float dashTime;
[SerializeField] private float dashDuration;//冲刺时间
[SerializeField] private float dashSpeed;//为冲刺速度赋予数值
[SerializeField] private float dashCd;
[SerializeField] private float dashCd2;//冲刺的冷却时间
在这里,我们定义了几个关键的序列化字段:
dashTime:当前的冲刺时间。
dashDuration:冲刺可以持续的总时间。
dashSpeed:冲刺的速度。
dashCd:冲刺的当前冷却时间。
dashCd2:冲刺的总冷却时间。
主要功能:
void Update()
{
Dash();
dashCd -= Time.deltaTime;
dashTime -= Time.deltaTime;
}
在Update函数中,我们持续减少冲刺的冷却时间和冲刺时间。
Time.deltaTime是一个根据时间持续增加的float变量,dashCd -= Time.deltaTime;等同于dashCd = dashCd-Time.deltaTime;这样做可以给dashCd持续赋值,根据时间减小。在unity中可以为dashCd设置一个初始值,这样就可以获得一个拥有初始值且持续减小的变量。
private void Dash()
{
if (UnityEngine.Input.GetKeyDown(KeyCode.LeftShift) && dashCd <= 0 && !isAttacking)
{
dashTime = dashDuration;
dashCd = dashCd2;
}
if (dashTime > 0)
{
rb.velocity = new Vector2(facingdir * dashSpeed, 0);
}
}
在Dash函数中,当玩家按下左Shift键并满足特定条件时(冷却时间已结束且角色不在攻击状态),角色将开始冲刺。冲刺时,角色的速度会增加,使其快速移动。
{
dashTime = dashDuration;
dashCd = dashCd2;
}
dashCd2和dashDuration是上面我们创建的两个对象,在unity中将这两个变量设置成为两个正值,目的是当我们执行一次冲刺操作后将dashCd和dashTime可以恢复成两个正值。
总结:
这是一个简单的冲刺机制实现。你可以根据需要进一步定制和完善这个机制,例如添加冲刺的动画或特效,以增强游戏的体验和视觉效果。
—— 评论区 ——