C# 冲破敌人,不要受到伤害

C# 冲破敌人,不要受到伤害,c#,unity3d,C#,Unity3d,我试图让我的玩家角色冲破特定的敌人,并且在反冲刺动画中不会受到任何伤害,以下是脚本: using UnityEngine; using System.Collections; using CnControls; public class PlayerDash : MonoBehaviour { private Animator myAnim; private bool dash = false; private float dashTimer = 0; private float das

我试图让我的玩家角色冲破特定的敌人,并且在反冲刺动画中不会受到任何伤害,以下是脚本:

using UnityEngine;

using System.Collections;

using CnControls;

public class PlayerDash : MonoBehaviour {

private Animator myAnim;
private bool dash = false;
private float dashTimer = 0;
private float dashCd = 0.3f;
public Collider2D[] Coll;

void Start () {
    myAnim = gameObject.GetComponent<Animator> ();
}
void Update () {
    if (CnInputManager.GetButtonDown ("Dash") && !dash) {
        dash = true;
        dashTimer = dashCd;
        myAnim.SetBool ("Dash", dash);
        foreach (Collider2D coll in Coll) {
            if (coll.gameObject.tag == ("Enemy")) {
                coll.enabled = false;
            }
        }
    }
    if (dash) {
        if (dashTimer > 0) {
            dashTimer -= Time.deltaTime;
        } else {
            dash = false;
            myAnim.SetBool ("Dash", false);
        }
    }
}
}
使用UnityEngine;
使用系统集合;
使用CNC控件;
公共类玩家达什:单一行为{
私人动画师myAnim;
私有布尔破折号=假;
专用浮点计时器=0;
专用浮点数dashCd=0.3f;
公共图书馆【】Coll;
无效开始(){
myAnim=gameObject.GetComponent();
}
无效更新(){
如果(CnInputManager.GetButtonDown(“短划线”)和&!短划线){
破折号=真;
dashTimer=dashCd;
myAnim.SetBool(“破折号”,破折号);
foreach(冲突的r2d coll在coll中){
如果(coll.gameObject.tag==(“敌人”)){
coll.enabled=false;
}
}
}
如果(破折号){
如果(dashTimer>0){
dashTimer-=Time.deltaTime;
}否则{
破折号=假;
myAnim.SetBool(“破折号”,假);
}
}
}
}

一切正常,但当我使用dash并与“Dashable”敌人碰撞时,每个“Dashable”敌人都不会对玩家造成伤害(这是因为我使用的条件),我应该使用什么条件使敌人的碰撞机在我第一次碰撞后仍然处于活动状态,已经在这里尝试了一些选项,但似乎没有任何东西能正常工作

我建议您创建一个bool
无敌
(或者如果您想更有趣,可以创建一个简单的状态机)。处理玩家伤害的脚本可以检查玩家当前是否无敌,然后忽略伤害

这样,对于你的短跑或任何其他你希望玩家不受伤害的动画,只需在开始时打开“无敌”,然后在结束时关闭它


希望有帮助

我建议你创建一个bool
无敌的
(或者如果你想更有趣,一个简单的状态机)。处理玩家伤害的脚本可以检查玩家当前是否无敌,然后忽略伤害

这样,对于你的短跑或任何其他你希望玩家不受伤害的动画,只需在开始时打开“无敌”,然后在结束时关闭它


希望有帮助

我发现,我在更新之外创建了一个方法来检查玩家是否是dashin,然后在更新中调用它,谢谢

void enterDashing() {
    foreach (Collider2D coll in Coll) {
        if (coll.gameObject.tag == "Enemy" && !dash) {
            coll.enabled = true;
        }
    }
}

我发现,我在更新之外创建了一个方法来检查玩家是否是dashin,然后在更新中调用它,谢谢

void enterDashing() {
    foreach (Collider2D coll in Coll) {
        if (coll.gameObject.tag == "Enemy" && !dash) {
            coll.enabled = true;
        }
    }
}

在更新中,您禁用了碰撞器。启用的行为会更新,禁用的行为不会更新-手册如是说。我在做一个假设,因为你的“敌人造成伤害”代码没有发布。我发现,我在更新之外创建了一个方法来检查玩家是否在使用dash,然后我在更新中调用了它,谢谢。在你的更新中,你禁用了对撞机。启用的行为会更新,禁用的行为不会更新-手册如是说。我在做一个假设,因为你的“敌人造成伤害”代码没有发布。我发现,我在更新之外创建了一个方法来检查玩家是否使用dash,然后我在更新中调用它,谢谢。我建议避免这种情况,并做一些类似于我上面发布的解决方案的事情。您在此处发布的解决方案仅适用于您的dash动画。如果在未来,你想要另一个让他们无敌的动画呢?如果你想让他们战无不胜呢?我发布的解决方案更能证明未来,因为它允许你随意设置玩家无敌和非无敌,并避免与影响无敌的不同事物发生冲突。我建议避免这种情况,并采取类似于我上面发布的解决方案的措施。您在此处发布的解决方案仅适用于您的dash动画。如果在未来,你想要另一个让他们无敌的动画呢?如果你想让他们战无不胜呢?我发布的解决方案更能证明未来,因为它允许你随意设置玩家无敌和非无敌,并避免与影响无敌的不同事物发生冲突。