#unity3d
#unity3d
Вопрос:
Этот код работает и вращает куб,
public float Speed;
void Update()
{
transform.Rotate(Vector3.up * Speed * Time.deltaTime);
}
но это не работает :
Я пытаюсь повернуть влево при щелчке левой кнопкой мыши,
и поворачивается вправо при щелчке правой кнопкой мыши. Только щелчок на мгновение, не удерживая нажатой. :
public float Speed;
void Update()
{
if (Input.GetMouseButtonDown(0)) // left mouse clicked.
{
transform.Rotate(Vector3.up * Speed * Time.deltaTime);
}
else if (Input.GetMouseButtonDown(1)) // right mouse clicked.
{
transform.Rotate(Vector3.down * Speed * Time.deltaTime);
}
}
Как я могу это исправить?
Примечание:
Я прикрепил скрипт,
его скорость равна 250.
Спасибо.
Комментарии:
1. Вы понимаете, сколько миллионов щелчков вам нужно сделать в вашем коде, чтобы повернуть его, поскольку вы поворачиваете его только на 1 кадр при каждом нажатии, а с deltatime это число равно 1 атому?
2. какова ваша скорость?
3. также проверьте, когда он удерживается нажатой и не нажимается
4. @Jadon Wolfgang его 250.
Ответ №1:
Используйте Input.GetMouseButton(0)
вместо Input.GetMouseButtonDown(0)
. Для вашего кода он вращается при каждом щелчке, но если скорость недостаточно велика, вы даже не заметите. С Input.GetMouseButton(0)
куб будет вращаться, пока нажата кнопка.
Комментарии:
1. Убедитесь, что класс является однонаправленным, что он привязан к игровому объекту cube, и что скорость не равна 0 в редакторе, и что она достаточно высока. например, 100
2. Скорость равна 250. Да, я прикрепил.
3. проверьте с помощью другой клавиши ввода вместо мыши. Происходит то же самое?
4. Также щелчок должен происходить в игровом окне
Ответ №2:
GetMouseButtonDown
выполняется один раз в течение кадра, в котором была нажата кнопка. То же самое касается GetMouseButtonUp
и вы ищете Input.GetMouseButton
, который возвращает true для каждого кадра при нажатии кнопки.
Итак, ваш код выполняется каждый раз, когда вы нажимаете кнопку, затем вам нужно отпустить его, чтобы он снова заработал.
public float Speed;
void Update()
{
if (Input.GetMouseButton(0)) // sol mouse tıklandı
{
transform.Rotate(Vector3.up * Speed * Time.deltaTime);
}
else if (Input.GetMouseButton(1)) // sağ mouse tıkladı
{
transform.Rotate(Vector3.down * Speed * Time.deltaTime);
}
}
Чтобы самостоятельно отлаживать такие проблемы, вы могли бы разместить Debug.Log("Works?")
, чтобы проверить, достигает ли ваш код заданной точки, или подключить отладчик
Комментарии:
1. Проверьте, не равна ли ваша скорость 0. Потому что это работает для меня! Кроме того, проверьте, не используете ли вы новую систему ввода Unity
2. Скорость равна 250. Я не знаю, что такое новая система ввода Unity. Я установил версию 2020.1.3f1
Ответ №3:
Наилучшими способами было бы или проверить наличие щелчка, а затем запустить сопрограмму на пару секунд / цикл for с фиксированным количеством оборотов, или проверить, удерживается ли нажатой кнопка мыши.
Комментарии:
1. я протестирую код для вас и вернусь. потому что это должно работать. возможно, попробуйте перезапустить свой редактор.
2. Большое вам спасибо, но вам не нужно тратить время, потому что я собираюсь спросить моего друга-эксперта по Unity.
3. Да, офк, мы все здесь, чтобы учиться, поэтому я, вероятно, тоже извлеку уроки из этого опыта!!!
4. Я понял, окей.
5. Вы сбросили компонент на своем объекте?
Ответ №4:
Хорошо, я нашел для чего:
public float Speed;
void Update()
{
if (Input.GetMouseButtonDown(0))
{
transform.Rotate(Vector3.up * Speed * Time.deltaTime);
}
else if (Input.GetMouseButtonDown(1))
{
transform.Rotate(Vector3.down * Speed * Time.deltaTime);
}
}
это приведет к вращению объекта на фиксированную величину. при нажатии кнопки мыши 0 или 1.
public float Speed;
void Update()
{
if (Input.GetMouseButton(0))
{
transform.Rotate(Vector3.up * Speed * Time.deltaTime);
}
else if (Input.GetMouseButton(1))
{
transform.Rotate(Vector3.down * Speed * Time.deltaTime);
}
}
это приведет (как и предполагалось) к вращению объекта при нажатых кнопках мыши.
Комментарии:
1. вы УВЕРЕНЫ, что добавили скрипт на объект и он активен?
2. Запрашивающий не хочет удерживать нажатой кнопку, поэтому на самом деле может удерживать кнопку нажатой только в течение одного или двух кадров
3. Да, я планировал щелкнуть только один раз для левого и правого щелчка.
4. затем используйте OnMouseButtonDown(). но вы сохранили его, сбросили, удалили и перечитали? попробуйте эти вещи, пожалуйста.
5. @Jadon Wolfgang Я прикрепил, когда использовал только код поворота. И после этого не делал ничего нового. Это работало.
Ответ №5:
Мой друг устранил проблему :
public class Rotator2 : MonoBehaviour
{
bool Forward = true;
public float Speed;
void Start()
{
Forward = true;
}
void Update()
{
if (Input.GetMouseButtonDown(0))
{
Forward = true;
}
if (Input.GetMouseButtonDown(1))
{
Forward = false;
}
transform.Rotate(Vector3.up, (Forward ? 1 : -1) * Speed * Time.deltaTime);
}
}
Ответ №6:
Тот же код с использованием enum, вместо использования bool :
enum Direction
{
None,
Forward,
Backward
}
public class Rotator2 : MonoBehaviour
{
Direction Direction = Direction.Forward;
public float Speed;
void Update()
{
if (Input.GetMouseButtonDown(0))
{
Direction = Direction.Forward;
}
if (Input.GetMouseButtonDown(1))
{
Direction = Direction.Backward;
}
transform.Rotate(Vector3.up, (Direction== Direction.Forward ? 1 : -1 ) * Speed * Time.deltaTime);
}
}