C# 向球体添加方向而不添加力

C# 向球体添加方向而不添加力,c#,unity3d,C#,Unity3d,我正在unity5中创建一个破砖游戏 我的代码是: void OnCollisionEnter(Collision collision) { foreach (ContactPoint contact in collision.contacts) { if(contact.thisCollider == collider1) { float cp = contact.point.x - transform.position

我正在unity5中创建一个破砖游戏

我的代码是:

void OnCollisionEnter(Collision collision)
{
    foreach (ContactPoint contact in collision.contacts) 
    {
        if(contact.thisCollider == collider1)
        {
            float cp = contact.point.x - transform.position.x;

            contact.otherCollider.attachedRigidbody.AddForce(reflectionForce * cp, 0.0f, 0.0f);
        }
    }
}
所以基本上我的球拍是根据接触点到球心的距离来增加球的力量。距离越远,球的力量和方向就越大

问题是,如果球一直在球拍的一侧被击中,那么它的速度会随着每次击中球拍而增加,最终不可能击中


所以,有没有任何方法可以在不增加球的力的情况下为球添加方向。

这里有一个代码,可以在每次碰撞后添加恒定速度

void OnCollisionEnter(Collision collision)
{
foreach (ContactPoint contact in collision.contacts) 
{
    if(contact.thisCollider == collider1)
    {
        float cp = contact.point.x - transform.position.x;
        contact.otherCollider.attachedRigidbody.AddForce(reflectionForce * cp, 0.0f, 0.0f);
        float maxSpeed = 2.0f; //for example
        Vector3 vel = contact.otherCollider.attachRigidbody.velocity;
        contact.otherCollider.attachRigidbody.velocity = Vector3.ClampMagnitude(vel,maxSpeed);
    }
}

}

是的,您可以直接更改球的速度。然而!考虑使用桨和球之间的速度差来影响力,但是速度应该保持相同,只有方向应该改变,如果使用第二个代码的<代码>加法器()/代码>:<代码> FraceMod。检查我不认为他们会工作,因为无论我选择什么模式,力都会被添加到某个地方。应该添加的只是方向。我试过你们的代码,但它只在x轴上给出速度,所以球会平行于桨移动。我也给它y轴上的速度,和球在轴上的速度相同。代码:contact.otherCollider.attachedRigidbody.velocity=新矢量3(reflectionForce*cp,contact.otherCollider.attachedRigidbody.velocity.y,0.0f);你们能解释一下碰撞后你们想做什么吗?我想我的球应该以相同的速度移动,但它的方向应该根据和桨叶中心的距离而改变。好的,在增加力后,你们必须钳制速度的矢量大小。速度的大小代表刚体的速度。我更新了你可以看到的答案。谢谢。答案是肯定的,方向是可变的,但速度是恒定的。我还想了一些东西,可以保持速度不变,但也可以保持方向不变。代码:float cp=contact.point.x-transform.position.x;浮点数=0;如果(cp>0)点=1f;如果(cp<0)点=-1f;contact.otherCollider.attachedRigidbody.velocity=新矢量3(reflectionForce*点,contact.otherCollider.attachedRigidbody.velocity.y,0.0f);但你的答案正是我想要的。我将把它标记为答案。再次感谢