2012-10-07 49 views
2

我正在嘗試構建一個破磚的遊戲,並且我想根據球擊中槳的位置瞄準球。例如,如果球碰撞槳的右邊緣,它應該向右(和向上)移動。 假設球拍有一個盒子(或膠囊)對撞球,球有一個球形對撞球,我該怎麼做? 感謝您的幫助!統一 - 如何獲得觸發碰撞角度進入?

而且我想獲得墊的速度。下面的代碼返回0,任何想法爲什麼?

function OnTriggerEnter(other:Collider) 
{ 
    if(other.rigidbody){ 
    V_pad=other.rigidbody.velocity; 
    //Here it returns (0,0,0) , also tried other.attachedRigidbody 
    }  

    if(other.name=="Pad"){ 
    rigidbody.velocity = 
Vector3(rigidbody.velocity.x, Mathf.Abs(rigidbody.velocity.y + V_pad),0); 
//this part executes but with V_pad.y=0 
    } 
} 

回答

0

嘗試使用Vector3D類找出這個球的方向,則依賴於它應該打什麼表面改變向量的分量。使用Unity Vector3D API獲得更多幫助。祝你好運。

0

或者也可以使用球對撞機。您可以將碰撞器的中心稍稍移動到槳板後面,並按比例調整撞擊器以適應您的需求。

2

當兩個碰撞體在Unity中接觸時,將在您添加到同一個GameObject的任何組件中調用OnCollisionEnter方法。如果使用Collision參數定義該方法,則會得到包含兩個碰撞器之間的聯繫點的信息。您可以使用這些信息來確定您球的接觸點。

請注意,從球的角度來看,這將始終是球體「底部」的一個點。你也可以考慮球的速度角度。

編輯:另一種方法(考慮到你的coment)可能會使用Collider.ClosestPointOnBounds。如果使用類似bat.ClosestPointOnBounds(ball)的東西,則會得到最靠近球的球棒上的點的Vector3--對於球形球來說,這將成爲碰撞點。

+0

謝謝,但我在OnTriggerEnter(c:collider)處理碰撞,我無法獲得c.contacts [0],有什麼辦法可以將碰撞轉換爲碰撞? – void

+0

看到我的編輯替代:-) –

+0

col.ClosestPointOnBounds(transform.position)爲我做了詭計,謝謝! :) – LiranNis