Четверг, 21 Ноября 2024, 19:44

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Простое управление кнопкой на телефоне
LissandraДата: Вторник, 14 Января 2020, 21:58 | Сообщение # 1
был не раз
Сейчас нет на сайте
Нужна помощь в решении задачки. Я совсем зеленая в программировании поэтому не ругайте за незнания элементарных вещей!
В общем у меня есть управление с клавиатуры, но надо сделать что бы можно было управлять на телефоне нажимая на кнопку. Именно кнопку которая работает при зажатом состоянии. Тоесть зажала - летит, отпустила - падает.
Очень Важно что бы код был прост и понятен совсем-совсем начинающему (тоесть мне) что бы я могла его дополнять позже. То что находила в интернете мне не подходит. Готовые ассеты из ассетстора тоже не то что надо. Вот мой код.
Код
public class PlayerControl : MonoBehaviour
{
    public float flyPower = 100f;

    Rigidbody rigidBody;

    void Start()
    {
        rigidBody = GetComponent<Rigidbody>();
    }

    void Update()
    {
        if (Input.GetKey(KeyCode.UpArrow))
        {
            rigidBody.AddRelativeForce(Vector3.up * flyPower);
        }
        
    }
}
drcrackДата: Вторник, 14 Января 2020, 22:20 | Сообщение # 2
старожил
Сейчас нет на сайте
Цитата
В общем у меня есть управление с клавиатуры, но надо сделать что бы можно было управлять на телефоне нажимая на кнопку

Какую именно кнопку? На современных телефонах есть разве что кнопки управления громкостью
Речь о кнопке на экране? Ну тогда ее надо сначала создать (гугли "unity canvas")
LissandraДата: Вторник, 14 Января 2020, 22:48 | Сообщение # 3
был не раз
Сейчас нет на сайте
Цитата drcrack ()
Какую именно кнопку? На современных телефонах есть разве что кнопки управления громкостью
Речь о кнопке на экране? Ну тогда ее надо сначала создать (гугли "unity canvas")

Да. Кнопка на сенсорном экране. Я создала кнопку и пробовала повесить на нее метод из кода но она не работает.
DymkensДата: Вторник, 14 Января 2020, 22:57 | Сообщение # 4
почетный гость
Сейчас нет на сайте
Если я правильно понял, то вот один из способов:
Код

public class PlayerControls : MonoBehaviour
{
    [SerializeField] float flyPower; // Указывать и настраивать силу полета удобней через инспектор Unity.

    private bool flyUp; // Переменная ДА или НЕТ. Будем использовать ее для считывания зажата кнопочка или нет.

    Rigidbody rigidBody;

    void Start()
    {
        rigidBody = GetComponent<Rigidbody>();
    }

    void Update()
    {
        if (Input.GetKey(KeyCode.UpArrow) || flyUp == true)
        {
            rigidBody.AddRelativeForce(Vector3.up * flyPower * Time.deltaTime); // Стоит добавить Time.deltaTime, что бы скорость не зависила от количества FPS
        }
    }

    public void FlyUpPressed() // Срабатывает при зажатии копочки.
    {
        flyUp = true;
    }

    public void FlyUpReleased() // Реагирует на отжатие кнопки.
    {
        flyUp = false;
    }
}


После этого добавляем для нашей кнопки компонент Event Trigger и повторяем все, как на картинке.


Обратите внимание. После добавления Time.deltaTime надо будет поиграться (добавить) с силой flyPower или массой вашего персонажа (уменьшить) в компоненте Rigidbody.
И советую оставить управление с клавиатуры для удобности тестирования.


Моя первая игра - MilvusX
drcrackДата: Вторник, 14 Января 2020, 22:58 | Сообщение # 5
старожил
Сейчас нет на сайте
Код
private bool flyUp;

Код
flyUp == true

серьезно? :D

Цитата
// Указывать и настраивать силу полета удобней через инспектор Unity.

паблик поля сериализуются по дефолту

Код
Rigidbody rigidBody;

лучше делать
Код
new Rigidbody rigidbody;

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


Сообщение отредактировал drcrack - Вторник, 14 Января 2020, 23:05
LissandraДата: Вторник, 14 Января 2020, 23:09 | Сообщение # 6
был не раз
Сейчас нет на сайте
drcrack, а что не так?

Добавлено (14 Января 2020, 23:14)
---------------------------------------------
Выглядит не сложно

Сообщение отредактировал Lissandra - Вторник, 14 Января 2020, 23:10
DymkensДата: Вторник, 14 Января 2020, 23:24 | Сообщение # 7
почетный гость
Сейчас нет на сайте
Цитата drcrack ()

Код
private bool flyUp;


Код
flyUp == true


серьезно?

Да, еще учится и учится. Но этот визуальный мусор мне, как новичку, все еще помогает ориентироваться в коде. shy

Цитата drcrack ()
паблик поля сериализуются по дефолту

Вы правы, но мне кажется, что [SerializeField] в коде выглядит как-то красивее. Или только мне так? :)


Моя первая игра - MilvusX
LissandraДата: Среда, 15 Января 2020, 10:21 | Сообщение # 8
был не раз
Сейчас нет на сайте
Dymkens, большое большое спасибо!!! Все работает как мне надо было! Не понимаю почему drcrack придрался
DymkensДата: Среда, 15 Января 2020, 16:53 | Сообщение # 9
почетный гость
Сейчас нет на сайте
Цитата Lissandra ()
Dymkens, большое большое спасибо!!! Все работает как мне надо было! Не понимаю почему drcrack придрался

Не за что.
Не стоит воспринимать слова drcrack'a как придирки. Он верно подметил, что проверку булевой переменной можно реализовать без "== true", так как если просто вписывать имя переменной, то это и есть то самое ДА и если перед переменной поставить знак восклицания, то проверяет переменную на false ( flyUp - ДА, !flyUp - НЕТ). Жаль только, что в ру-сообществе крайне редко бывает так, что кто-то будет объяснять такие, на первый взгляд, простые вещи.


Моя первая игра - MilvusX
LissandraДата: Четверг, 16 Января 2020, 10:21 | Сообщение # 10
был не раз
Сейчас нет на сайте
Dymkens, панятнинька.

у меня еще одна проблема но уже со звуком. добавила в метод полета проигрывание звука но он звучит так как будто их активировалось несколько сразу. в чем может быть проблема?
seamanДата: Четверг, 16 Января 2020, 21:34 | Сообщение # 11
старожил
Сейчас нет на сайте
Код запуска звука?
killing002Дата: Суббота, 25 Января 2020, 22:52 | Сообщение # 12
почетный гость
Сейчас нет на сайте
В инете полно гайдов, в том же ютубе, можно найти все, что хочешь при желании.

123
LissandraДата: Суббота, 01 Февраля 2020, 11:27 | Сообщение # 13
был не раз
Сейчас нет на сайте
реашила проблемку с помощью функции audiosource.Stop() когда кнопка отжата
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг