いんでぃーづ

ゲームいろいろ、いろいろ自由

Unity : シーン編集中にAnimator付き3Dモデルにポーズをとらせる

シーン内にオブジェクトを配置している際、人物モデルのAnimatorに設定してあるアニメーションのポーズをとらせたかったのに方法がわからなかったので、
スクリプトで強引に解決した。

下のようなかんじで、レイヤーが二つあるAnimatorを適用した人物モデルの場合。

f:id:sugar_affordance:20210816180923p:plain f:id:sugar_affordance:20210816180611p:plain

以下のスクリプトをAnimatorをもったモデルに適用。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;


[System.Serializable]
struct PoseAnimatorSetting {
    public string LayerName;
    public string StateName;
}

public class ApplyAnimatorPoseInScene : MonoBehaviour
{
#if UNITY_EDITOR
    [SerializeField]
    List<PoseAnimatorSetting> PoseAnimatorSettingList;

    [SerializeField]
    public float poseTimeInClip;

    private void OnValidate()
    {
        var animator = GetComponent<Animator>();
        foreach(var p in PoseAnimatorSettingList)
        {
            animator.PlayInFixedTime(p.StateName, animator.GetLayerIndex(p.LayerName), poseTimeInClip);
        }
        animator.Update(poseTimeInClip);
    }

#endif
}

インスペクタでポーズをとらせるアニメーションを設定する。

f:id:sugar_affordance:20210816180710p:plain

シーン編集中に自動でポーズとってくれるようになる。

f:id:sugar_affordance:20210816180826p:plain

そもエディタにこういう機能あるかも。しらん。


“Unity” and Unity logos are trademarks or registered trademarks of Unity Technologies or its affiliates in the U.S. and elsewhere, and are used under license.


免責事項

当サイトの広告バナー、リンクによって提供される情報、サービス内容について、当サイトは一切の責任を負いません。

また、当サイトの情報を元にユーザ様が不利益を被った場合にも、当サイトは一切の責任を負いません。

すべて自己責任でお願いします。