По сути, я хочу, чтобы объект прыгал, когда он сидит на земле.У меня есть 3 сценария, 1 для инициализации значений, 2 для метода FixedUpdate и 3 для сценария коллайдера.Я хочу, чтобы мой объект прыгал на 1/4 высоты экрана, затем на 1/2, 3/4. И так далее.Но это не похоже на работу.Я использовал формулу в документации Unity: импульс = масса х расстояние / время.В первый раз мой объект прыгнул почти на 1/4 высоты экрана, во второй раз, я думаю, во второй половине экрана.Но третий и четвертый просто зашли слишком высоко, чтобы объект просто исчез с экрана.Мне также известны координаты XY моего объекта шара, составляющие половину его высоты и ширины соответственно.
//script #1
public static bool AllowJump = false;
float ScreenHeight = (float)(Camera.main.orthographicSize * 2.0);
public static int jumpCount = 0;
GameObject ball = new GameObject();
ball.AddComponent<RigidBody2D>();
ball.GetComponent<RigidBody2D>().mass = 1f;
ball.GetComponent<RigidBody2D>().gravityScale = 1f;
//more initial values here...my ball is set XY coordinates (0, (1/2 of
//screenheight - half of ball's height) * -1
//impulse = mass * distance / time
public static float ballVelocity = ball.GetComponent<RigidBody2D>().mass
* (ScreenHeight * .25f) / 1f;
//distance is 1/4 of the screen, time 1 sec
//script #2
void FixedUpdate()
{
if(AllowJump)
{
ball.GetComponent<RigidBody2D>().AddForce(ball.transform.up *
ballVelocity * jumpCount, ForceMode2D.Impulse);
AllowJump = false;
}
}
//sript #3 collision script that is attached to my GameObject ball
void OnCollisionStay2D(Collision2D c)
{
//if the ball is sitting on the ground
jumpCount++;
AllowJump = true;
}