我想在我的玩家的剑上创建一个对撞机,如果他攻击,他会检测到,并通过一个动画事件关闭/打开一个名为(损伤点)的游戏对象,它是一个附加的脚本,将减去敌人的生命。但在某些地方它没有正确检测到。我试图添加OnDrawGizmos函数来查看我的球体对撞机,但即使在将其变大之后,它也无法检测到。

关于我的问题最奇怪的事情是,我对我的怪物箱子和我的幻想玩家使用了相同的代码,但是对于箱子它是有效的,但是对于玩家它不是。
我创建了一个名为PlayerDamage的类,它附加在剑尖上的一个空游戏对象上。
{
public class PlayerDamage : MonoBehaviour
public int damageAmount = 2;
public LayerMask enemyLayer;
void Update()
{
Collider[] hits = Physics.OverlapSphere(transform.position, 1.7f, enemyLayer);
if (hits.Length > 0)
{
if (hits[0].gameObject.tag == MyTags.ENEMY_TAG)
{
print("COLLIDED WITH ENEMY");
}
}
}
private void OnDrawGizmos()
{
Gizmos.DrawWireSphere(transform.position, 1.7f);
}

在另一个直接附加到播放器的名为PlayerScript的脚本中,我有一个名为Attack的函数:
void Attack()
{
if (Input.GetKeyDown(KeyCode.K))
{
if (!anim.GetCurrentAnimatorStateInfo(0).IsName(MyTags.ATTACK_ANIMATION) || !anim.GetCurrentAnimatorStateInfo(0).IsName(MyTags.RUN_ATTACK_ANIMATION))
{
anim.SetTrigger(MyTags.ATTACK_TRIGGER);
}
}
}

在PlayerScript类中还有两个名为ActivateDamagePoint和DeactivateDamagePoint的函数,这两个函数被分配给攻击动画的动画事件。
void ActivateDamagePoint()
{
damagePoint.SetActive(true);
}
void DeactivateDamagePoint()
{
damagePoint.SetActive(false);
}

我仔细检查了所有东西都在他的层上,标签也没问题,但这并没有解决我的问题。


就像我之前说过的那样,我使用了相同的代码,它是有效的,但不幸的是,它不适用于我的球员。我还有激活和停用DamagePoint的函数,这些函数也被我的胸部攻击动画的动画事件调用。
发布于 2020-07-19 20:36:04
好的,经过一个小时的调试,我终于找到了解决方案:
在MyTags类(所有字符串变量的帮助器类)中,错误是:
public static string ENEMY_TAG = "Enemey";而不是:
public static string ENEMY_TAG = "Enemy"; https://stackoverflow.com/questions/62979773
复制相似问题