Плавное касание движения по оси только при подъеме? - PullRequest
0 голосов
/ 27 декабря 2018

Я новичок в Unity и c #.Я создаю проект для мобильных телефонов.Я хочу изменить положение оси реактивной струи, касаясь влево и вправо, когда струя поднимается

if (Input.touchCount > 0)
      {
           Touch touch = Input.GetTouch(0);

                 switch (touch.phase)
                 {
                    case TouchPhase.Began:
          if (Input.touchCount > 0 && Input.GetTouch(0).phase == TouchPhase.Began)
            {
                    //side to side movement
                     if (touch.position.x < Screen.width / 2)
                        rb.velocity = new Vector2(- 2f, transform.position.y);
                     if (touch.position.x > Screen.width / 2)
                        rb.velocity = new Vector2(+ 2f, transform.position.y);
                }
                   break;
                  case TouchPhase.Ended:
                      rb.velocity = new Vector2(0f, 0f);
                      break;
          }

У джета есть Addforce, поэтому струя замедляется, когда я касаюсь левой и правой сторон.

Струйный код:

switch (JetOn)
        {
            case true:
             StartCoroutine(BurnFuel());
             rb.AddForce(new Vector2(0f, JumpForce), ForceMode2D.Force);
                break;
            case false:
                rb.AddForce(new Vector2(0f, 0f), ForceMode2D.Force);
                break;
       }

1 Ответ

0 голосов
/ 27 декабря 2018

Не следует смешивать AddForce и назначать вручную velocity.Присвоение velocity напрямую заставляет AddForce действовать непредсказуемо и часто приводит к тому, что оно никогда не работает.

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

Вот пример вашего кода с присвоением только velocity:

if (Input.touchCount > 0)
{
    Touch touch = Input.GetTouch(0);

    switch (touch.phase)
    {
        case TouchPhase.Began:
            if (Input.touchCount > 0 && Input.GetTouch(0).phase == TouchPhase.Began)
            {
                //side to side movement
                if (touch.position.x < Screen.width / 2)
                    // I think you mean rb.velocity.y here instead of transform.position.y 
                    rb.velocity = new Vector2(- 2f, rb.velocity.y);
                if (touch.position.x > Screen.width / 2)
                    rb.velocity = new Vector2(+ 2f, rb.velocity.y);
            }
            break;
        case TouchPhase.Ended:
            rb.velocity = new Vector2(0f, 0f);
            break;
    }
}

...

switch (JetOn)
{
    case true:
        StartCoroutine(BurnFuel());
        rb.velocity += new Vector2(0f, JumpForce) / rb.mass;
        break;
    case false:
        // unnecessary but included for example purposes
        // rb.velocity += new Vector2(0f, 0f) / rb.mass;
        break;
}
...