我可以看到你是想让玩家 只能在地面时执行避开(dodge)和滚动/冲刺(roll/dash)动作。要实现此功能,你可以通过检查玩家是否处于地面的状态来控制避开和滚动/冲刺动作的触发。
下面是你需要做的修改:
- 在
PlayerMovement类中添加两个新的变量isDodging和isRolling,用于控制玩家当前是否处于避开或滚动/冲刺状态。 - 在
Update()方法中,检查玩家是否处于地面(通过isGrounded()方法),如果是,则清空isDodging和isRolling变量。 - 创建一个新方法
Dodge(),该方法执行避开动作并设置isDodging为true。 - 创建一个新方法
RollDash(), 该方法执行滚动/冲刺动作并设置isRolling为true。 - 在
FixedUpdate()方法中,检查isDodging和isRolling变量,如果它们为true,则执行相应动作。
下面是具体的修改代码:
private bool isDodging;
private bool isRolling;
// ...
private void Update()
{
// ...
if (isGrounded())
{
isDodging = false;
isRolling = false;
}
if (Input.GetKeyDown(KeyCode.Escape))
{
Dodge();
}
if (Input.GetKeyDown(KeyCode.Space))
{
RollDash();
}
// ...
}
private void Dodge()
{
isDodging = true;
// 执行避开动作,如改变玩家位置或速度
}
private void RollDash()
{
isRolling = true;
// 执行滚动/冲刺动作,如改变玩家速度或加速
}
private void FixedUpdate()
{
// ...
if (isDodging)
{
// 执行避开动作
}
if (isRolling)
{
// 执行滚动/冲刺动作
}
// ...
}
以上修改代码仅供示例,如果你需要更复杂的功能,则需要根据具体需求修改代码。
至于I-frame(意外框)的实现,可以通过在玩家避开时暂时使其透明或者变小来实现。
你需要添加以下代码:
private Renderer renderer;
private void Start()
{
renderer = GetComponent<Renderer>();
}
private void Dodge()
{
isDodging = true;
renderer.enabled = false;
// 执行避开动作
Invoke("ResetDodging", attackTime);
}
private void ResetDodging()
{
isDodging = false;
renderer.enabled = true;
}
以上代码会在玩家避开时暂时使其透明,可以通过调整参数attackTime来控制暂停多长时间。
评论 (0)