2016-03-05 20 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中它是一個方向。知道這一點,我能夠修復衝頭的軌跡,就像之前從一個朋克中衝出來的方向完全一樣。

相關問題