回答編集履歴

10

解決しました。

2021/11/06 10:43

投稿

_hello_world_
_hello_world_

スコア24

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

誤字修正

2021/11/06 10:43

投稿

_hello_world_
_hello_world_

スコア24

test CHANGED
@@ -6,7 +6,7 @@
6
6
 
7
7
  ```C#
8
8
 
9
- transform.rotation *= Quaternion.FromToRotation(transform.up, test);
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, test) * transform.rotation;
17
+ transform.rotation = Quaternion.FromToRotation(transform.up, hit.normal) * transform.rotation;
18
18
 
19
19
  ```
20
20
 

8

誤字修正

2021/10/31 15:02

投稿

_hello_world_
_hello_world_

スコア24

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

進捗

2021/10/31 15:02

投稿

_hello_world_
_hello_world_

スコア24

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, test) * transform.rotation, 0.1f);
33
+ transform.rotation = Quaternion.Lerp(transform.rotation, Quaternion.FromToRotation(transform.up, hit.normal) * transform.rotation, 0.1f);
34
34
 
35
35
  }
36
36
 

6

誤字修正

2021/10/31 15:01

投稿

_hello_world_
_hello_world_

スコア24

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

誤字修正

2021/10/31 14:48

投稿

_hello_world_
_hello_world_

スコア24

test CHANGED
@@ -12,7 +12,7 @@
12
12
 
13
13
  ```
14
14
 
15
- ですので次のように記述すれば少しはマシになりました。
15
+ ですので次のように記述すれば良いみいです
16
16
 
17
17
  あとガタガタ不自然に傾いてしまうのでLerpを追記し自然に動くようにしました。
18
18
 

4

誤字修正

2021/10/31 14:43

投稿

_hello_world_
_hello_world_

スコア24

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

残りの問題点の追記

2021/10/31 14:30

投稿

_hello_world_
_hello_world_

スコア24

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

誤字修正

2021/10/31 14:26

投稿

_hello_world_
_hello_world_

スコア24

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の追記

2021/10/31 13:58

投稿

_hello_world_
_hello_world_

スコア24

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
  ```