unity3d – Unity C#: how can i return a list/array/length of the variables inside an animator component?

You can do

  • Get all Animator.parameters
  • Filter out only those that are Bool parameters using Linq Where
  • Use Linq Any or Linq All according to your needs to check if one or all of these parameters fulfill a certain condition. In your case whether GetBool returns true

Something like e.g.

using System.Linq;

...

var animator = GetComponent<Animator>();
var allParameters = animator.parameters;
// Filter and get only those of type Bool
var allBoolParameters = allParameters.Where(p => p.type == AnimatorControllerParameterType.Bool);

// Check if any of them is true
var anyBoolParameterIsTrue = allBoolParameters.Any(p => animator.GetBool(p.nameHash));

// Check if All of them are true
var allBoolParametersAreTrue = allBoolParameters.All(p => animator.GetBool(p.nameHash));

Basically this somewhat equals doing something like this without Linq

var animator = GetComponent<Animator>();
var allParameters = animator.parameters;

// Filter and get only those that are of type Bool
var allBoolParameters = new List<AnimatorControllerParameter>();
foreach(var p in allParameters)
{
    if(p.type != AnimatorControllerParameterType.Bool) continue;

    allBoolParameters.Add(p);
}

// Check if any of them is true
var anyBoolParameterIsTrue = false;
foreach(var p in allBoolParameters)
{
    if(animator.GetBool(p.nameHash)) 
    {
        anyBoolParameterIsTrue = true;
        break;
    }
}

// Check if all of them are true
var allBoolParametersAreTrue = true;
foreach(var p in allBoolParameters)
{
    if(!animator.GetBool(p.nameHash)) 
    {
        allBoolParametersAreTrue = false;
        break;
    }
}

Read more here: Source link