Unity. плавный поворот Transform при нажатии кнопки
Я пытаюсь сделать анимацию, которая будет отображать взмах мечом при атаке. Мне необходимо плавно поворачивать _weaponTrasnform в течении времени animationTime на угол tangle. Пока все, что делает этот код, это мгновенно перемещает оружие в конечную позицию. Я новичок в Unity и C# и не понимаю, что я делаю не так.
using System.Collections;
using UnityEngine;
using UnityEngine.Events;
public class PlayerAttackController : MonoBehaviour
{
[SerializeField] private Transform _weaponTrasnform;
[SerializeField] private PlayerWeapon _weaponData;
[SerializeField] private UnityEvent attackEvent;
private bool attackEloved = true;
private void FixedUpdate()
{
if (Input.GetKey(KeyCode.Space) && attackEloved)
{
StartCoroutine(Attack());
}
}
private IEnumerator Attack()
{
attackEvent?.Invoke();
attackEloved = false;
AttackAnimation();
yield return new WaitForSeconds(_weaponData.AttackTimeOut);
attackEloved = true;
}
public void AttackLogout()
{
print("Attack");
}
private void AttackAnimation()
{
float tangle = 90f;
float animationTime = 50f;
float currenTime = 0f;
Quaternion start = _weaponTrasnform.rotation;
Quaternion target = Quaternion.Euler(0, tangle, 0);
while (currenTime < animationTime)
{
float t = Mathf.SmoothStep(0f, 1f, currenTime / animationTime);
_weaponTrasnform.rotation = Quaternion.Lerp(start, target, t);
currenTime += Time.deltaTime;
}
}
}
Ответы (1 шт):
Автор решения: Михаил
→ Ссылка
Можно сделать проще:
Попробуйте сделать анимацию через окно Animation (Window > Animation > Animation или Ctrl+6 на винде) и повесить её на игрока через Add Component > Animation. И в нужный момент запускать анимацию через код:
public class ExampleScript : MonoBehaviour
{
private Animation anim;
public GameObject Player;
void Start()
{
anim = Player.GetComponent<Animation>();
}
void FixedUpdate()
{
if (Input.GetKey(KeyCode.Space) && attackEloved)
{
anim.Play();
}
}
}
Больше информации по анимациям можно взять на оф сайте unity.