Я новичок в единстве, и я пытаюсь создать прыгающий мяч, так что я сделал много исследований о подпрыгивая realted физики и я нашел формулу:2D подпрыгивая формула не работает должным образом
Формула:
-2*(V dot N)*N + V
где V вектор скорости и N является нормаль поверхности, на которой мяч отскакивает
Вот мой сценарий:
using UnityEngine;
using System.Collections;
public class BallPhysics : MonoBehaviour {
void Start() {
rigidbody2D.velocity =new Vector2 (-1,-3);
}
// Update is called once per frame
void Update() {
}
void OnTriggerEnter2D(Collider2D col) {
if (col.gameObject.name == "Pong") {
tBounce();
}
}
void tBounce(){
RaycastHit2D hit = Physics2D.Raycast (new Vector2 (transform.position.x,transform.position.y), new Vector2(-1f,-1f));
Vector2 n = hit.normal;
Vector2 v = rigidbody2D.velocity;
Vector2 R = -2 * (Vector2.Dot (v, n)) * n + v;
rigidbody2D.velocity = R;
}
}
Я передаю мяч вектор скорости в функции запуска, я использую OnTriggerEnter2D для обработки столкновений и raycast2D, чтобы получить нормаль поверхности.
Проблема заключается в том, что сценарий не отражает вектор скорости, называемый R, я думаю, что проблема находится в нормальном векторе.
Например, V является Vector2 (-1, -1), поэтому в основном R должен быть (-1,1), но это не так. R представляет собой (3,1)!
Я успел сделать мяч, прыгающий по горизонтальной/вертикальной поверхности, изменив скорость шара, но это не сработает должным образом с угловыми углами, поэтому я использую эту формулу. Так в чем проблема?
Почему вы не используете материалы физики и не устанавливаете отскок на 1? – JRowan
Я не использую этот метод, потому что мяч будет в одном положении, и я не хочу, чтобы он был настолько реалистичным. – DeltaWeb
thats cool, мне просто интересно, что я посмотрел на этот вопрос, и я заинтересовался им, я не знаю, что вам сказать, я просто сказал, что использовал бы физический материал, удачи :) – JRowan