Unity OnTriggerEnter2D

时间:2018-12-30 13:26:02

标签: c# unity3d triggers

任何人都可以帮助我解决我遇到的这个问题吗?

*第一个脚本:

Private Sub CommandButton1_Click()

A = Worksheets("Stig Okt").Cells(Rows.Count, 1).End(xlUp).Row

For i = 34 To A
    If Worksheets("Stig Okt").Cells(i, 4).Font.Bold = False And Cells(i,4).Value = "Fælles" Then
        Worksheets("Stig Okt").Rows(i).Columns("A:H").Copy
        Worksheets("Laura Okt").Activate
        b = Worksheets("Laura Okt").Cells(Rows.Count, 1).End(xlUp).Row
        Worksheets("Laura Okt").Cells(b + 1, 1).Select
        ActiveSheet.Paste
    End If

    If Worksheets("Stig Okt").Cells(i, 4).Font.Bold = False And Cells(i, 4).Value = "Lagt ud" Then
        Worksheetss("Stig Okt").Rows(i).Columns("A:H").Copy
        Worksheets("Laura Okt").Activate
        b = Worksheets("Laura Okt").Cells(Rows.Count, 1).End(xlUp).Row
        Worksheets("Laura Okt").Cells(b + 1, 1).Select
        ActiveSheet.Paste
    End If
Next
Worksheets("Stig Okt").Activate


End Sub

*第二个脚本:

public static bool attacking; 
public Collider2D attackTrigger;

private void Awake()
{
    attackTrigger.enabled = false;
}

private void Update()
{
    if (attacking == true)
    {
        Debug.Log("Box Collider Enabled");

        attackTrigger.enabled = true;
        StartCoroutine(DisableCollider());
    }
}

IEnumerator DisableCollider()
{
    yield return new WaitForSeconds(1);
    attacking = false;
    attackTrigger.enabled = false;
    Debug.Log("Box Collider Disabled");
}

我正试图让我的玩家角色通过碰撞攻击敌人,它确实起作用并且玩家确实伤害了敌人,但是只有当敌人的对撞机再次进入我的攻击时,它才会起作用。

如果敌人已经在我的攻击区域中并附加了方块碰撞2d,则该敌人不会受到伤害,这不是我想要的。

我可以将其更改为OnTriggerStay2D,但是敌人将继续受到伤害,直到再次禁用对撞机为止。想要帮助吗?

1 个答案:

答案 0 :(得分:2)

我认为问题是

    IEnumerator DisableCollider()
    {
    yield return new WaitForSeconds(1);
    attacking = false;
    ...

这将导致更新中的IF语句仍然持续1秒钟并启动大量协程。最简单的解决方案是将移动攻击=假;在屈服之前,但我想您想使用该变量来知道用户是否处于攻击状态。所以我建议使用另一个布尔变量。

        if (invokeAttack)
        {
            attacking = true;
            invokeAttack = false

            Debug.Log("Box Collider Enabled");
            attackTrigger.enabled = true;
            StartCoroutine(DisableCollider());
        }

无论如何,您没有向我们展示如何调用攻击,但不是将变量(在您的情况下为attacking / invokeAttack)更改为true并在Update中进行检查,您只是调用了启用对撞机并启动协程的方法? / p>