teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

スクリプトの例を追記

2021/07/15 21:09

投稿

Bongo
Bongo

スコア10816

answer CHANGED
@@ -1,2 +1,34 @@
1
1
  ご質問者さんも`Animator`に何かしらの手段が用意されているだろうと目星を付けていらっしゃったかと思うのですが、ここは単にググるよりも本家リファレンスにターゲットを絞った方がよかったかもしれませんね。
2
- 恥ずかしながら私も知らなかったため探してみたところ、どうやら[parameterCount](https://docs.unity3d.com/ja/current/ScriptReference/Animator-parameterCount.html)でパラメーターの数を取得、[GetParameter](https://docs.unity3d.com/ja/current/ScriptReference/Animator.GetParameter.html)でインデックスを指定してパラメーター情報を取得、[parameters](https://docs.unity3d.com/ja/current/ScriptReference/Animator-parameters.html)ですべてのパラメーター情報を配列として取得できるようです。そして取得したパラメーター情報の[name](https://docs.unity3d.com/ja/current/ScriptReference/AnimatorControllerParameter-name.html)がパラメーター名を表しているようですね。ご参考になりますでしょうか?
2
+ 恥ずかしながら私も知らなかったため探してみたところ、どうやら[parameterCount](https://docs.unity3d.com/ja/current/ScriptReference/Animator-parameterCount.html)でパラメーターの数を取得、[GetParameter](https://docs.unity3d.com/ja/current/ScriptReference/Animator.GetParameter.html)でインデックスを指定してパラメーター情報を取得、[parameters](https://docs.unity3d.com/ja/current/ScriptReference/Animator-parameters.html)ですべてのパラメーター情報を配列として取得できるようです。そして取得したパラメーター情報の[name](https://docs.unity3d.com/ja/current/ScriptReference/AnimatorControllerParameter-name.html)がパラメーター名を表しているようですね。ご参考になりますでしょうか?
3
+
4
+ ## パラメーター番号をもとにパラメーターを設定する例
5
+
6
+ ```lang-csharp
7
+ using System.Linq;
8
+ using UnityEngine;
9
+
10
+ [RequireComponent(typeof(Animator))]
11
+ public class CharacterAnimationController : MonoBehaviour
12
+ {
13
+ Animator animator;
14
+ int[] parameterIds;
15
+
16
+ void Awake()
17
+ {
18
+ animator = GetComponent<Animator>();
19
+
20
+ // あらかじめAnimatorからパラメーターを取得して配列にしておく
21
+ // さらに、高速化のためパラメーター名の代わりにパラメーターIDを使う
22
+ parameterIds = animator.parameters.Select(parameter => parameter.nameHash).ToArray();
23
+ }
24
+
25
+ void Update()
26
+ {
27
+ // そして、ゲーム実行中にパラメーターを操作したい時にはparameterIdsから
28
+ // パラメーターIDを取得する
29
+ // たとえば下記の例では、3番目のパラメーター(Parametersの上から数えて4番目)を
30
+ // スペースキーを押したらtrue、離したらfalseにする
31
+ animator.SetBool(parameterIds[3], Input.GetKey(KeyCode.Space));
32
+ }
33
+ }
34
+ ```