유니티 게임오브젝트에 애니메이션을 적용하기 위해서는 컴포넌트로  Animation을 추가해주면 된다.


[컴포넌트를 추가하는 방법]


1. 컴포넌트를 붙이길 원하는 게임오브젝트를 선택한다.


2. Add Component를 누른뒤 Animation을 추가한다.


3. Animation 컴포넌트가 추가되었다. 물론, 아무것도 넣지 않았기때문에 None 즉 아무 애니메이션도 존재하지 않는다.


4. death라는 애니메이션을 Animation에다가 집어넣었다. 이 경우 애니메이션 동작을 한 개(death)만 보여줄 경우이다.


5. 한 게임오브젝트에 여러 애니메이션을 재생하려면, Animations에다가 여러개의 애니메이션 파일을 집어넣는다.



그렇다면 Animations에 담긴 애니메이션 파일은 어떻게 사용할까?


일단, 코드에서 애니메이션을 실행하는 코드는 anim.Play("");이다.


그럼, Animations는 배열이므로 string[]배열을 사용해야 할 것이다.


하지만 배열은 선언할 때 반드시 크기를 명시해줘야 한다.


즉, 배열에 저장할 데이터의 크기를 확실히 모르거나 데이터가 도중에 추가될 가능성이 있다면 배열을 사용하면 안 된다.


List를 사용한다.

 


    List<string> animArray;
    Animation anim;     
int index = 0;

void Start()
{
        anim = gameObject.GetComponent<Animation>();
        animArray = new List<string>();
            AnimationArray();

            anim.Play(animArray[randomNum]);
            anim.wrapMode = WrapMode.Once;
}

public void AnimationArray()
{
        foreach (AnimationState state in anim)
{
            animArray.Add(state.name);          
           index++;
}
        randomNum = Random.Range(0,index);
}



이렇게하면 된다.



중요한 함수는 AnimationArray()함수이다.


여기서, foreach문을 사용하여 AnimationState형으로 꺼내온 뒤, list에 저장한다(Add)


나는 항목들 중 랜덤으로 1회 플레이하기 위해서 Random.Range를 사용했고,


Play안에 난수를 집어넣었다. 이렇게 함으로써 랜덤한 애니메이션이 1회 플레이 될 것이다.



이상으로 애니메이션(Animation) 컴포넌트 안에 Animations 배열을 가져오는 방법에 대해 알아보았다.



Posted by sungho88
,

루프(loop)를 설정하여 무한 반복할 것인지, 한 번만 실행할 것인지(once)를 설정해야 할 때가 있다.


물론 유니티 내에서 설정이 가능하지만, 코드로 동적으로 변경하고 싶다면 어떻게 할까.


순간 Audio Source와 헷갈려서 , anim.loop = true로 작성했는데 안된다.


정신차리고...


애니메이션 loop나 once는 어떻게 설정할까?



위와같이 death 애니메이션 파일을 클릭하면, 아래와 같이 나온다.


Wrap Mode라고 씌여있다.


왠지 이것을 스크립트에서 사용하면 될 것 같아서 wrapmode를 입력해봤다.


역시. 


anim.wrapMode가 존재했다. 이것 키워드로 구글에 검색을 해보니 정답을 얻을 수 있었다.


아래와 같이 하면, 애니메이션을 제어할 수 있다.


anim.wrapMode = WrapMode.Once;


이렇게 작성하면 한번(once) 실행되고 중지된다.


anim.wrapMode = WrapMode.Loop;


이렇게 작성하면 무한 반복된다.


이상으로 유니티에서 애니메이션 반복 여부를 설정하는 코드에 대해 알아봤다.


Posted by sungho88
,