Пишу игру на unity используя c# под android. Суть кода такова: Объект вращается с постоянной скоростью, но если сделать удерживающее касание (скрипт работает только тогда, когда палец касается экрана), вращение объекта должно замедлиться, но вместо этого он просто перестает вращаться... вот код:
public class TouchRotate : MonoBehaviour {
public float velocity=180;
public float slow_velocity=90;
// Update is called once per frame
void Update () {
if (Input.touchCount > 0)
{
Touch touch = Input.GetTouch(0);
if (touch.phase == TouchPhase.Began)
{
// замедление вращения при длительном касании экрана
transform.Rotate(new Vector3(0, 0, slow_velocity * Time.deltaTime));
}
}
else
{
transform.Rotate(new Vector3(0, 0, velocity * Time.deltaTime));
}
}
}
У вас в коде есть такая ветка в условиях, в которой ничего не выполняется. А конкретно - если Input.touchCount > 0, но touch.phase != TouchPhase.Began.
Если вы хотите сделать то, что задумали, то вам необходимо хранить какой-то флаг. При touch.phase == TouchPhase.Began выставляете его в true, при touch.phase == TouchPhase.Ended в false. А в вашем условии проверяете именно этот флаг.
Потому что оба ивента срабатывают лишь единожды, а проверку вы делаете в каждом кадре.
Кстати, вместо флага можно просто проверять на то, что состояние либо Stationary, либо Moved. Но это уж как вам больше нравится. Справка тут
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости