質問編集履歴
6
文章を修正
test
CHANGED
@@ -1 +1 @@
|
|
1
|
-
[Unity3D]
|
1
|
+
[Unity3D]モンハン、ゼルダの伝説等の3DアクションRPGのキャラクター移動を実装したい
|
test
CHANGED
@@ -1,12 +1,13 @@
|
|
1
1
|
##### 質問内容
|
2
|
-
モンスターハンターやゼルダの伝説等の3Dアクションゲームのキャラクター動作
|
2
|
+
モンスターハンターやゼルダの伝説等の3Dアクションゲームのキャラクター動作を作成したいのですがほとんど実装出来たのですが
|
3
|
-
|
4
|
-
##### 現状
|
5
|
-
|
3
|
+
キャラクターを移動しながら少しずつ左右にスティックを倒して回転させるとなんかカクっって移動したり移動モーションが歩き多めのモーションブレンドに変わったりと色々おかしい原因がわかりません。
|
6
|
-
円を描くように回っているとキャラクターの向きが一瞬だけおかしい位置になったりします。
|
7
4
|
|
8
5
|
#### 知りたいこと
|
6
|
+
上記の`質問内容部`の現象を踏まえて3DアクションRPGのキャラクターの動きはどうやって実装するのか知りたい
|
7
|
+
|
8
|
+
|
9
|
+
##### コード内容
|
9
|
-
|
10
|
+
3DアクションRPGのキャラクタの移動処理
|
10
11
|
|
11
12
|
##### 参考サイト
|
12
13
|
参考サイト: https://gametukurikata.com/animationanimator/blendtree2
|
@@ -21,11 +22,12 @@
|
|
21
22
|

|
22
23
|

