OverlapCircle与Unity中某些对撞机之间的接触点

时间:2019-03-21 19:41:36

标签: c# unity3d

我正在尝试让Collider和OverlapCircleAll之间的接触点在该点上播放动画。

这是我用于攻击的方法。

private IEnumerator BasicAttackBehaviour()
    {
        canAttack = false;
        Collider2D[] enemiesToDamage = Physics2D.OverlapCircleAll(attackPos, attackRange, whatIsEnemy);
        for (int i = 0; i < enemiesToDamage.Length; i++)
        {
            enemiesToDamage[i].GetComponentInParent<Enemy>().TakeDamage(damage);
        }
        PlayAttackAnimation();
        yield return new WaitForSeconds(attackDelay);
        canAttack = true;
    }

这是“ TakenDamage”方法:

public void TakeDamage(int damage)
    {
        health -= damage;
        GameObject bloodEffect = Instantiate(takenDamageVFX, transform.position, transform.rotation);
    }

我想在击中敌人的位置上实例化VFX“ bloodEffect”,而不是“ transform.position”。

This is how it looks like

2 个答案:

答案 0 :(得分:1)

您可能要切换到CircleCastAll,它将为您提供世界空间坐标中的接触点:

https://docs.unity3d.com/ScriptReference/Physics2D.CircleCastAll.html

如果您不想做一个运动的圆而只想做一个不运动的圆,则可以将distance参数设置为0.0f。

答案 1 :(得分:0)

回答我的问题并感谢上面解决了我的问题的老板,我的解决方法是在万一有人需要可视化示例的情况下。

private IEnumerator BasicAttackBehaviour2()
    {
        canAttack = false;
        RaycastHit2D[] raycastHits = Physics2D.CircleCastAll(attackPos, attackRange, directionLookingAt, 0, whatIsEnemies);
        for(int i = 0; i < raycastHits.Length; i++)
        {
            Vector2 pointHitten = raycastHits[i].point;
            raycastHits[i].collider.gameObject.GetComponent<Enemy>().TakeDamage(damage, pointHitten);
        }

        PlayAttackAnimation();
        yield return new WaitForSeconds(attackDelay);
        canAttack = true;
    }

使用CircleCastAll,我能够检索RaycastHit2D的点并将其传递给敌人。

然后,我可以在冲击的正确位置显示血液效果。

public void TakeDamage(int damage, Vector2 pointHitten)
    {
        health -= damage;
        GameObject bloodEffect = Instantiate(takenDamageVFX, pointHitten, transform.rotation);
    }