当前位置: 首页 > 知识库问答 >
问题:

物理重叠层不检测碰撞

管梓
2023-03-14

我想在我的玩家剑上创建一个碰撞体,如果他攻击,他会检测到,并通过动画事件关闭/打开一个名为(伤害点)的游戏对象,这是一个附加的脚本,可以减去敌人的生命值。但是在某个地方它不能正确检测到。我试图添加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的脚本中,它直接连接到播放器,我有一个名为主攻击的函数:

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);
    }

我仔细检查了他的图层上的所有内容,以及标签是否正常,但这并没有解决我的问题。

就像我之前说的,对于箱子,我使用了相同的代码,它有效,但不幸的是,它不适用于我的播放器。我也有激活和关闭伤害点的功能,这些也是由我的胸部攻击动画的动画事件调用的。

共有1个答案

邓开济
2023-03-14

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

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

public static string ENEMY_TAG = "Enemey";

而不是:

public static string ENEMY_TAG = "Enemy"; 
 类似资料:
  • 我有4个物理体,它们都很好地检测到碰撞。然而,有两个物理体不会检测到它们何时相互碰撞。不过,它们会检测到它们何时与其他物理体碰撞。我有所有这些物理体的联系人测试位掩码,所以我不明白为什么会有问题。以下是一些代码:这是我设置物理体的地方: 以下是我用于设置玩家物理体(其中一个问题物理体)的代码: 以下是检测碰撞的函数: 下面是我用来设置蓝球的代码。这是另一个有问题的物理体: 这里的任何想法都会有所帮

  • 我使用libgdx为一个项目制作了一个2D游戏,我的碰撞检测技术基于。在矩形中重叠方法,效果良好。我想了解其背后的实现,如果我要将其与intersects方法并行,我知道它是如何工作的。但这是唯一的吗?我读到,在离散碰撞检测方法中,不仅需要计算实体是否发生碰撞,还需要计算它们发生碰撞的“程度”(碰撞深度),并使用轴对齐的边界盒算法将实体推回。首先,我对矩形重叠技术是否与libgdx中的AAAB相同

  • 我已经在这里呆了2-3周了,我仍然无法进行适当的碰撞检测。我用矩形创建了一个迷宫。我希望我的对象(在矩形中)每当我的对象与任何墙壁碰撞时停止,并能够移动到任何地方(或滑下墙壁)。我的墙壁(矩形)具有负坐标,如下所示: 我目前正在使用SO中发现的重叠方法。以下是我的CollisionManager类中的方法: 我有一个功能可以保存对象所做的所有位置移动。因此,当发生碰撞时,对象会恢复到最后一次移动之

  • 好的,所以我对精灵工具包相当陌生,我在Swift中工作。我有2个精灵节点,和。有一个物理体,这就是我设置它的方式: 目前没有物理实体: 我需要知道如何在这些对象之间进行碰撞检测(即,如果救世主和小鸡接触,则执行此操作),最好不要使成为物理体。 当我把鸡做成一个物理物体时,它突然变得不稳定,并移动其他物体。 如果没有物理学就无法进行碰撞检测,我怎样才能使成为不受任何影响的物理体,并且直接穿过其他物理

  • 我目前正在开发一款2D无休止跑者,用Swift3编写,并使用Spritekit。 简短的问题: 有没有办法只检查我的角色的矩形物理体右侧的碰撞? 更多信息: 角色运行的平台由拼图块组成,用户在游戏进行时在此基础上进行构建。角色从左到右,相对于背景(从右到左)。 我希望角色在与右侧的棋子相撞时自动跳跃。然而,玩家放在他右边的任何棋子(与角色的Y值相同)都与他下面的棋子属于同一等级。 因此,只要游戏检

  • 嗨,伙计们, 我正在使用libgdx为android开发一个游戏。我完全陷入了探测两个物体碰撞的部分。我有一个我通过下面的函数创建的播放器 和我用玩家相同的功能创建的敌人,我只更改file_path和fixture_name。file_path指向我用box2d编辑器创建的. json文件(站点:http://www.aurelienribon.com/blog/projects/physics-