Unity Animator 분할 재생 설정 방법
새 빈 물체 에 toggle group 을 추가 합 니 다.
다음은 toggle 한 무더기 와 Group 에 아버지 까지.
private Animator myAnimator;
public List<Toggle> myTogglesList;
private float playTime;
public void Awake()
{
myAnimator = GameObject.Find("XXX/xxx").GetComponent<Animator>();
myTogglesList.AddRange(transform.GetComponentsInChildren<Toggle>());
}
public void Start()
{
base.Start();
for (int i = 0; i < myTogglesList.Count; i++)
{
Toggle go = myTogglesList[i];
myTogglesList[i].onValueChanged.AddListener((bool value) => OnClickBtn(go.gameObject, value));
}
}
void Update()
{
//playTime
playTime = myAnimator.GetCurrentAnimatorStateInfo(0).normalizedTime;
Debug.Log(playTime);
if (myTogglesList[0].isOn && playTime > 0.1f)
{
//Animator.Play("ANI1", 0, 0f) ANI1 0, 0 , 0f,
myAnimator.Play("ANI1", 0, 0f);
}
if (myTogglesList[1].isOn && playTime > 0.3f)
{
myAnimator.Play("ANI1", 0, 0.1f);
}
if (myTogglesList[2].isOn && playTime > 0.5f)
{
myAnimator.Play("ANI1", 0, 0.3f);
}
if (myTogglesList[3].isOn && playTime > 0.8f)
{
myAnimator.Play("ANI1", 0, 0.5f);
}
.........................
}
private void OnClickBtn(GameObject go, bool value)
{
switch (go.name)
{
case "btn01 (1)":
myAnimator.Play("ANI1", 0, 0f);
break;
case "btn01 (2)":
myAnimator.Play("ANI1", 0, 0.1f);
break;
case "btn01 (3)":
myAnimator.Play("ANI1", 0, 0.3f);
break;
case "btn01 (3)":
myAnimator.Play("ANI1", 0, 0.5f);
break;
.........................
}
}
보충:유 니 티 애 니 메 이 터 는 애니메이션 을 편집 하지 않 고 세그먼트 재생 애니메이션 을 실현 합 니 다.긴 말 안 할 게 요.그냥 코드 보 세 요~
public Animator anim;
private AnimatorStateInfo animInfo;
/// <summary>
///
/// </summary>
int playSpeed = 0;
void Update()
{
animInfo = anim.GetCurrentAnimatorStateInfo(0);
// Take 001
if (animInfo.normalizedTime < 0.99f && animInfo.IsName("Take 001"))
{
//
if (animInfo.normalizedTime > 0.19 && animInfo.normalizedTime < 0.2)
{
//
print(" 1");
anim.speed = playSpeed;
}
//
else if (animInfo.normalizedTime > 0.39 && animInfo.normalizedTime < 0.4)
{
print(" 2");
anim.speed = playSpeed;
}
else
{
//
playSpeed = 0;
}
}
}
/// <summary>
///
/// </summary>
private void PlayAnim()
{
//
playSpeed = 1;
}
animInfo.normalized Time 애니메이션 상태 표준화 시간,애니메이션 값 은 0~1 입 니 다.애니메이션 재생 완료animInfo.IsName("Take 001")현재 재생 중인 애니메이션 입 니 다.Take 001 은 애니메이션 이름 입 니 다.
원리:먼저 모든 애니메이션 의 끝 프레임 을 알 아야 합 니 다.그 다음 에 이 애니메이션 의 끝 프레임 은 전체 프레임 을 제외 하고 이 끝 프레임 은 animInfo.normalized Time 의 값 을 얻 을 수 있 습 니 다.마지막 으로 조건 으로 애니메이션 을 중단 하고 애니메이션 을 계속 재생 하면 다음 애니메이션 의 시작 을 실현 할 수 있 습 니 다.
예 를 들 어 애니메이션 100 프레임 이 있 는데 편집 하지 않 고 여러 단락 의 애니메이션 을 재생 해 야 합 니 다.
첫 번 째 단락 의 끝 프레임 이 20 프레임 이라는 것 을 알 게 되면 20/100=0.2,0.2 는 normalized Time 값 을 애니메이션 일시 정지 조건 으로 합 니 다(조건 을 쓸 때 범 위 를 설정 할 수 있 습 니 다).
이상 은 개인 적 인 경험 이 므 로 여러분 에 게 참고 가 되 기 를 바 랍 니 다.여러분 들 도 저 희 를 많이 응원 해 주시 기 바 랍 니 다.만약 잘못 이 있 거나 완전히 고려 하지 않 은 부분 이 있다 면 아낌없이 가르침 을 주시 기 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
photonnetwork.instantiate에서 gamepobject 유형을 생성 한 다음 상태 및 값을 참조하는 방법주로 마지막 기사에서 일어난 일의 수정입니다. 지난번↓ 그럼 주제입니다. (타이틀이 정리되어 없어서 죄송합니다) 우선 전회의 Illegal view ID:0입니다만 photonnetwork.instantiate를 사...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.