我想在我的玩家的剑上创建一个对撞机,如果他攻击他会检测到并通过动画事件关闭/打开一个名为(Damage Point)的游戏对象,该对象附带一个脚本,会降低敌人的生命值。 但是在某处无法正确检测到。我试图添加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);
}
我再次检查了所有内容是否都在他的图层上,并且标签还可以,但这并不能解决我的问题。
就像我之前说过的那样,我使用相同的代码并且可以使用它,但是不幸的是,它不适用于我的玩家。我还在那里具有Activate和Deactivate DamagePoint功能,我的胸部发作动画的动画事件也调用了这些功能。
答案 0 :(得分:0)
好的,经过1小时的调试,我终于找到了解决方案:
它在MyTags类(所有字符串变量的帮助器类)中,错误是:
public static string ENEMY_TAG = "Enemey";
代替:
public static string ENEMY_TAG = "Enemy";