使力Vector3适应方向Vector3

时间:2019-01-25 16:21:55

标签: unity3d math vector normals

我有一个Vector3,它指示球员对球的输入力

Vector3(moveHorizontally, 0.0f, moveVertically);

我还有另一个Vector3,它指示平面的归一化方向

Vector3(-1.0f, 0.0f, 0.0f);

如何使用 AddForce()使球跟随对象的方向?在这种情况下,我认为如果我没有记错的话,球应该向左而不是向前。

编辑:我不需要将球朝某个方向向前移动。每次球触发一个平面时,该平面所面对的方向即成为球的方向。在这种游戏中,球在带有转弯的非线性轨道上滚动。

2 个答案:

答案 0 :(得分:1)

我不会使用AddForce,因为我想您想在碰撞时立即更改方向。

我认为您的意思是类似

private rigidBody;

private void Awake()
{
    rigidBody = GetComponent<RigidBody>();
}

private void OnCollisionEnter(Collision col)
{
    // Or however you want to check with what you are colliding
    if(col.gameObject.tag != "Plane") return;

    var hitPlane = col.gameObject;
    var invertedPlaneNormal = hitPlane.transform.forward.normalized * -1;

    var currentSpeed = rigidBody.velocity.magnitude;

    // Keep same velocity but change direction immediately
    rigidBody.velocity = invertedPlaneNormal * currentSpeed;
}

您也可以添加阻尼

[Range(0,1)]
public float dampFactor;

//...

rigidBody.velocity = invertedPlaneNormal * currentSpeed * (1 - dampFactor);

答案 1 :(得分:0)

我没有特定的代码,但是假设球上附着有刚体,并且路径和球都具有对撞机,则可以使用Unity碰撞事件来确定球的未来方向。 / p>

比方说,球上附着了一个脚本,当它碰撞时,它将在onCollisionEnter上触发一个事件,然后从那里可以得到一个与它相撞的平面的脚本组件,并按照正确的方向施加力。对碰撞的反应。

请注意,onCollisionEnter仅在对象进入碰撞时发生。