テンションの高いJust Do It! おじさんにも、やる気のないときはあります。
今回は↑コレを作ってみます。
本家サイトから適当な静止画をキャプチャし、背景を透過したものをUnityにドラッグ&ドロップします。
次に、UnityのPackage Manager から2D Animation, 2D IKをインポートします。
インポートした画像をスプライトに設定し、Sprite Editorを開きます。
2D Animation, 2D IKをインポートしているとSkinning Editorのメニューが出るのでこれを選択します。
体と腕の間にもメッシュができてしまうような場合は、Outline DetailとSubdivideの値を調整してメッシュを作り直してください。
メッシュができたら Create Bone でボーンを作っていきます。ダブルクリックでボーン作成開始です。
ボーンは親子関係があるので、腰から頭、肩から指先、腿からひざ下、のようにつないでいきます。
次に Auto Weights でボーンとメッシュを紐付けます。
が、真っ赤になってうまくいかなかったので、一旦Weights>Clearでクリアしてから Weight Brushで重みを付けていきます。
ボーンを選択して回転させると、影響範囲に応じてメッシュが変形します。
引き続きどんどん塗っていきます。途中ボーンを回転させて確認しながら、重みがおかしいところを修正していきます。
作ったスプライトをHierarchyにドラッグ&ドロップして画面に表示します。
Inspector上でAdd Component > 2D Animation > Sprite Skin を選択し、
以下のスクリプトをブラブラさせたい関節にアタッチして
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PendulumTransform : MonoBehaviour
{
[SerializeField] Transform m_targetTr=null;
[SerializeField, Range(-180f, 180f)] float m_range=5f;
[SerializeField, Range(0.5f, 100f)] float m_period = 4f;
Quaternion m_defRot;
float m_freqTimer;
// Start is called before the first frame update
void Start()
{
if (m_targetTr == null)
{
m_targetTr = transform;
}
m_defRot = m_targetTr.localRotation;
m_freqTimer = 0f;
}
// Update is called once per frame
void Update()
{
m_freqTimer += Time.deltaTime / m_period;
if(m_freqTimer > 1f)
{
m_freqTimer -= 1f;
}
float amgle = Mathf.Sin(m_freqTimer * Mathf.PI*2f);
m_targetTr.localRotation = m_defRot * Quaternion.AngleAxis(amgle * m_range, Vector3.forward);
}
}
Unity RecorderでMovie化すれば完成!