자동 윙크

안녕하세요.팔교!
이 글에서 우리는 애니메이션으로 만든 아바타의 제스처, 립스틱, 윙크, 표정 이동을 설명했다.
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를 위해 윙크를 꼭 설치하세요!
지금까지'아바타 윙크 자동 시키기'였습니다.
팔교론
🌟🌟🌟이쪽도 한번 들여다보세요.🌟🌟🌟
Twitter
https://twitter.com/Maron_Vtuber
도구 배포
https://www.pixiv.net/fanbox/creator/16717003
Youtube(툴 설명 및 Vtuber 활동)
https://www.youtube.com/channel/UCiIbLpncjzahHsp8cokG56g

좋은 웹페이지 즐겨찾기