[Unity3D] Animation 제어

본 블로그는 비공개글로 작성합니다. 

Unity3d 에서 animation 을 이용하기는 쉽다. 
단순히 Drag&Drop을 이용하여 삽입하고나서, 각 설정을 마우스로 가능하다.

하지만 현재하고자 하는 것은 Assetbundle을 이용하여 animation을 제어하고자 한다.
이때, 각 캐릭터의 속성으로 animationanimator가 삽입이 가능하다.

각 contorller에서 animation을 제어하려고 하였지만 생각처럼 되지 않는다.
인터넷의 여러 블로그를 살펴보아도 제대로 된 설명이 없다.

Unity3D cafe 에서는 AnimationState(http://www.devkorea.co.kr/reference/Documentation/ScriptReference/AnimationState.html)를 사용하라고 한다.

옵션은 위의 옵션과 같은데 실제적으로 사용하는 코드는 아래와 같이 하니 동작하였다.



Contents1Mgr.cs 파일 > CreateMOdel()  내용 수정

public void CreateModelGameObject objAnimationClip AnimiClipstring AniStr ) {

        GameObject myModelInstance = new GameObject();
        myModelInstance = Instantiate(Load3DModelobj.transform.positionobj.transform.rotation ) as GameObject;
        
        myModelInstance.transform.parent = obj.transform// on Marker
        myModelInstance.transform.localScale = new Vector3(1,1,1);
        myModelInstance.transform.Rotate (new Vector3(0,180,0) );
        myModelInstance.transform.position = new Vector3(0,0,0); // initial pisition

        // setting Animation
        Animator myAnimator = myModelInstance.GetComponent<Animator>();    
        myAnimator.speed = 0;
        // animation의 속성을 변경해보니, 해당 Model의 animation제어가 제대로 되지 않았음.
    }

UIARSceneAlram.cs > OnTrackingFound()

private void OnTrackingFound(){

        hingeJoints = GetComponentsInChildren<HingeJoint>();
        foreach (HingeJoint joint in hingeJoints) {
            joint.transform.position = new Vector3(0,0,0);        
        }
        string Name = "ImageTarget_" + mTrackableBehaviour.TrackableName;
        string message = "Detected Marker : " + Name;

        Debug.Log ("Name = " + name );

        // setting position
        string NameTarget = "ImageTarget_" + mTrackableBehaviour.TrackableName// same 
        GameObject target = GameObject.Find(NameTarget);

        // setting Animation
        foreachTransform t in target.GetComponentsInChildren<Transform>() ) {
            ift.name.Contains("(Clone)") == true ) {
                Animator myAnimator = t.GetComponent<Animator>();
                myAnimator.speed = 1;

                //break;
            }
        }

    }

UIARSceneAlram.cs > OnTrackingLost()    
- 내용 전체 추가
private void OnTrackingLost()
    {
        // setting position
        string NameTarget = "ImageTarget_" + mTrackableBehaviour.TrackableName// same 
        GameObject target = GameObject.Find(NameTarget);
        
        // setting Animation
        foreachTransform t in target.GetComponentsInChildren<Transform>() ) {
            ift.name.Contains("(Clone)") == true ) {
                Animator myAnimator = t.GetComponent<Animator>();
                myAnimator.speed = 0;
                //break;
            }
        }

    }
 

즉, Instance에 Animatior을 추가하고나서 추가된 Animator를 이용하여 제어가 가능하였다.
 - speed = 0  -> 0으로 할 경우 멈춤.
 - speed < 0  -> 0이상 할 경우 animation의 속도가 증가하였다.

마커를 찾았을 경우, speed = 1 로 설정하고
마커를 잃어버렸을 경우, speed= 0 으로 함으로써 animation 속도를 제어한다.

References



댓글

Designed by JB FACTORY