物理OverlapSphere无法正确响应

我现在还不太了解Physics.OverlapSphere的工作原理。如下代码所示,如​​果玩家进入了重叠球,那么它应该返回true,但是当玩家进入该球时,我会不断出错。 这是调用方法

的脚本
void Update()
   {
       float distance = Vector3.Distance(target.position,transform.position);
       if (distance <= lookRadius)
       {
           agent.SetDestination(target.position);
           if (distance <= agent.stoppingDistance)
           {
               CharacterStats targetStats = target.getcomponent<CharacterStats>();
               Debug.Log(enemy.onPlayerEnter());
               if (targetStats != null && enemy.onPlayerEnter())
               {//if player exist and the player enters the attack area
                   Combat.Attack(targetStats);
               }

               Facetarget();
           }
       }
       animator.setfloat("speed",agent.velocity.magnitude); 

这是方法的脚本:

public bool onPlayerEnter()
   {
       Collider[] hitColliders = Physics.OverlapSphere(interactionTransform.transform.localPosition,radius);
       //Debug.Log(interactionTransform.transform.localPosition);
       for(int i = 0; i < hitColliders.Length; i++)
       {
           if(LayerMask.LayerToName(hitColliders[i].gameObject.layer) == "Player")
           {
               Debug.Log("Player enter");
               return true;
           }
       }
       return false;
   }

//visualize the overlapsphere
private void OnDrawGizmosSelected()
   {
       if (interactionTransform == null) interactionTransform = transform;
       Gizmos.color = Color.cyan;
       Gizmos.DrawWireSphere(interactionTransform.position,radius);
   }

collider with monster [与玩家碰撞[] [1]] [2]

https://i.stack.imgur.com/8Fgh0.png https://i.stack.imgur.com/jnubp.png

由于未知原因,我发现重叠球在地图中的特定位置起作用,但其余位置根本不起作用。我认为这可能是Unity中的错误。

weird position

iCMS 回答:物理OverlapSphere无法正确响应

  1. 您的球体Gizmo和实际球体是不同的:对于绘制Gizmo,您可以使用transform.position,但是对于重叠球体-transform.transform.localPosition(无需像transform.transform那样加倍,并且position和localPosition可以是非常不一样)。我认为,这就是答案。

  2. 很容易与LayerMask混淆,这是一种很好的方法,但是要进行测试,最好使用tag,gameObject.InstanceID甚至gameObject.name。但总体而言,它似乎较小,看起来您可以正确处理图层。

  3. 请确保您的agent.StoppingDistance设置得不太小

  4. 像在获取targetStats一样,每帧都使用GetComponent是一种不好的做法。

本文链接:https://www.f2er.com/2218727.html

大家都在问