我有一个Vector3,它指示球员对球的输入力
Vector3(moveHorizontally, 0.0f, moveVertically);
我还有另一个Vector3,它指示平面的归一化方向
Vector3(-1.0f, 0.0f, 0.0f);
如何使用 AddForce()使球跟随对象的方向?在这种情况下,我认为如果我没有记错的话,球应该向左而不是向前。
编辑:我不需要将球朝某个方向向前移动。每次球触发一个平面时,该平面所面对的方向即成为球的方向。在这种游戏中,球在带有转弯的非线性轨道上滚动。
答案 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仅在对象进入碰撞时发生。