2019. 6. 11. 12:09ㆍ개발 달리기/Unity 개발달리기
안녕하세요. 달빠입니다.
오늘은 유니티에서 Animation 의 개별 시간을 가져오는 알고리즘을 공유하려합니다.
케릭터의 애니메이션들이 다양하게 있을수 있는데 해당 애니메이션의 애니메이션 시간을 가져와서 다양하게 활용할 수
있도록 제공하는 알고리즘입니다.
// 사용할 케릭터 애니메이션 enum 값 추가 - 다양하게 입맛에 맞게 조절하시면 됩니다.
public enum eCharacterState
{
idle,
walk,
attack,
hit,
die,
celebration,
ZZattack1,
ZZattack2,
ZZattack3,
faint,
scream,
}
// 에니메이션 Duration 값 얻기
public float MoveDuration(eCharacterState move)
{
string name = string.Empty;
switch (move)
{
case eCharacterState.idle:
name = "idle01";
break;
case eCharacterState.walk:
name = "walk01";
break;
case eCharacterState.attack:
name = "attack01";
break;
case eCharacterState.hit:
name = "hit01";
break;
case eCharacterState.die:
name = "die01";
break;
case eCharacterState.celebration:
name = "celebration";
break; ;
case eCharacterState.ZZattack1:
name = "att01";
break;
case eCharacterState.ZZattack2:
name = "att02";
break;
case eCharacterState.ZZattack3:
name = "att03";
break;
case eCharacterState.faint:
name = "faint01";
break;
case eCharacterState.scream:
name = "scream01";
break;
default:
return 0;
}
float time = 0;
RuntimeAnimatorController ac = Anim.runtimeAnimatorController;
for (int i = 0; i < ac.animationClips.Length; i++)
if (ac.animationClips[i].name == name)
time = ac.animationClips[i].length;
return time;
}
사용방법
예 ) 케릭터의 어택 애니메이션만큼의 딜레이 시간이 필요할때 유용하게 사용 할 수 있습니다.
어택시간이 끝난후에 이펙트가 터지게 한다는 등의 코드를 활용할때 좋습니다.
float delayTime = MoveDuration(omDefenceMonster.eCharacterState.attack);
// 어택 모션 실행 -> 해당 애니메이션 시간 가져와서 끝나는 시점에 이펙트 발생
Anim.SetTrigger("attack");
//어택파티클실행
AttactParticlePlay(delayTime, m_ParticleAttack);
//케릭터 어택 이펙트
public void AttactParticlePlay(float waitTime, GameObject attackParticle)
{
if (m_ParticleCoroutine != null)
{
StopCoroutine(m_ParticleCoroutine);
m_ParticleCoroutine = null;
}
m_ParticleCoroutine = StartCoroutine(WaitEffect(waitTime, attackParticle));
}
//케릭터 애니메이션 대기 시간 적용
IEnumerator WaitEffect(float waitTime, GameObject particle)
{
yield return new WaitForSeconds(waitTime);
if (particle != null)
{
particle.GetComponent<ParticleSystem>().Play();
}
}
더 자세한 내용을 알고 싶다면 클릭!
미약하게나마 유용한 정보가 되었다면 구독 공감 버튼은 작성자에게 큰 힘이 됩니다. 감사합니다 ^^
'개발 달리기 > Unity 개발달리기' 카테고리의 다른 글
Unity nGUI Circular Progress Bar Thumb 붙히기 (시간 기준 Rotate 시키기) (0) | 2020.04.02 |
---|---|
Unity nGUI Circular Progress Bar 만들기 ( 원형 프로그레스바 ) (0) | 2020.04.02 |
Unity litjson Exception - JsonException: Can't assign value '1' (type System.Int32) to type System.String (0) | 2020.03.31 |
[Unity] 랭킹 알고리즘, 순위 구현하기 (0) | 2019.06.10 |
[Unity]PlayerPrefs 을 이용한 저장, 불러오기 구현하기 (1) | 2019.06.10 |