Помогите со скриптом в Unity

279
09 сентября 2018, 00:00

Как сделать так, чтобы по нажатию мышкой (тапом) несколько раз, персонаж ускорялся. Например, на денди была игра Hyper Sports (Прыжки в длину, бег на 100 м и тд).

Answer 1

Для этого нужно отслеживать кол-во кликов мыши или тапов. В случае необходимости нажатий/тапов именно подряд, то обнуляем счетчик нажатий при отсутствии тапов/нажатий какое-то время.

При каждом нажатии/тапе проверяем значение счетчика. Если он равен необходимому количеству для активации ускорения, то обнуляем счетчик и придаем ускорение персонажу - увеличиваем его скорость.

Вопрос достаточно общий, потому и ответ получается тоже довольно-таки общим... Будет код - будет конкретика.

UPD

Если скорость должна увеличиваться при КАЖДОМ нажатии, то какую-нибудь проверку максимальной скорости стоит делать только в том случае, если есть ограничение максимальной скорости. Если ограничения нет, то вполне достаточно отдельно хранить "базовую" скорость. Я бы сделал примерно так:

public class PlayerController
{
//для данной немного абстрактной ситуации для удобства редактирования коэффициентов все переменные общедоступные. в финальной версии лучше все "лишнее" объявить с модификатором private
public float speedDefault = 10.0f;      //Базовая скорость
public float boostAtTab = 0.5f;         //Ускорение за 1 нажатие
public float slowAtSecond = 5.0f;       //Замедление в секунду
public float speedCurrent;              //Текущая скорость
public bool isInit = false;
private void Update()
{
    if (isInit)
    {
        //Здесь код перемещения за кадр, где должна учитываться текущая скорость speedCurrent;
        //...
    }
}
//Инициализация, в конкретном случае должна быть вызвана вручную каким-либо образом
public void Initialize()
{
    isInit = true;
    speedCurrent = speedDefault;
    StartCoroutine(SpeedControl());
}
//Придаем ускорение. Нужно вызывать этот медод при каждом нажатии/тапе
public void OnBoost()
{
    speedCurrent += boostAtTab;
}
//Сопрограмма контроля скорости - постоянно снижает, но не ниже скорости "по умолчанию"
private IEnumerator SpeedControl()
{
    while (isInit)
    {
        if (speedCurrent > speedDefault)
        {
            speedCurrent -= slowAtSecond * Time.deltaTime;
            if (speedCurrent < speedDefault)
                speedCurrent = speedDefault;
        }
        yield return null;
    }
}
}
READ ALSO
Как отправить атрибуты используя WSDL Zimbra

Как отправить атрибуты используя WSDL Zimbra

Всем привет, создаю почту, но никак не понимаю как туда добавить атрибуты типо displayname,sn и givennameЗапрос через браузер выглядит так

282
Идентификация nullable типа

Идентификация nullable типа

Есть функция, принимающая object argВ самой функции требуется получить тип переданного объекта

242
Отдельный роутинг для /api в SPA

Отдельный роутинг для /api в SPA

Хочу написать AspNet Core SPA

246
Yii2 выборка по модели в массив

Yii2 выборка по модели в массив

Есть таблица и модель под нее, несколько записей параметров для вывода в качестве лэйблов

310