AddForce Impulse с неверным выводом unity3D - PullRequest
0 голосов
/ 02 февраля 2019

По сути, я хочу, чтобы объект прыгал, когда он сидит на земле.У меня есть 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;
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...