Как переместить объект на определенную сумму c ТОЛЬКО при нажатии кнопки? - PullRequest
0 голосов
/ 24 февраля 2020

Я просмотрел десятки учебных пособий и до сих пор не могу понять это.

У меня есть кнопки вверх, вниз, влево и вправо, которые управляют движением трехмерного объекта (в моем случае , пушка)

Когда игрок нажимает кнопки со стрелками влево / вправо, объект будет перемещаться на одну единицу вдоль оси + -X.

Я получил это на работу, однако объекты двигаться в одном направлении навсегда и не останавливается, когда кнопка не нажата! Как заставить объект двигаться только один раз при нажатии кнопки?

public class ClickMove : MonoBehaviour
{

    public GameObject cannon;
    public bool pressed = false;



public void HitButtonLeft()
      {
          if (Input.GetMouseButtonDown(0))
          {
              pressed = true;
                  cannon.GetComponent<Rigidbody>().AddForce(-1000.0f, 0, 0);

          }
      }
      public void HitButtonRight()
      {
          cannon.GetComponent<Rigidbody>().AddForce(1000.0f, 0, 0);

      }
}

Я знаю, что сейчас у меня 1000.0f, но 1 был слишком медленным, и вы едва могли видеть движение. Я также попытался добавить «GetMouseButtonDown (0)», чтобы не запускать l oop, если не активен левый щелчок? (Но я не смог понять, как правильно это реализовать)

Я также нашел этот код повсюду в Интернете. но для своей жизни я не могу понять, как / где его использовать:

 void update();
        {
            transform.position = new Vector3(3 * time.deltatime, 0, 0);
        }

Каков наилучший способ сделать это? У меня нет мышления программистов, и я пытаюсь заставить его работать несколько дней :( Мне просто нужен кто-то, кто объяснит, как использовать перевод, если это лучший вариант. Я перепробовал абсолютно все и не смог его получить на работу! Я понятия не имею, что я делаю неправильно, и все учебные пособия не являются дружественными к n00b.

Кроме того, я не могу использовать "void Update", поскольку это не так присваивается кнопке пользовательского интерфейса, поэтому я даже не знаю, где go отсюда ...

Спасибо

Обновление: я также попробовал следующее (супер обратный способ сделать это ) но не смог заставить его работать. Кто-то, пожалуйста, помогите мне разобраться!

    {
        while (count < 2)        {

            cannon.GetComponent<Rigidbody>().AddForce(-1000.0f, 0, 0);
            count += 1;
        }

        while (count2 < 2)
        {
            cannon.GetComponent<Rigidbody>().AddForce(1000.0f, 0, 0);
            count2 += 1;
            count = 0;
        }
    }```

Ответы [ 2 ]

0 голосов
/ 24 февраля 2020

чертеж в 2D-пространстве добавляемых векторов = изменение положения в Unity. введите описание изображения здесь

Код:

public class HorizontalMovement : MonoBehaviour
{
    public int speed;

    // Use this for initialization
    private void Start()
    {
        speed = 3;
    }

    // Update is called once per frame
    private void Update()
    {
        if (Input.GetKeyDown(KeyCode.LeftArrow))
        {
            transform.Translate((Vector3.left) * Time.deltaTime * 60);
        }

        if (Input.GetKey(KeyCode.RightArrow))
        {
            transform.Translate((transform.position + new Vector3(1f, 0f, 0f)) *  Time.deltaTime);
        }

        if (Input.GetKeyDown(KeyCode.UpArrow))
        {
            transform.Translate(Vector3.up * speed * Time.deltaTime);
        }
    }
}
0 голосов
/ 24 февраля 2020

Демонстрация движения объекта: свойство позиции выражается в векторах Vector3 = (x, y, z), чтобы переместить объект, вам нужно добавить два вектора вместе! Предположим, что объект находится в начале координат, затем transform.position = Vector3 (0, 0, 0) с позицией x = x, позицией y = y, позицией z = z для перемещения объекта:

1 - используйте :

transform.position = (transform.position + new vector3(1, 0, 0));

это мгновенно перемещает объект, телепортирует его на 1 единицу вправо (ось X)

2 - используйте:

, чтобы переместить его на 1 единицу вправо (ось X):

transform.Translate(transform.position + new Vector3(1, 0, 0));

это плавно перемещает объект в новую позицию. чтобы переместить его вверх (ось z): transform.position + new Vector3 (0, 0, 1). Встраивать в C# для Unity - это сокращение: transform.position.right [.left, .up, .down] это идентично transform.position + new Vector3 (1, 0, 0) [+ new Vector3 ( -1, 0, 0) et c ...]

Обновление обновляет 60 кадров в секунду +/- вызывается GetKeyDown и для его перемещения 1 полная единица (1 м) умножается на 60 Getkey вызывается каждый раз, когда sh, потому что, пока кнопка нажата, это правда, поэтому * 60 не нужно, вы можете * увеличить скорость перемещения объекта с определенной скоростью = * м / с c

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...