2016-03-05 55 views
0

我有一个正在制作的格斗游戏,而且我现在被RayCastAll卡住了,我不确定是什么原因导致了问题。 我有一个名为“朋克”的预制,您可以在其中选择另一个gameObject作为对手。在名为“punch”的动画的第二帧中(您可以在下面看到),我运行一个名为“PunchHit”的函数来表示一拳可能落在对手身上的确切时刻。它如下:RaycastAll来自预制件不会从另一个预制件接收对撞机

void PunchHit(){ 


     var xPos = transform.position.x; 
     var yPos = transform.position.y; 

     // This line renders fine, no matter the gameObjects' facing direction, so it is definitely striking in the right direction 
     Debug.DrawLine(Pos1,Pos2, Color.white, 1, false); 
     RaycastHit2D[] hits = Physics2D.RaycastAll(Pos1, Pos2); 

     foreach(RaycastHit2D hit in hits){ 
      if (hit.collider != null){ 
       if (hit.collider.gameObject == opponent) { 
        if(hit.collider.gameObject.tag == "Fighter"){ 

         var enemy = hit.collider.gameObject; 
         Debug.Log("I am " + gameObject.name + " and I hit "+hit.collider.gameObject.name); 
         enemy.GetComponent<Animator>().Play("smacked", -1, 0f); 
         enemy.GetComponent<Rigidbody2D>().AddForce(new Vector2(1500 * direction, 2500)); 

         AudioSource audio = gameObject.GetComponent<AudioSource>(); 
         audio.Play(); 
        } 
       } 
      } 
      else{ 
      } 
     } 
    } 

由于一些奇怪的原因,只有其中一个小块是可罢工的。如果第二个朋克增加他与第一个的距离,他甚至可以击中第一个,而不会击中他,这让我认为朋克记录了从本身引人注目的射线广播打击另一个朋克。对于所有的意图和目的,然而,第二个朋克可能不是第一个存在的,它没有任何光线注册它。 在我的physics2d设置中,我创建了2个图层,称为玩家1和玩家2,甚至用该面具施放它什么也不做。我是否错过了一些明显的东西,或者是引擎刚刚出现问题?

Here you can see the problem in action

+0

您能否包含计算/设置'Pos1'和'Pos2'的代码?目前,您似乎没有包含所有相关的代码。 – Serlite

+0

对不起,我已经找到了解决方案,我现在就发布它 –

回答

0

解决了!我没有意识到有一个名为Debug.DrawRay的函数。实质上,我没有意识到光线和线条的坐标不同。我为测试目的绘制的线条在本地空间中有一个特定点,因为它是第二个参数,在drawray中它是一个方向。知道这一点,我能够修复冲头的轨迹,就像之前从一个朋克中冲出来的方向完全一样。