团结:将球朝桌扇的前进方向移动

时间:2018-11-06 06:31:50

标签: c# unity3d virtual-reality

我正在创建一个VR应用程序,其中有一个桌扇和一个球,上面附着有刚体和对撞机。当球与风扇碰撞时,我希望球成半圆飞行。通过在代码中编写以下两行来完成此操作:

Vector3 dir = Quaternion.AngleAxis(30, Vector3.forward) * Vector3.right;
rigidbody.AddForce(dir*hoverForce, ForceMode.Impulse);

这很好,但是球只向一个方向飞行。有人可以帮我了解如何找到风扇面对的位置并使球朝着风扇旋转的正向飞行吗?

如果我在Addforce中对风扇的变换使用正向,则球将以笔直的方向飞行,而不是以一定角度飞行。

2 个答案:

答案 0 :(得分:0)

Vector3 dir = Quaternion.AngleAxis(30, Vector3.forward) * Vector3.right;

方向是恒定矢量,这就是为什么其飞行总是沿相同方向。 您必须在此计算中包括变换方向,才能根据变换来计算方向

可能是

Vector3 dir = Quaternion.AngleAxis(30, Vector3.forward) * rigidbody.transform.right;

答案 1 :(得分:0)

为了准确地沿风扇指向的方向发射球,您需要覆盖任何球当前的速度。为此,您只需分配给球的Rigidbody.velocity即可。否则,球仍将保持任何左右速度,并且可能会稍微倾斜一个角度

您可以使用fan.transform.forward来获取风扇面对的方向,如果您要立即发送沿该精确方向飞行的球,则可以直接使用该方向时间设置速度,而无论速度有多快d喜欢它:

Rigidbody ballRB;     // given
GameObject fan;       // given
float fanLaunchSpeed; // given
ballRB.velocity =     fanLaunchSpeed * fan.transform.forward;

如果您还想增加一定程度的仰角,则可以将该方向乘以Quaternion.AngleAxis(angle, fan.transform.right)

Rigidbody ballRB;     // given
GameObject fan;       // given
float fanLaunchSpeed; // given
float angle;          // given, measured in degrees
Vector3 launchDirection = Quaternion.AngleAxis(angle, fan.transform.right) 
                          * fan.transform.forward;
ballRB.velocity = fanLaunchSpeed * launchDirection;