자동 윙크
11567 단어 AnimatorControllerUnityC#Vtuber
이 글에서 우리는 애니메이션으로 만든 아바타의 제스처, 립스틱, 윙크, 표정 이동을 설명했다.
https://qiita.com/Maron_Vtuber/items/2dca46dfd454588e15d3
이 글은 그중의'자동 윙크 스크립트'를 썼다.
다음은 본고에 필요한 최소 애니메이션 제작 도구 지식의 개요입니다.
애니메이션 제작 도구에는 기본 애니메이션의 애니메이션을 덮어쓰고 혼합할 수 있는 레이어 기능이 있으며 가중치 변수를 사용하여 그 정도를 제어할 수 있습니다.이번에는'윙크'이기 때문에 기본적인 애니메이션은'눈 뜬 상태'이고'눈 감은 상태'를 레이어 기능으로 덮는 애니메이션이다.
여기서부터 위의 보도에서 애니메이션 제작 도구의 설정은 끝나는 것으로 진행된다.
(= 필요한 애니메이션 제작 도구의 레이어 설정이 끝나면 눈을 뜨고 닫는 애니메이션이 생성됨)
완료된 스크립트의 검사기를 봅니다.
• 이 스크립트를 사용하여 지정된 애니메이션 제작 레이어에서 Weight를 사용하여 한 주기 동안 윙크를 반복합니다.
· 반복 대기시간→1팍→대기시간→1팍→대기시간→2팍→.
・ 위 이미지에서 Cube를 사용한 Animator Tier 1의 가중치
· 위 이미지에서 3초→1팍→5초→1팍→7초→2팍→순환을 기다린다.
• 또 눈을 감고 열기 시작하는 시간은 0.1sec.
층의 계수 방법은 다음과 같다
코드는 다음과 같습니다.
AutoBlink.cs
using UnityEngine;
using System.Collections;
/// <summary>
/// 自動瞬きを行うクラス。
/// 使用するには適切に設定されたAnimatorControllerをもつ
/// オブジェクトを_Animatorに指定する必要がある。
/// </summary>
public class AutoBlink : MonoBehaviour
{
float weight = 0f;
float velocity = 0.0f;
bool isBlink = false;
[SerializeField]
float OnceBlinkTime_1 = 3f;
[SerializeField]
float OnceBlinkTime_2 = 5f;
[SerializeField]
float TwiceBlinkTime_3 = 7f;
[SerializeField]
float CloseTime = 0.1f;
[SerializeField]
Animator _Animator;
[SerializeField]
int Layer = 3;
// ↑↑↑↑_AnimatorのLayer番号
// VR Motion Recorderでは3番がまばたき用のLayerとなっている
// (0, 1, 2, 3, ...と数えるから、実際は4番目のLayer)
// 扱う_Animatorによって適切に設定すること
// AnimatorのLayer機能については前の記事(冒頭に紹介した記事)を参照のこと
void Start()
{
// まばたきループ開始
StartCoroutine("AutoBlinkCoroutine");
}
// _Animatorのweightを毎フレーム更新する
private void Update()
{
if (isBlink)
{
// isBlink = trueならweightを1にもっていく
// 0.05secかけてweightを1にする
weight = Mathf.SmoothDamp(weight, 1, ref velocity, 0.05f);
}
else
{
// isBlink = falseならweightを0にもっていく
// 0.05secかけてweightを0にする
weight = Mathf.SmoothDamp(weight, 0, ref velocity, 0.05f);
}
// AnimatorのLayerのウェイトを更新
_Animator.SetLayerWeight(Layer, weight);
}
//「コルーチン」で呼び出すメソッド
IEnumerator AutoBlinkCoroutine()
{
//無限ループ
while (true)
{
//まばたき1回目。単発でまばたきをする。
yield return new WaitForSeconds(OnceBlinkTime_1);
isBlink = true;
yield return new WaitForSeconds(CloseTime);
isBlink = false;
//まばたき2回目。単発でまばたきをする。
yield return new WaitForSeconds(OnceBlinkTime_2);
isBlink = true;
yield return new WaitForSeconds(CloseTime);
isBlink = false;
//まばたき3回目。ここでは2回連続でまばたきをする。
yield return new WaitForSeconds(TwiceBlinkTime_3);
isBlink = true;
yield return new WaitForSeconds(CloseTime);
isBlink = false;
yield return new WaitForSeconds(CloseTime);
isBlink = true;
yield return new WaitForSeconds(CloseTime);
isBlink = false;
}
}
}
나는 코르크페놀로 일정 시간을 기다린다.IEnumerator AutoBlinkCoroutine()
{
[やりたい処理を入れる]
}
콜딩은 다음 명령에 따라 시작됩니다.StartCoroutine("AutoBlinkCoroutine");
콜딩네에서 다음과 같이 쓰면'일정한 시간을 기다려도 된다'.yield return new WaitForSeconds(OnceBlinkTime_1);
또한 윙크의 무게를 계산하는 데 쓰인다Mathf.SmoothDamp(A,B,C,D);
의 함수는 매우 편리하다.신경 쓰이면 조사해 봤으면 좋겠어요.Vtuber는 윙크가 없는 상황에서 약간의 실제 존재감이 부족하지만 윙크를 하는 상황에서 현실의 윙크와 연결될 필요가 없다
이 스크립트처럼 3초, 5초, 7초 주기로 눈을 깜빡이면 조화롭지 못한 동작이 없어 실제 존재감을 높인다.
Vtuber를 위해 윙크를 꼭 설치하세요!
지금까지'아바타 윙크 자동 시키기'였습니다.
팔교론
🌟🌟🌟이쪽도 한번 들여다보세요.🌟🌟🌟
https://twitter.com/Maron_Vtuber
도구 배포
https://www.pixiv.net/fanbox/creator/16717003
Youtube(툴 설명 및 Vtuber 활동)
https://www.youtube.com/channel/UCiIbLpncjzahHsp8cokG56g
Reference
이 문제에 관하여(자동 윙크), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/Maron_Vtuber/items/b6055fc19846dc347dbb텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)