|
23
24
|
##### プレイヤースクリプト
|
25
|
+
|
24
26
|
※`cameraControl.getForward()`関数はカメラから見てのアナログスティックの進行方向ベクトルです
|
25
27
|
|
26
28
|
```cs
|
29
|
+
using System.Collections;
|
27
30
|
using UnityEngine;
|
28
|
-
using System.Collections;
|
29
31
|
|
30
32
|
namespace Player
|
31
33
|
{
|
@@ -47,50 +49,35 @@
|
|
47
49
|
|
48
50
|
public GameObject effect;
|
49
51
|
|
52
|
+
[SerializeField,Range(0.0f,1.0f) ] private float speed;
|
53
|
+
[SerializeField,Range(0.0f,360.0f) ] private float rotate;
|
54
|
+
[SerializeField,Range(0.0f,360.0f) ] private float rotateSpeed = 500;
|
55
|
+
|
56
|
+
|
50
57
|
// Update is called once per frame
|
51
58
|
void Update()
|
52
59
|
{
|
53
60
|
|
54
|
-
if(control.getButton_A() == true)
|
55
|
-
{
|
56
|
-
animator.SetTrigger("MagicAttack");
|
57
|
-
}
|
58
|
-
|
59
|
-
if(control.getButton_B() == true)
|
60
|
-
{
|
61
|
-
|
62
|
-
}
|
63
|
-
|
64
|
-
|
65
|
-
|
61
|
+
animator.SetFloat("MoveSensitivity",cameraControl.getForward().magnitude);
|
66
62
|
|
67
63
|
|
68
|
-
|
69
|
-
animator.
|
70
|
-
|
71
|
-
if(cameraControl.getForward().magnitude > 0.0)
|
72
|
-
{
|
73
|
-
Debug.Log("回転量: " + Quaternion.FromToRotation(transform.forward, cameraControl.getForward()).eulerAngles.y);
|
64
|
+
Debug.Log("cameraControl.getForward().normalized.magnitude " + cameraControl.getForward().normalized.magnitude);
|
65
|
+
Debug.Log("Quaternion.FromToRotation(transform.forward, cameraControl.getForward()).eulerAngles.y " + Quaternion.FromToRotation(transform.forward, cameraControl.getForward()).eulerAngles.y);
|
74
66
|
|
75
67
|
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
}
|
84
|
-
else
|
85
|
-
{
|
86
|
-
animator.SetFloat("MoveTurnSensitivity", Quaternion.FromToRotation(transform.forward, cameraControl.getForward()).eulerAngles.y);
|
87
|
-
}
|
88
|
-
|
68
|
+
if(cameraControl.getForward().magnitude > 0)
|
69
|
+
{
|
70
|
+
transform.rotation = Quaternion.RotateTowards(transform.rotation, Quaternion.Euler(transform.eulerAngles.x, Quaternion.LookRotation(cameraControl.getForward().normalized).eulerAngles.y, transform.eulerAngles.z), rotateSpeed * Time.deltaTime);
|
71
|
+
}
|
72
|
+
if(Quaternion.FromToRotation(transform.forward, cameraControl.getForward()).eulerAngles.y > 180)
|
73
|
+
{
|
74
|
+
animator.SetFloat("MoveTurnSensitivity",Quaternion.FromToRotation(transform.forward, cameraControl.getForward()).eulerAngles.y - 360);
|
89
75
|
}
|
90
76
|
else
|
91
77
|
{
|
92
|
-
|
78
|
+
animator.SetFloat("MoveTurnSensitivity", Quaternion.FromToRotation(transform.forward, cameraControl.getForward()).eulerAngles.y);
|
93
79
|
}
|
80
|
+
|
94
81
|
}
|
95
82
|
}
|
96
83
|
}
|
5
文章とタイトルを修正
test
CHANGED
@@ -1 +1 @@
|
|
1
|
-
[Unity3D] 3Dアクションゲームの作成
|
1
|
+
[Unity3D] 3Dアクションゲームの作成 斜め移動のモーションをブレンドする方法が知りたい
|
test
CHANGED
@@ -1,30 +1,33 @@
|
|
1
1
|
##### 質問内容
|
2
|
-
モンスターハンターやゼルダの伝説等の3Dアクションゲームのキャラクター動作の作成で斜め
|
2
|
+
モンスターハンターやゼルダの伝説等の3Dアクションゲームのキャラクター動作の作成で斜めに移動する際に横回転アニメーションをブレンドして推移する動きを再現したい。
|
3
3
|
|
4
|
-
#####
|
4
|
+
##### 現状
|
5
|
-
|
5
|
+
ほとんど実装できているのですが、スティックを最大に倒してちょっとずつ左や右に倒すとある角度でカクって角度が変わったり
|
6
|
-
|
6
|
+
円を描くように回っているとキャラクターの向きが一瞬だけおかしい位置になったりします。
|
7
|
-
##### わかっていること
|
8
|
-
`Vector3.Angle(cameraControl.getForward(), prevVector)`を使って傾きを取得してそれをモーション値のどこかで使うはずなのですがそれがわかりません。
|
9
|
-
ただモーション推移を実装することなら実現しましたが斜め移動等の微妙な動作の実装方法がわかりません
|
10
7
|
|
8
|
+
#### 知りたいこと
|
9
|
+
上記の`現状`部のような現象の原因が知りたい
|
11
10
|
|
12
11
|
##### 参考サイト
|
12
|
+
参考サイト: https://gametukurikata.com/animationanimator/blendtree2
|
13
|
+
run : https://www.mixamo.com/#/?page=1&query=fast+run&type=Motion%2CMotionPack
|
14
|
+
idle: https://www.mixamo.com/#/?page=1&query=idle&type=Motion%2CMotionPack
|
15
|
+
right turn : https://www.mixamo.com/#/?page=1&query=right+turn&type=Motion%2CMotionPack
|
13
|
-
|
16
|
+
left turn : https://www.mixamo.com/#/?page=1&query=turn&type=Motion%2CMotionPack
|
17
|
+
walk : https://www.mixamo.com/#/?page=1&query=walk&type=Motion%2CMotionPack
|
18
|
+
turn : https://www.mixamo.com/#/?page=1&query=turn&type=Motion%2CMotionPack
|
14
19
|
|
15
|
-
##### 実現したいこと
|
16
|
-
モンスターハンターやゼルダの伝説等の3Dアクションゲームのキャラクター動作の作成で斜め前に移動する際や前に進んでいて後ろ側に振り向いて進む動作のモーション推移
|
17
|
-
|
18
|
-
#####
|
20
|
+
##### アニメーター
|
21
|
+

|
22
|
+

|
23
|
+
##### プレイヤースクリプト
|
19
|
-
|
24
|
+
※`cameraControl.getForward()`関数はカメラから見てのアナログスティックの進行方向ベクトルです
|
20
|
-
|
21
|
-
|
22
25
|
|
23
26
|
```cs
|
27
|
+
using UnityEngine;
|
24
28
|
using System.Collections;
|
25
|
-
using UnityEngine;
|
26
29
|
|
27
|
-
namespace
|
30
|
+
namespace Player
|
28
31
|
{
|
29
32
|
public class PlayerAnimation : MonoBehaviour
|
30
33
|
{
|
@@ -42,6 +45,8 @@
|
|
42
45
|
|
43
46
|
private Vector3 prevVector;
|
44
47
|
|
48
|
+
public GameObject effect;
|
49
|
+
|
45
50
|
// Update is called once per frame
|
46
51
|
void Update()
|
47
52
|
{
|
@@ -56,19 +61,39 @@
|
|
56
61
|
|
57
62
|
}
|
58
63
|
|
64
|
+
|
65
|
+
Debug.Log(Quaternion.LookRotation(cameraControl.getForward()).eulerAngles.y);
|
59
66
|
|
60
|
-
|
61
|
-
|
62
|
-
|
67
|
+
|
68
|
+
|
69
|
+
animator.SetFloat("MoveSensitivity", cameraControl.getForward().magnitude);
|
70
|
+
|
71
|
+
if(cameraControl.getForward().magnitude > 0.0)
|
72
|
+
{
|
73
|
+
Debug.Log("回転量: " + Quaternion.FromToRotation(transform.forward, cameraControl.getForward()).eulerAngles.y);
|
74
|
+
|
75
|
+
|
76
|
+
transform.rotation = Quaternion.RotateTowards(transform.rotation, Quaternion.Euler(transform.eulerAngles.x, Quaternion.LookRotation(cameraControl.getForward()).eulerAngles.y, transform.eulerAngles.z), 1000 * Time.deltaTime);
|
77
|
+
|
78
|
+
|
79
|
+
if(Quaternion.FromToRotation(transform.forward, cameraControl.getForward()).eulerAngles.y > 180)
|
80
|
+
{
|
81
|
+
animator.SetFloat("MoveTurnSensitivity", Quaternion.FromToRotation(transform.forward, cameraControl.getForward()).eulerAngles.y - 180.0f);
|
82
|
+
|
83
|
+
}
|
84
|
+
else
|
85
|
+
{
|
86
|
+
animator.SetFloat("MoveTurnSensitivity", Quaternion.FromToRotation(transform.forward, cameraControl.getForward()).eulerAngles.y);
|
87
|
+
}
|
88
|
+
|
63
89
|
}
|
64
|
-
|
65
|
-
|
66
|
-
|
90
|
+
else
|
67
|
-
|
91
|
+
{
|
68
|
-
animator.SetFloat("MoveSensitivity",
|
92
|
+
//animator.SetFloat("MoveTurnSensitivity",0);
|
69
|
-
|
70
|
-
|
93
|
+
}
|
71
94
|
}
|
72
95
|
}
|
73
96
|
}
|
74
97
|
```
|
98
|
+
|
99
|
+
|
4
文章を修正
test
CHANGED
File without changes
|
test
CHANGED
@@ -14,7 +14,12 @@
|
|
14
14
|
|
15
15
|
##### 実現したいこと
|
16
16
|
モンスターハンターやゼルダの伝説等の3Dアクションゲームのキャラクター動作の作成で斜め前に移動する際や前に進んでいて後ろ側に振り向いて進む動作のモーション推移
|
17
|
+
|
17
|
-
#####
|
18
|
+
##### 調査したこと
|
19
|
+
前の移動ベクトルから今の移動ベクトルの間の角度を取得してそれを向き反転モーションの値に使うことで移動量の分移動させることができるはずです。
|
20
|
+
|
21
|
+
|
22
|
+
|
18
23
|
```cs
|
19
24
|
using System.Collections;
|
20
25
|
using UnityEngine;
|
3
文章を修正
test
CHANGED
@@ -1 +1 @@
|
|
1
|
-
[Unity3D] 3Dアクションゲームの作成で斜めに向いて移動させるモーション推移を作成したい
|
1
|
+
[Unity3D] 3Dアクションゲームの作成で斜めに向いて移動させるモーションブレンド推移を作成したい
|
test
CHANGED
File without changes
|
2
文章を修正
test
CHANGED
File without changes
|
test
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
|
4
4
|
##### 知りたいこと
|
5
5
|
キャラクターの向きを反転させるアニメーションを用いてキャラクターに斜め移動のモーションを実装したい。
|
6
|
-
|
6
|
+
`わかっていること`部の関数の値を何処に使えばいいのか知りたい
|
7
7
|
##### わかっていること
|
8
8
|
`Vector3.Angle(cameraControl.getForward(), prevVector)`を使って傾きを取得してそれをモーション値のどこかで使うはずなのですがそれがわかりません。
|
9
9
|
ただモーション推移を実装することなら実現しましたが斜め移動等の微妙な動作の実装方法がわかりません
|
1
文章を修正
test
CHANGED
File without changes
|
test
CHANGED
@@ -6,6 +6,8 @@
|
|
6
6
|
|
7
7
|
##### わかっていること
|
8
8
|
`Vector3.Angle(cameraControl.getForward(), prevVector)`を使って傾きを取得してそれをモーション値のどこかで使うはずなのですがそれがわかりません。
|
9
|
+
ただモーション推移を実装することなら実現しましたが斜め移動等の微妙な動作の実装方法がわかりません
|
10
|
+
|
9
11
|
|
10
12
|
##### 参考サイト
|
11
13
|
モーションサイト(180度回転モーション): https://www.mixamo.com/#/?page=1&query=turn&type=Motion%2CMotionPack
|