【问题标题】:Physics OverlapSphere does not detect CollisionPhysics OverlapSphere 未检测到碰撞
【发布时间】:2020-07-19 11:40:07
【问题描述】:

我想在我的玩家剑上创建一个对撞机,如果他攻击他会检测到,并通过动画事件关闭/打开一个名为 (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);
    }

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

就像我之前所说的胸部,我使用相同的代码并且它可以工作,但不幸的是它不适用于我的播放器。我还有激活和停用 DamagePoint 函数,这些函数也被我的胸部攻击动画的动画事件调用。

【问题讨论】:

  • 所以检查你的玩家什么时候“击中”它首先返回的东西,它可能是当它击中一个敌人时它没有击中你认为它首先击中的东西。你可能需要检查所有的命中并查看如果敌人在其中
  • 我做到了,但事实并非如此,经过一小时的调试,我终于找到了解决方案。我的助手类中出现拼写错误,而不是公共静态字符串 ENEMY_TAG = "Enemy" 我将它拼写为 "Enemy";。所以这就是问题所在,知道一切正常

标签: unity3d game-physics physics collision


【解决方案1】:

好的,经过1小时的调试,我终于找到了解决方案:

它在 MyTags 类(所有字符串变量的辅助类)中,错误是:

public static string ENEMY_TAG = "Enemey";

代替:

public static string ENEMY_TAG = "Enemy"; 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-15
    • 1970-01-01
    • 2017-01-07
    • 2015-03-27
    • 2015-03-07
    • 2019-07-16
    • 1970-01-01
    相关资源
    最近更新 更多