Изменить поплавок с помощью кнопки пользовательского интерфейса OnPointerDown - PullRequest
0 голосов
/ 31 марта 2020

Я довольно новичок в Unity, и в настоящее время я пытаюсь применить кнопки для управления скоростью моего персонажа.

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

 if (inGame)
    {
        //Movement
        if (isMoving)
        {
            movement = Input.GetAxis("Horizontal") * movementSpeed;  
            Vector2 velocity = rb.velocity;
            velocity.x = movement;
            rb.velocity = velocity;}}

Я пытаюсь изменить это на экранные кнопки


public void SetDirectionLeft()
{
    movingLeft = true;
    Debug.Log("LEFT:" + movingLeft.ToString());
}
public void SetDirectionNull()
{
    movingLeft = false;
    movingRight = false;
    Debug.Log("STILL");
}
public void SetDirectionRight()
{
    movingRight = true;
    Debug.Log("RIGHT:" + movingRight.ToString());
}

public void SetMovingTrue()
{
    if (!isMoving)
    { isMoving = true; }

    Debug.Log("MOVING:" + isMoving.ToString());
}

public void SetMovingFalse()
{
    if (isMoving)
    { isMoving = false; }
    Debug.Log("MOVING:" + isMoving.ToString());
}

void FixedUpdate()
{
    if (inGame)
    {
        //Movement
        if (isMoving)
        {
            if(movingLeft)
            {
                    movement = -movementSpeed;  //moves left on x axis -SPEED

            }
            else if (movingRight)
            {
                    movement = movementSpeed;   //moves right on x axis +SPEED
            }
            else
            {
                    movement = 0;               //NULL

            }
            Vector2 velocity = rb.velocity;
            velocity.x = movement;
            rb.velocity = velocity;
        }
    }

Я разделил геттеры и сеттеры, как вы можете видеть на изображении выше, и когда я нажимаю левой кнопкой я устанавливаю направление -1.0f, и если я нажимаю вправо, я вызываю метод для установки направления 1. Я также устанавливаю Moving в true при нажатии любой кнопки.

OnPointerDown, isMoving устанавливает TRUE OnPointerUp, isMoving устанавливает FALSE

теперь это работает. РЕДАКТИРОВАТЬ Я изменил SetDirection для использования bools и, как показано в следующем видео, isMoving успешно меняется на true и false. movingLeft и movingRight не меняются. Однако в журнале отладки вы можете видеть, что значения меняются, но не для игрока.

GYAZOVIDEO.mp4

Так что моя проблема в том, почему мои функции при вызове не меняют значение направления?


Вот 35 с лишним ошибок, которые я получаю в данный момент в отношении различных проблем. Мой генератор уровней появляется в бонусах, клонируя основное усиление, если два бонуса сталкиваются при появлении, я убиваю одного. По некоторым причинам это приводит к этим ошибкам, которые не влияют на мою текущую проблему. Мои клонированные исходные объекты имеют 2D коллайдеры, поэтому я не уверен, почему клонов нет. Снова новый для Unity, БОЛЬШАЯ ПРОГРАММА.


Мой проект будет более медленным, если вы попробуете его sh simmer.io/@ZakBrindle/burtle-jump

1 Ответ

0 голосов
/ 01 апреля 2020

Чтобы исправить мою проблему, я удалил кнопки и создал новые кнопки с нуля и создал новый скрипт PlayerMovement со следующим кодом. Я подключил это к плееру и снова установил кнопки для методов. Не уверен, почему я должен был сделать это, но это, похоже, исправило мою проблему. Спасибо

public void SetDirectionLeft()
{

    rb = GetComponent<Rigidbody2D>();
    rb.velocity = new Vector2(-movementSpeed, rb.velocity.y);
    Debug.Log("LEFT:" + rb.velocity.ToString());

}
public void SetDirectionNull()
{
    rb = GetComponent<Rigidbody2D>();
    rb.velocity = Vector2.zero;
    Debug.Log("STILL" + rb.velocity.ToString());
}
public void SetDirectionRight()
{

    rb = GetComponent<Rigidbody2D>();
    rb.velocity = new Vector2(movementSpeed, rb.velocity.y);
    Debug.Log("RIGHT:" + rb.velocity.ToString());

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