Единство: переместить мяч в направлении движения стола - PullRequest
0 голосов
/ 06 ноября 2018

Я создаю приложение виртуальной реальности, в котором у меня есть настольный вентилятор и шар с твердыми телами и прикрепленными к ним коллайдерами. Я хочу, чтобы мяч летел полукругом, когда он сталкивается с вентилятором. Я сделал это, написав следующие 2 строки в моем коде:

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

Это отлично работает, но мяч летит только в одном направлении. Может ли кто-нибудь помочь мне понять, как найти, куда направлен вентилятор, и заставить шар лететь вперед в направлении вращения вентилятора?

Если я использую прямое направление для преобразования вентилятора в Addforce, то шар летит в прямом направлении, а не под углом.

Ответы [ 2 ]

0 голосов
/ 06 ноября 2018

Чтобы запустить мяч точно в направлении, указанном вентилятором, вам нужно перезаписать любую текущую скорость, которая есть у шара. Для этого вы можете просто присвоить мячу Rigidbody.velocity. В противном случае мяч все равно будет поддерживать любую лево-правую скорость, и он может начать движение под углом

Вы можете узнать направление вращения вентилятора с помощью fan.transform.forward, и если вы хотите немедленно отправить шар, летящий в этом точном направлении, то вы можете просто установить скорость непосредственно, используя это время, как бы быстро вы не хотели это идти:

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;
0 голосов
/ 06 ноября 2018
Vector3 dir = Quaternion.AngleAxis(30, Vector3.forward) * Vector3.right;

направление - постоянный вектор, поэтому он всегда летит в одном направлении. Вы должны включить направления преобразования в этот расчет, чтобы вычислить направление в соответствии с преобразованием

может быть

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