это поворачивает объект примерно на 45 ° каждый кадр ... это просто быстро для ваших глаз
Вы должны использовать Time.deltaTime
, чтобыпреобразовать вращение в плавное «вращение в секунду»
Rotate(0, 45 * Time.deltaTime, 0, Space.World);
Затем, как только Rigidbody
задействован, вы должны не установить любые преобразования через Transform
компонент, но вместо этого используйте RigidBody.MoveRotation
в FixedUpdate
, чтобы вращать объект, но сохранять физическую целостность
void FixedUpdate()
{
if(rotateStatus)
{
rb.MoveRotation(rb.rotation * Quaternion.Euler(Vector3.up * rotationSpeed * Time.deltaTime));
Debug.Log("Rotation should be happening.");
}
}
, еслия отпускаю кнопку, вращение должно остановиться
Этого не произойдет.Кнопка Unity по умолчанию не имеет никакой реализации для сообщения вашим сценариям, что кнопка больше не нажимается.
Вы можете написать собственное расширение для этого, используя IPointerUpHandler
и IPointerExitHandler
интерфейсы:
public class ReleaseButton : MonoBehaviour, IPointerDownHandler, IPointerUpHandler, IPointerExitHandler
{
public UnityEvent onPointerUp;
[SerializeField] private Button button;
private void Awake()
{
if(!button) button = GetComponent<Button>();
}
// according to the Docs this has to be implemented in order to
// receive OnPointerUp events ... though we don'T need it actually
public void OnPointerDown(PointerEventData pointerEventData){ }
public void OnPointerExit(PointerEventData pointerEventData)
{
if(!button.interactable) return;
onPointerUp.Invoke();
}
public void OnPointerUp(PointerEventData pointerEventData)
{
if(!button.interactable) return;
onPointerUp.Invoke();
}
}
прикрепите это к своей кнопке и укажите свой RotateNow
также в onPointerUp
, чтобы rotateStatus
будет сброшен при отпускании кнопки.