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
    }
}
4

4 回答 4

2

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

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

编辑:另一种方法(根据您的评论)可能是使用Collider.ClosestPointOnBounds. 如果你使用类似的东西bat.ClosestPointOnBounds(ball),你会得到Vector3最接近球的球棒上的点 - 对于球形球来说,这将是碰撞点。

于 2012-10-08T08:36:24.320 回答
0

或者也为桨使用球体对撞机。您可以将对撞机的中心移动到桨后面一点,然后缩放对撞机以满足您的需要。

于 2012-10-08T08:29:48.830 回答
0

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

于 2012-10-08T01:46:05.170 回答
0

您需要取消选中对撞机中的 Is Trigger 设置,并使用 OnCollision 而不是 OnTrigger。在 OnCollision 中,您可以使用类似的方法来计算输出方向。

var direction = Vector3.Reflect(lastFrameVelocity.normalized, collision.contacts[0].normal);

于 2022-02-13T18:02:42.890 回答