質問編集履歴

7

微修正

2021/03/17 02:07

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -92,7 +92,7 @@
92
92
 
93
93
 
94
94
 
95
- public class memo : MonoBehaviour
95
+ public class Bones : MonoBehaviour
96
96
 
97
97
  {
98
98
 

6

追記を統合

2021/03/17 02:07

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -54,7 +54,7 @@
54
54
 
55
55
  二つが合成されたものを実現する為にはどの様な方法があるのでしょうか?宜しくお願い致します.
56
56
 
57
- ### 追記1
57
+ ### 追記 LateUpdate()を試した際の挙動
58
58
 
59
59
  ところで,以前UnityのSetIKPositionWeight()…等の関数によるIK機能をスクリプトにて試した時には,アニメーターコントローラーによる既存のアニメーションとミックスされた結果となりました.この点について調べて見ると,
60
60
 
@@ -68,15 +68,21 @@
68
68
 
69
69
 
70
70
 
71
- との事でしたから,順序が先なので上書きされてしまったのだろうと思い,試しに先ほどの腕回転スクリプトをUpdate()ではなくLateUpdate()内に記述してみましたが,~~やはり反映されませんでした.~~ **最初の1フレーム分のみ反映されました.**
72
71
 
72
+
73
- ひょっとするとスクリプトが作用しているの「Runtime Animator Controller」というアニメーターコンローラーでIdleモーションアニメーターコントローラーとは別物…という事かな?と思案ています
73
+ 0. との事でしたから,順序が先なので上書きされてしまたのだろう思い,試しに先ほどの腕回転スクリプトをUpdate()でなくLateUpdate()内に記述してみましたが,~~やはり反映されませんでした.~~ **継続的に指定単位量ずつ回り続ける最初の1フレム分のみ回った状態でスタートしてそれ以降変化でし**
74
74
 
75
75
 
76
76
 
77
- #### 追記2 LateUpdate()した際の挙動
77
+ 0. しかし,LookAt関数で向き変更ようとする時,実行中にターゲットオブジェクトを移動させると正しく継続的に反映されまし
78
78
 
79
- 追記1述べた様に「1フレーム毎腕をx回転」という様な内容をLateUpdate()に書,継続的にxずつ回り続けるのではなく,1度きりxだけ回った状態でスタートしその後変化なしとった具合でした.
79
+ 以下サイトはアニメーション中のLookAtを試していますがこれはUpdate()中書く上手く行かなのでLateUpdate()に書こう,述べられていした.
80
+
81
+ [Unity でアニメーションさせながらスクリプトでモデルを動かす](https://www.matatabi-ux.com/entry/2018/03/28/100000)
82
+
83
+
84
+
85
+
80
86
 
81
87
 
82
88
 
@@ -92,6 +98,8 @@
92
98
 
93
99
  [SerializeField] Animator _animator;
94
100
 
101
+ [SerializeField] GameObject _target;
102
+
95
103
  Transform arm;
96
104
 
97
105
 
@@ -102,9 +110,9 @@
102
110
 
103
111
  arm=_animator.GetBoneTransform(HumanBodyBones.LeftUpperArm);
104
112
 
105
- arm.Rotate(new Vector3(90,0,0)); //毎フレーム90度ずつ回し続ける
113
+ arm.Rotate(new Vector3(90,0,0)); //90度回った状態でスタートてそれ以降変化なし(最初の1フレーム分しか機能していない?)
106
114
 
107
- //→90度回った状態でスタートしてそれ以降変化なし(最初の1フレーム分しか機能していない?)
115
+ arm.LookAt(_target.transform);//こちらは実行中に_targetオブジェクを移動させると正機能する
108
116
 
109
117
  }
110
118
 

5

}抜け

2021/03/17 01:09

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -108,6 +108,8 @@
108
108
 
109
109
  }
110
110
 
111
+ }
112
+
111
113
 
112
114
 
113
115
  ```

4

追記2

2021/03/17 00:49

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -54,7 +54,7 @@
54
54
 
55
55
  二つが合成されたものを実現する為にはどの様な方法があるのでしょうか?宜しくお願い致します.
56
56
 
57
- ### 追記
57
+ ### 追記1
58
58
 
59
59
  ところで,以前UnityのSetIKPositionWeight()…等の関数によるIK機能をスクリプトにて試した時には,アニメーターコントローラーによる既存のアニメーションとミックスされた結果となりました.この点について調べて見ると,
60
60
 
@@ -68,9 +68,51 @@
68
68
 
69
69
 
70
70
 
71
- との事でしたから,順序が先なので上書きされてしまったのだろうと思い,試しに先ほどの腕回転スクリプトをUpdate()ではなくLateUpdate()内に記述してみましたが,やはり反映されませんでした.
71
+ との事でしたから,順序が先なので上書きされてしまったのだろうと思い,試しに先ほどの腕回転スクリプトをUpdate()ではなくLateUpdate()内に記述してみましたが,~~やはり反映されませんでした.~~ **最初の1フレーム分のみ反映されました.**
72
72
 
73
73
  ひょっとするとスクリプトが作用しているのは「Runtime Animator Controller」というアニメーターコントローラーで,Idleモーションアニメーターコントローラーとは別物なので…という事かな?と思案しています.
74
+
75
+
76
+
77
+ #### 追記2 LateUpdate()を試した際の挙動
78
+
79
+ 上の追記1で述べた様に,「1フレーム毎に腕をx回転」という様な内容をLateUpdate()に書くと,継続的にxずつ回り続けるのではなく,1度きりxだけ回った状態でスタートしてその後変化なしといった具合でした.
80
+
81
+
82
+
83
+ ```C#
84
+
85
+ using UnityEngine;
86
+
87
+
88
+
89
+ public class memo : MonoBehaviour
90
+
91
+ {
92
+
93
+ [SerializeField] Animator _animator;
94
+
95
+ Transform arm;
96
+
97
+
98
+
99
+ void LateUpdate()
100
+
101
+ {
102
+
103
+ arm=_animator.GetBoneTransform(HumanBodyBones.LeftUpperArm);
104
+
105
+ arm.Rotate(new Vector3(90,0,0)); //毎フレーム90度ずつ回し続ける
106
+
107
+ //→90度回った状態でスタートしてそれ以降変化なし(最初の1フレーム分しか機能していない?)
108
+
109
+ }
110
+
111
+
112
+
113
+ ```
114
+
115
+
74
116
 
75
117
 
76
118
 

3

微修正

2021/03/17 00:48

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -68,9 +68,9 @@
68
68
 
69
69
 
70
70
 
71
- との事でしたから,いう事ならと思い,試しに先ほどの腕回転スクリプトをUpdate()ではなくLateUpdate()内に記述してみましたが,やはり反映されませんでした.
71
+ との事でしたから,順序が先なので上書きされてしまったのだろうと思い,試しに先ほどの腕回転スクリプトをUpdate()ではなくLateUpdate()内に記述してみましたが,やはり反映されませんでした.
72
72
 
73
- 自分の解釈しては,スクリプトが作用しているのは「Runtime Animator Controller」というアニメーターコントローラーで,Idleモーションアニメーターコントローラーとは別物なので…という事かな?と思います.
73
+ ひょっするとスクリプトが作用しているのは「Runtime Animator Controller」というアニメーターコントローラーで,Idleモーションアニメーターコントローラーとは別物なので…という事かな?と思案しています.
74
74
 
75
75
 
76
76
 

2

追記:試した事

2021/03/16 14:27

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -52,15 +52,25 @@
52
52
 
53
53
 
54
54
 
55
+ 二つが合成されたものを実現する為にはどの様な方法があるのでしょうか?宜しくお願い致します.
56
+
57
+ ### 追記
58
+
55
- 自分の解釈してはスクリプトが作用しているのは「Runtime Animator Controller」というアニメーターコントローラーで,Idleモーションアニメーターコトローラーは別物なので…とう事かな?思います.
59
+ ころで以前UnityのSetIKPositionWeight()…等の関数によるIK機能をスクリプトにて試した時には,アニメーターコントローラーによる既存のアニメーションとミックスされた結果とりました.こ点につて調べて見る
56
60
 
57
61
 
58
62
 
63
+ - [イベント関数の実行順序-Unityマニュアル](https://docs.unity3d.com/ja/2018.4/Manual/ExecutionOrder.html)
64
+
65
+ - [Unity Humanoid制御でVRアバターを作りたい](https://qiita.com/mkt_/items/04e6e53ddac0ad6f4d94#setbonelocalrotation%E9%96%A2%E6%95%B0%E3%81%AB%E3%82%88%E3%82%8Bik%E5%89%B2%E8%BE%BC%E3%81%BF%E5%87%A6%E7%90%86)
66
+
67
+ > 処理順番は、Update()関数⇒Animation再生⇒BoneLocalRotation()関数⇒IK処理⇒LateUpdate()関数となっており…
59
68
 
60
69
 
61
70
 
71
+ との事でしたから,そういう事ならと思い,試しに先ほどの腕回転スクリプトをUpdate()ではなくLateUpdate()内に記述してみましたが,やはり反映されませんでした.
62
72
 
63
- 二つが合成されたもを実現する為にどの様な方法るのでしょうか?宜しくお願致します.
73
+ 自分解釈として,スクリプト作用しているのは「Runtime Animator Controller」というアニメーターコントローラー,Idleモーションアニメーターコントローラーとは別物なので…といと思います.
64
74
 
65
75
 
66
76
 

1

画像の差し替え

2021/03/16 14:25

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -8,7 +8,7 @@
8
8
 
9
9
  キャラクターに下図の様なIdle状態のモーションをさせるアニメーターコントローラーを指定したアニメーターがアタッチされています.
10
10
 
11
- ![イメージ説明](c8438af939dcb0ad59606ce2969512ec.png)
11
+ ![イメージ説明](edd4b10feeac8126b3cba7cfbdaa6d58.png)
12
12
 
13
13
  さらに,例えばこの様な腕を回転させ続けるスクリプトを作り,これもアタッチしました.
14
14