[Unity3D] Animation 제어
- DevelopEnv/unity
- 2021. 1. 26.
본 블로그는 비공개글로 작성합니다.
단순히 Drag&Drop을 이용하여 삽입하고나서, 각 설정을 마우스로 가능하다.
하지만 현재하고자 하는 것은 Assetbundle을 이용하여 animation을 제어하고자 한다.
이때, 각 캐릭터의 속성으로 animation, animator가 삽입이 가능하다.
각 contorller에서 animation을 제어하려고 하였지만 생각처럼 되지 않는다.
인터넷의 여러 블로그를 살펴보아도 제대로 된 설명이 없다.
Unity3D cafe 에서는 AnimationState(http://www.devkorea.co.kr/reference/Documentation/ScriptReference/AnimationState.html)를 사용하라고 한다.
옵션은 위의 옵션과 같은데 실제적으로 사용하는 코드는 아래와 같이 하니 동작하였다.
Contents1Mgr.cs 파일 > CreateMOdel() 내용 수정
public void CreateModel( GameObject obj, AnimationClip AnimiClip, string AniStr ) {
GameObject myModelInstance = new GameObject();
myModelInstance = Instantiate(Load3DModel, obj.transform.position, obj.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;
GameObject myModelInstance = new GameObject();
myModelInstance = Instantiate(Load3DModel, obj.transform.position, obj.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
foreach( Transform t in target.GetComponentsInChildren<Transform>() ) {
if( t.name.Contains("(Clone)") == true ) {
Animator myAnimator = t.GetComponent<Animator>();
myAnimator.speed = 1;
//break;
}
}
}
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
foreach( Transform t in target.GetComponentsInChildren<Transform>() ) {
if( t.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
foreach( Transform t in target.GetComponentsInChildren<Transform>() ) {
if( t.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
[1] Unity3d tutorials
'DevelopEnv > unity' 카테고리의 다른 글
[unity] unity can not sign application (0) | 2021.01.26 |
---|---|
Unity3D 의 C#과 Visual Studio의 C DLL 과의 통신 방법. (2) | 2013.09.30 |
Unity3D 에서 Visual Studio 2010 DLL Library 사용하기 (0) | 2013.09.27 |
Unity3D 에서 백그라운드에서도 실행 되게 하기. (0) | 2013.08.19 |
[ubuntu] adb command not found (0) | 2011.11.29 |