首页 > 解决方案 > OverlapBox 比我问他的要多

问题描述

我有一个角色,我在他的脸上创建了一个重叠框,我通过 Gizmo 绘制它,但由于某种原因,它甚至在对象进入 Gizmo 绘制的区域之前检测到它。如果我创建overlapSphere,那么一切正常

   private Vector3 overlapPos, overlapSize;
   private void Attack()
    {
        if(Input.GetKeyDown(KeyCode.Mouse1))
        {
            var cam = Vector3.Scale(transform.forward, new Vector3(1, 0, 1)).normalized;
            overlapPos = new Vector3(transform.position.x, transform.position.y + 1.2f, transform.position.z);
            overlapPos += cam*1.2f ;
            overlapSize = new Vector3(2.5f, 1.7f, 2f);
            Physics.SyncTransforms();
            var enemys = Physics.OverlapBox(overlapPos, overlapSize, transform.localRotation);
            foreach (Collider col in enemys)
                print(col.gameObject.name);
            //enemyGO.GetComponent<HealthComponent>().TakeDamage(10);
        }
    }

    void FixedUpdate()
    {
        Attack();
    }

    private void OnDrawGizmos()
    {
        Gizmos.color = Color.green;
        Gizmos.matrix = Matrix4x4.TRS(overlapPos,transform.localRotation, overlapSize);
        Gizmos.DrawWireCube(Vector3.zero, Vector3.one);
    }

标签: c#unity3d

解决方案


注意OverlapBox调用的第二个参数halfExtends

每个维度中盒子大小的一半

因此,您宁愿使用重叠框的一半大小

Physics.OverlapBox(overlapPos, overlapSize * 0.5f, transform.localRotation);

或者必须更改 Gizmo 以显示更正的双倍大小

Gizmos.DrawWireCube(Vector3.zero, Vector3.one * 2);

推荐阅读