Unity - 如何在触发器输入时获得碰撞角度?

时间:2012-10-07 20:14:13

标签: unity3d collision angle

我正在尝试建立一个破砖机游戏,我想根据球击中球拍的位置来控制球。 例如,如果球击中桨的右边缘,它应该向右(和向上)。 假设桨有一个盒子(或胶囊)对撞机,并且球有一个球体对撞机,我该怎么办呢? 谢谢你的帮助!

我也希望得到垫的速度。下面的代码返回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
    }
}

3 个答案:

答案 0 :(得分:2)

当两个碰撞器在Unity中接触时,OnCollisionEnter方法将在您添加到同一GameObject的任何组件中调用。如果使用Collision参数定义该方法,您将获得包含两个碰撞器之间的接触点的信息。您可以使用此信息来计算您的球触及的位置。

请注意,从球的角度来看,这将始终是球体“底部”的一个点。您可能还需要考虑球速度的角度。

编辑:另一种方法(鉴于您的评价)可能是使用Collider.ClosestPointOnBounds。如果你使用像bat.ClosestPointOnBounds(ball)这样的东西,你将得到最接近球的击球点上的Vector3 - 球形球将成为碰撞点。

答案 1 :(得分:0)

尝试使用Vector3D类来查找球的方向,然后根据它应该击中的表面来更改矢量的该组件。使用Unity Vector3D API获取更多帮助。祝你好运。

答案 2 :(得分:0)

或者也可以使用球形对撞机作为球拍。您可以将对撞机的中心稍微移动到桨叶后面并缩放对撞机以满足您的需要。