Unityの忘備録です('◇')ゞ

自分用の忘備録です!

【Unity】RigBuilderコンポーネントのRigLayersをスクリプトから取得する!!

ゲーム制作お疲れ様です~( ^^) _旦~~

下の画像の丸印の所をスクリプトでオンかオフに切り替える方法です!

まず、対象のRigBuilderコンポーネントを取得しましょう!

using UnityEngine.Animations.Rigging;

RigBuilder rigBuilder;

 private void Start()
        {
             rigBuilder = GetComponent<RigBuilder>();
         }


そしてどこかの関数の中で下記のように宣言すれば切替ができます!

rigBuilder.layers[0].active = false;


active = falseとすることで指定したインデックスのLayerは非アクティブとなり、
インスペクターでチェックが外れた状態となります!

trueはその逆ですね!

RigBuilderコンポーネントのRigLayersはListになっているので、
インデックスを指定する必要があります('◇')ゞ

インデックスの番号はインスペクターのRigLayersの上から順に0,1・・ となっているので、
一番上のLayerを取得したい場合は0になります。



なぜ外そうとおもったか

アニメーションリギングを使ってIKを設定しプレイヤーに銃を持たせていると、物を拾うなどの手を使うアニメーション再生時も
銃を持っている手のままになってしまいます( ;∀;)

アニメーション再生時に上記をオフに出来れば解決するのでは・・・?

と考えてスクリプトで操作する方法をググりまくったのですがでてこず・・・orz

Layersがリストだと気づいたので自力で解決できました!


最後にスクリプトの全体を載せますね~(^^)
参考までにぃ~

using UnityEngine;
using UnityEngine.Animations.Rigging;

public class Test : MonoBehaviour
{

    RigBuilder rigBuilder;

    private void Start()
    {
        rigBuilder = GetComponent<RigBuilder>();
    }

    public void EnableRigBuilder(string rigName) //アクティブにする関数
    {
        if (rigName == "LeftHand")
        {
            rigBuilder.layers[0].active = true;
        }
        else if (rigName == "RightHand")
        {
            rigBuilder.layers[1].active = true;
        }
    }

    public void DisableRigBuilder(string rigName) //非アクティブにする関数
    {
        if (rigName == "LeftHand")
        {
            rigBuilder.layers[0].active = false;
        }
        else if (rigName == "RightHand")
        {
            rigBuilder.layers[1].active = false;
        }
    }
}

おわり(^^)