回答編集履歴
10
解決しました。
test
CHANGED
@@ -34,10 +34,44 @@
|
|
34
34
|
|
35
35
|
```
|
36
36
|
|
37
|
-
#残りの問題
|
37
|
+
#残りの問題
|
38
38
|
|
39
39
|
地面の角度とキャラクターを平行にするのとは別に
|
40
40
|
|
41
41
|
左右どちらかに回転させたい。つまりY軸の回転。
|
42
42
|
|
43
43
|
Y軸の回転のみQuaternion.FromToRotationの影響を受けないようにしたい。
|
44
|
+
|
45
|
+
|
46
|
+
|
47
|
+
#最終的なコード
|
48
|
+
|
49
|
+
```C#
|
50
|
+
|
51
|
+
if(Physics.Raycast(transform.position, -transform.up, out RaycastHit hit, float.PositiveInfinity))
|
52
|
+
|
53
|
+
{
|
54
|
+
|
55
|
+
transform.rotation = Quaternion.Lerp(transform.rotation, Quaternion.LookRotation(Vector3.Cross(-hit.normal, transform.right)), 0.1f);
|
56
|
+
|
57
|
+
}
|
58
|
+
|
59
|
+
```
|
60
|
+
|
61
|
+
#コード説明
|
62
|
+
|
63
|
+
[放線に一致するように回転](https://answers.unity.com/questions/1752427/rotating-to-match-normal-quaternionfromtorotationp.html)
|
64
|
+
|
65
|
+
[キャラクターから見て対象への角度を「-180~180度」の範囲で求める](https://tsubakit1.hateblo.jp/entry/2018/02/05/235634)
|
66
|
+
|
67
|
+
[Quaternionの使い方](https://www.f-sp.com/entry/2017/08/30/171353)
|
68
|
+
|
69
|
+
|
70
|
+
|
71
|
+
#残りの問題で記述した問題点について...(恥)
|
72
|
+
|
73
|
+
書き忘れていましたが今回のキャラクターはAnimatorのApply Root Motionで行っていました。
|
74
|
+
|
75
|
+
移動のアニメーションの場合は良いですが方向転換のアニメーションとコードでの回転操作が邪魔して
|
76
|
+
|
77
|
+
うまく方向転換されてなかったようです。ですので方向転換のアニメーションのみコードで操作するようにすると解決しました。
|
9
誤字修正
test
CHANGED
@@ -6,7 +6,7 @@
|
|
6
6
|
|
7
7
|
```C#
|
8
8
|
|
9
|
-
transform.rotation *= Quaternion.FromToRotation(transform.up, t
|
9
|
+
transform.rotation *= Quaternion.FromToRotation(transform.up, hit.normal);
|
10
10
|
|
11
11
|
```
|
12
12
|
|
@@ -14,7 +14,7 @@
|
|
14
14
|
|
15
15
|
```C#
|
16
16
|
|
17
|
-
transform.rotation = Quaternion.FromToRotation(transform.up, t
|
17
|
+
transform.rotation = Quaternion.FromToRotation(transform.up, hit.normal) * transform.rotation;
|
18
18
|
|
19
19
|
```
|
20
20
|
|
8
誤字修正
test
CHANGED
@@ -22,8 +22,6 @@
|
|
22
22
|
|
23
23
|
あとガタガタ不自然に傾いてしまうのでLerpを追記し自然に動くようにしました。
|
24
24
|
|
25
|
-
Vector3型testを使用するのをやめました。xのみ0を代入するようにしていましたが状況が悪化していただけでした。
|
26
|
-
|
27
25
|
```C#
|
28
26
|
|
29
27
|
if(Physics.Raycast(transform.position, -transform.up, out RaycastHit hit, float.PositiveInfinity))
|
7
進捗
test
CHANGED
@@ -22,15 +22,15 @@
|
|
22
22
|
|
23
23
|
あとガタガタ不自然に傾いてしまうのでLerpを追記し自然に動くようにしました。
|
24
24
|
|
25
|
+
Vector3型testを使用するのをやめました。xのみ0を代入するようにしていましたが状況が悪化していただけでした。
|
26
|
+
|
25
27
|
```C#
|
26
28
|
|
27
29
|
if(Physics.Raycast(transform.position, -transform.up, out RaycastHit hit, float.PositiveInfinity))
|
28
30
|
|
29
31
|
{
|
30
32
|
|
31
|
-
Vector3 test = new Vector3(0, hit.normal.y, hit.normal.z);
|
32
|
-
|
33
|
-
transform.rotation = Quaternion.Lerp(transform.rotation, Quaternion.FromToRotation(transform.up, t
|
33
|
+
transform.rotation = Quaternion.Lerp(transform.rotation, Quaternion.FromToRotation(transform.up, hit.normal) * transform.rotation, 0.1f);
|
34
34
|
|
35
35
|
}
|
36
36
|
|
6
誤字修正
test
CHANGED
@@ -1,10 +1,16 @@
|
|
1
|
+
#コードの訂正箇所
|
2
|
+
|
1
3
|
どうやら下記コードで挙動が違うようです。
|
4
|
+
|
5
|
+
<訂正前>
|
2
6
|
|
3
7
|
```C#
|
4
8
|
|
5
9
|
transform.rotation *= Quaternion.FromToRotation(transform.up, test);
|
6
10
|
|
7
11
|
```
|
12
|
+
|
13
|
+
<訂正後>
|
8
14
|
|
9
15
|
```C#
|
10
16
|
|
5
誤字修正
test
CHANGED
@@ -12,7 +12,7 @@
|
|
12
12
|
|
13
13
|
```
|
14
14
|
|
15
|
-
ですので次のように記述すれば
|
15
|
+
ですので次のように記述すれば良いみたいです。
|
16
16
|
|
17
17
|
あとガタガタ不自然に傾いてしまうのでLerpを追記し自然に動くようにしました。
|
18
18
|
|
4
誤字修正
test
CHANGED
@@ -32,4 +32,8 @@
|
|
32
32
|
|
33
33
|
#残りの問題点
|
34
34
|
|
35
|
+
地面の角度とキャラクターを平行にするのとは別に
|
36
|
+
|
37
|
+
左右どちらかに回転させたい。つまりY軸の回転。
|
38
|
+
|
35
|
-
Quaternion.FromToRotation
|
39
|
+
Y軸の回転のみQuaternion.FromToRotationの影響を受けないようにしたい。
|
3
残りの問題点の追記
test
CHANGED
@@ -12,7 +12,7 @@
|
|
12
12
|
|
13
13
|
```
|
14
14
|
|
15
|
-
ですので次のように記述すれば
|
15
|
+
ですので次のように記述すれば少しはマシになりました。
|
16
16
|
|
17
17
|
あとガタガタ不自然に傾いてしまうのでLerpを追記し自然に動くようにしました。
|
18
18
|
|
@@ -29,3 +29,7 @@
|
|
29
29
|
}
|
30
30
|
|
31
31
|
```
|
32
|
+
|
33
|
+
#残りの問題点
|
34
|
+
|
35
|
+
Quaternion.FromToRotationで回転させているため方向転換しにくい
|
2
誤字修正
test
CHANGED
@@ -26,4 +26,6 @@
|
|
26
26
|
|
27
27
|
transform.rotation = Quaternion.Lerp(transform.rotation, Quaternion.FromToRotation(transform.up, test) * transform.rotation, 0.1f);
|
28
28
|
|
29
|
+
}
|
30
|
+
|
29
31
|
```
|
1
Lerpの追記
test
CHANGED
@@ -14,9 +14,7 @@
|
|
14
14
|
|
15
15
|
ですので次のように記述すれば解決しました。
|
16
16
|
|
17
|
-
|
17
|
+
あとガタガタ不自然に傾いてしまうのでLerpを追記し自然に動くようにしました。
|
18
|
-
|
19
|
-
角度が少し足りなかったりするのでそこは改善が必要です。
|
20
18
|
|
21
19
|
```C#
|
22
20
|
|
@@ -26,8 +24,6 @@
|
|
26
24
|
|
27
25
|
Vector3 test = new Vector3(0, hit.normal.y, hit.normal.z);
|
28
26
|
|
29
|
-
transform.rotation = Quaternion.FromToRotation(transform.up, test) * transform.rotation;
|
27
|
+
transform.rotation = Quaternion.Lerp(transform.rotation, Quaternion.FromToRotation(transform.up, test) * transform.rotation, 0.1f);
|
30
|
-
|
31
|
-
}
|
32
28
|
|
33
29
|
```
|