c#
Animator에서 Animation 속도를 조절하려다 생긴 문제
- Animation에 접근할수 있다면 speed를 음수로 변경하면됨
- Animator만 있다면 AnimationClip에 접근할수 있지만 Animation이라는 class는 없음
- Animator의 speed를 직접 제어하면 음수는 입력불가 - 에러
- Animator에 float parameter를 만든다음 안에 있는 Animation에 multiplier에 연결한다음 SetFloat으로 parameter를 음수로 조정하면 됨
- +쪽엔 Play(0);을 넣고 -쪽엔 안넣는게 맞음.
AnimationClip 의 마지막을 지나쳤는데도 카운트가 계속되는 문제
- 롤오버를 길게 하고 있을경우 돌아오는데까지 시간이 걸림
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using DG.Tweening;
public class HoverButton : MonoBehaviour
{
Animator ani_;
float current_time = 0;
void Start()
{
ani_ = GetComponent<Animator>();
ani_.SetFloat("speed_multiple", 0);
}
private void setCurrentTime()
{
current_time = ani_.GetCurrentAnimatorStateInfo(0).normalizedTime;
//받아온 normalizedTime이 0보다 작거나 1보다 큰 경우가 생김. 후처리
if (current_time < 0) current_time = 0;
if (current_time > 1) current_time = 1;
}
private void OnMouseEnter()
{
setCurrentTime();
ani_.SetFloat("speed_multiple", 1);
ani_.Play(0, 0, current_time);
}
private void OnMouseExit()
{
setCurrentTime();
ani_.SetFloat("speed_multiple", -1);
ani_.Play(0, 0, current_time);
}
}
- play의 맨 마지막 인자값 normaledTime을 추가하면 되는데.. 현재 시간을 알수가 없어서 최댓값 최솟값을 넣는것은 퀄리티 문제가 있었다.
- ani_.GetCurrentAnimatorStateInfo(0).normalizedTime 애니메이터의 첫번째 클립의 스테이트 인포베이션을 얻어오는것으로 해결
string 이름으로 애니메이션 클립 찾기
public AnimationClip FindAnimation (Animator animator, string name)
{
foreach (AnimationClip clip in animator.runtimeAnimatorController.animationClips)
{
if (clip.name == name)
{
return clip;
}
}
return null;
}