有没有办法让一个 Hitbox 忽略另一个?

Is there a way to make a hitbox ignore another one?

我正在创建一款基于《天际》和《荣耀战魂》战斗的多人第一人称中世纪格斗游戏,有 3 种不同的姿态。在其中,你可以从3种姿势进行攻击,如果对手没有保持相同的姿势,他就会进行攻击,否则他会招架并且攻击者会快速眩晕。 当 Sword 的 Hitbox 击中玩家自己的 Hitbox 时,问题就开始了,导致了不希望的结果。

所以我想知道有没有办法让玩家的剑无视与玩家自身的碰撞,让玩家无法攻击自己。

我也试过放方法:Physics.IgnoreCollision(collider, selfCollider);在 OnTriggerEnter() 函数、Start() 和 Update() 中,没有解决方案。

    private void OnTriggerEnter(Collider other)
{
    if (other.gameObject.tag == "Enemy" || other.gameObject.tag == "Player")
    {
        //instant enemy combat
        CombatManager enemy = other.gameObject.GetComponentInChildren<CombatManager>();
        Debug.Log(enemy.currentStance);
        //If enemy stance is not the same of the attacker
        if(enemy.currentStance != this.currentStance)
        {
            //enemy is damaged
            //Get enemy LifeManager and subtract its health
            enemy.GetComponentInParent<LifeManager>().currentHealth -= swordDamage;
        }
        else
        {
            anim.SetTrigger("Parried");
        }
    }

尝试:

if(other.transform.root != transform.root)
{
    // NOT self collision
}

这主要是检查两个对象是否属于同一层次结构。换句话说,如果他们有相同的 top-most GameObject 或 root.

显然,我对您的玩家头像是如何被操纵的做出了一些假设。也许您需要调整此解决方案以适合您的层次结构。