我正在尝试让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”。
答案 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);
}