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

回答編集履歴

15

修正

2020/03/31 14:32

投稿

Hawn
Hawn

スコア1222

answer CHANGED
@@ -27,10 +27,7 @@
27
27
  ThirdPersonCharacterのカメラを子にしていない時と同じような動きは下記コードで近付けると思います。
28
28
 
29
29
  **・変更点**
30
- `transform.Translate(translation);`
31
- ↓ 変更
32
- `transform.position += translation;`
30
+ `transform.Translate(translation);`を`transform.position += translation;`に変更。
33
-
34
31
  滑らかな回転にする為`Quaternion.Slerp`を追加。
35
32
 
36
33
  ```C#
@@ -62,6 +59,7 @@
62
59
  }
63
60
  ```
64
61
 
62
+ ---
65
63
  **・ThirdPersonCharacterとの相違点**
66
64
  ・アニメーション制御していないのでもちろん移動アニメをしない
67
65
  ・キャラクターの子にカメラを入れても追跡の挙動にならないのでおかしくなる(カメラはキャラの子にしないで下さい)

14

修正

2020/03/31 14:32

投稿

Hawn
Hawn

スコア1222

answer CHANGED
@@ -26,8 +26,11 @@
26
26
  **・追記1:コメント内容を受けての新しいコード**
27
27
  ThirdPersonCharacterのカメラを子にしていない時と同じような動きは下記コードで近付けると思います。
28
28
 
29
- ・変更点
29
+ **・変更点**
30
+ `transform.Translate(translation);`
31
+ ↓ 変更
30
- `transform.Translate(translation);`を`transform.position += translation;`に変えて下さい。
32
+ `transform.position += translation;`
33
+
31
34
  滑らかな回転にする為`Quaternion.Slerp`を追加。
32
35
 
33
36
  ```C#

13

修正

2020/03/31 14:30

投稿

Hawn
Hawn

スコア1222

answer CHANGED
@@ -26,8 +26,9 @@
26
26
  **・追記1:コメント内容を受けての新しいコード**
27
27
  ThirdPersonCharacterのカメラを子にしていない時と同じような動きは下記コードで近付けると思います。
28
28
 
29
+ ・変更点
29
- transform.position += translation;に変えて下さい。
30
+ `transform.Translate(translation);`を`transform.position += translation;`に変えて下さい。
30
- また想定違いだった申し訳いです。
31
+ 回転にる為`Quaternion.Slerp`を追加
31
32
 
32
33
  ```C#
33
34
  void Update()

12

修正

2020/03/31 14:29

投稿

Hawn
Hawn

スコア1222

answer CHANGED
@@ -25,16 +25,11 @@
25
25
  ---
26
26
  **・追記1:コメント内容を受けての新しいコード**
27
27
  ThirdPersonCharacterのカメラを子にしていない時と同じような動きは下記コードで近付けると思います。
28
+
29
+ transform.position += translation;に変えて下さい。
28
30
  また想定違いだったら申し訳ないです。
29
31
 
30
32
  ```C#
31
- using UnityEngine;
32
-
33
- public class UnkomanControl : MonoBehaviour
34
- {
35
- private Vector3 velocity; //新しく追加した変数
36
- float rotSpeed = 0.2f; //新しく追加した変数
37
-
38
33
  void Update()
39
34
  {
40
35
  float x;
@@ -42,22 +37,25 @@
42
37
  Vector3 translation = Vector3.zero;
43
38
  float runVelocity = 7.0f;
44
39
 
40
+ z = Input.GetAxis("Vertical");
45
41
  x = Input.GetAxis("Horizontal");
46
- z = Input.GetAxis("Vertical");
47
42
 
48
43
  translation.x = x * runVelocity * Time.deltaTime;
49
44
  translation.z = z * runVelocity * Time.deltaTime;
50
45
 
51
- //** Translateを削除して追記した部分
46
+ transform.position += translation;
52
- velocity = translation.normalized * runVelocity * Time.deltaTime;
53
47
 
48
+ Vector3 diff = transform.position - UnkomanPos;
54
- if (velocity.magnitude > 0)
49
+ Vector3 stop = Vector3.zero;
50
+
51
+ if (x != 0)
55
52
  {
56
- Quaternion look = Quaternion.LookRotation(velocity);
53
+ Quaternion look = Quaternion.LookRotation(diff,Vector3.up);
57
- transform.rotation = Quaternion.Slerp(transform.rotation, look, rotSpeed);
54
+ transform.rotation = Quaternion.Slerp(transform.rotation, look, 0.2f);
58
- transform.position += translation;
59
55
  }
56
+
60
- //**
57
+ UnkomanPos = transform.position;
58
+ }
61
59
  ```
62
60
 
63
61
  **・ThirdPersonCharacterとの相違点**

11

修正

2020/03/31 14:25

投稿

Hawn
Hawn

スコア1222

answer CHANGED
@@ -60,11 +60,6 @@
60
60
  //**
61
61
  ```
62
62
 
63
- **・解説**
64
- `Quaternion.LookRotation(velocity);`で入力されたベクトル方向を算出。
65
- `Quaternion.Slerp(transform.rotation, look, rotSpeed);`で上記方向に滑らかな回転。
66
- `transform.position += translation;`最後にキャラクター位置を動かしています。
67
-
68
63
  **・ThirdPersonCharacterとの相違点**
69
64
  ・アニメーション制御していないのでもちろん移動アニメをしない
70
65
  ・キャラクターの子にカメラを入れても追跡の挙動にならないのでおかしくなる(カメラはキャラの子にしないで下さい)

10

修正

2020/03/31 14:20

投稿

Hawn
Hawn

スコア1222

answer CHANGED
@@ -60,8 +60,7 @@
60
60
  //**
61
61
  ```
62
62
 
63
- 新しい処理の内容は`Translateを削除して追記した部分`以下です。
63
+ **・解説**
64
-
65
64
  `Quaternion.LookRotation(velocity);`で入力されたベクトル方向を算出。
66
65
  `Quaternion.Slerp(transform.rotation, look, rotSpeed);`で上記方向に滑らかな回転。
67
66
  `transform.position += translation;`最後にキャラクター位置を動かしています。

9

修正

2020/03/31 14:19

投稿

Hawn
Hawn

スコア1222

answer CHANGED
@@ -27,8 +27,6 @@
27
27
  ThirdPersonCharacterのカメラを子にしていない時と同じような動きは下記コードで近付けると思います。
28
28
  また想定違いだったら申し訳ないです。
29
29
 
30
- 新しい処理の内容は`Translateを削除して追記した部分`以下です。
31
-
32
30
  ```C#
33
31
  using UnityEngine;
34
32
 
@@ -62,8 +60,10 @@
62
60
  //**
63
61
  ```
64
62
 
63
+ 新しい処理の内容は`Translateを削除して追記した部分`以下です。
64
+
65
- `Quaternion.LookRotation(velocity);`で入力されたベクトル方向を算出して
65
+ `Quaternion.LookRotation(velocity);`で入力されたベクトル方向を算出
66
- `Quaternion.Slerp(transform.rotation, look, rotSpeed);`で滑らかな回転。
66
+ `Quaternion.Slerp(transform.rotation, look, rotSpeed);`で上記方向に滑らかな回転。
67
67
  `transform.position += translation;`最後にキャラクター位置を動かしています。
68
68
 
69
69
  **・ThirdPersonCharacterとの相違点**

8

修正

2020/03/31 14:17

投稿

Hawn
Hawn

スコア1222

answer CHANGED
@@ -71,4 +71,4 @@
71
71
  ・キャラクターの子にカメラを入れても追跡の挙動にならないのでおかしくなる(カメラはキャラの子にしないで下さい)
72
72
  ・Uターンした時の減衰が無い
73
73
 
74
- ThirdPersonCharacterと全く同じ挙動にするのであればやはり元のコード参照した方が良いです。
74
+ ThirdPersonCharacterと全く同じ挙動にするのであればここからの道のは結構あるので元のコード参照した方が良いです。

7

修正

2020/03/31 14:13

投稿

Hawn
Hawn

スコア1222

answer CHANGED
@@ -23,7 +23,7 @@
23
23
  `Update`内をこれに差し替えて想定する動きかになるかどうか教えて下さい。
24
24
 
25
25
  ---
26
- **・追記1:コメント内容を受けて新しいコード**
26
+ **・追記1:コメント内容を受けて新しいコード**
27
27
  ThirdPersonCharacterのカメラを子にしていない時と同じような動きは下記コードで近付けると思います。
28
28
  また想定違いだったら申し訳ないです。
29
29
 
@@ -62,6 +62,10 @@
62
62
  //**
63
63
  ```
64
64
 
65
+ `Quaternion.LookRotation(velocity);`で入力されたベクトル方向を算出して
66
+ `Quaternion.Slerp(transform.rotation, look, rotSpeed);`で滑らかな回転。
67
+ `transform.position += translation;`最後にキャラクター位置を動かしています。
68
+
65
69
  **・ThirdPersonCharacterとの相違点**
66
70
  ・アニメーション制御していないのでもちろん移動アニメをしない
67
71
  ・キャラクターの子にカメラを入れても追跡の挙動にならないのでおかしくなる(カメラはキャラの子にしないで下さい)

6

修正

2020/03/31 14:12

投稿

Hawn
Hawn

スコア1222

answer CHANGED
@@ -23,12 +23,12 @@
23
23
  `Update`内をこれに差し替えて想定する動きかになるかどうか教えて下さい。
24
24
 
25
25
  ---
26
- 上記コードでは要件満たせないらしいので以下は元のコードを修正して下さい。
27
-
28
- **・追記1:コメント内容を受けて**
26
+ **・追記1:コメント内容を受けて新しいコード**
29
27
  ThirdPersonCharacterのカメラを子にしていない時と同じような動きは下記コードで近付けると思います。
30
28
  また想定違いだったら申し訳ないです。
31
29
 
30
+ 新しい処理の内容は`Translateを削除して追記した部分`以下です。
31
+
32
32
  ```C#
33
33
  using UnityEngine;
34
34
 

5

修正

2020/03/31 14:08

投稿

Hawn
Hawn

スコア1222

answer CHANGED
@@ -25,8 +25,46 @@
25
25
  ---
26
26
  上記コードでは要件満たせないらしいので以下は元のコードを修正して下さい。
27
27
 
28
- **・追記1**
28
+ **・追記1:コメント内容を受けて**
29
- > 1.座標ベクトル計算からy軸のみ無効化する方法はないのでしょか?
29
+ ThirdPersonCharacterカメラ子にしていない時と同じよな動きは下記コードで近付けると思います。
30
+ また想定違いだったら申し訳ないです。
30
31
 
32
+ ```C#
33
+ using UnityEngine;
34
+
35
+ public class UnkomanControl : MonoBehaviour
36
+ {
37
+ private Vector3 velocity; //新しく追加した変数
38
+ float rotSpeed = 0.2f; //新しく追加した変数
39
+
40
+ void Update()
41
+ {
42
+ float x;
43
+ float z;
44
+ Vector3 translation = Vector3.zero;
45
+ float runVelocity = 7.0f;
46
+
47
+ x = Input.GetAxis("Horizontal");
48
+ z = Input.GetAxis("Vertical");
49
+
50
+ translation.x = x * runVelocity * Time.deltaTime;
51
+ translation.z = z * runVelocity * Time.deltaTime;
52
+
31
- 取り合えずこれの解決法ですがZ移動をした際に回転処理をさせなければ良いです。
53
+ //** Translate削除て追記し部分
54
+ velocity = translation.normalized * runVelocity * Time.deltaTime;
55
+
32
- `if (diff != stop)`を`if (x != 0)`に変えて下さい
56
+ if (velocity.magnitude > 0)
57
+ {
58
+ Quaternion look = Quaternion.LookRotation(velocity);
59
+ transform.rotation = Quaternion.Slerp(transform.rotation, look, rotSpeed);
60
+ transform.position += translation;
61
+ }
62
+ //**
63
+ ```
64
+
65
+ **・ThirdPersonCharacterとの相違点**
66
+ ・アニメーション制御していないのでもちろん移動アニメをしない
67
+ ・キャラクターの子にカメラを入れても追跡の挙動にならないのでおかしくなる(カメラはキャラの子にしないで下さい)
68
+ ・Uターンした時の減衰が無い
69
+
70
+ ThirdPersonCharacterと全く同じ挙動にするのであればやはり元のコード参照した方が良いです。

4

修正

2020/03/31 14:07

投稿

Hawn
Hawn

スコア1222

answer CHANGED
@@ -26,6 +26,7 @@
26
26
  上記コードでは要件満たせないらしいので以下は元のコードを修正して下さい。
27
27
 
28
28
  **・追記1**
29
- >1.座標のベクトル計算からy軸のみを無効化する方法はないのでしょうか?
29
+ > 1.座標のベクトル計算からy軸のみを無効化する方法はないのでしょうか?
30
+
30
- これの解決法ですがZ方向した際に回転させなければ良いです。
31
+ 取り合えずこれの解決法ですがZ移動をした際に回転処理をさせなければ良いです。
31
- if (diff != stop)if (x != 0)に変えて下さい
32
+ `if (diff != stop)``if (x != 0)`に変えて下さい

3

修正

2020/03/31 09:01

投稿

Hawn
Hawn

スコア1222

answer CHANGED
@@ -20,4 +20,12 @@
20
20
  }
21
21
  ```
22
22
 
23
- `Update`内をこれに差し替えて想定する動きかになるかどうか教えて下さい。
23
+ `Update`内をこれに差し替えて想定する動きかになるかどうか教えて下さい。
24
+
25
+ ---
26
+ 上記コードでは要件満たせないらしいので以下は元のコードを修正して下さい。
27
+
28
+ **・追記1**
29
+ >1.座標のベクトル計算からy軸のみを無効化する方法はないのでしょうか?
30
+ これの解決法ですがZ方向を押した際に回転させなければ良いです。
31
+ 「if (diff != stop)」を「if (x != 0)」に変えて下さい

2

修正

2020/03/31 06:09

投稿

Hawn
Hawn

スコア1222

answer CHANGED
@@ -1,5 +1,5 @@
1
1
  こんばんは
2
- 想定している回転具合が判らないのですがHorizontalを使った単純な回転は`transform.Rotate(new Vector3(0, x, 0));`だけで良いかと思います。
2
+ 想定している回転具合が判らないのですがHorizontalを使った単純な回転は`transform.Rotate(0, x, 0);`だけで良いかと思います。
3
3
 
4
4
  ```C#
5
5
  void Update()
@@ -16,7 +16,7 @@
16
16
  translation.z = z * runVelocity * Time.deltaTime;
17
17
 
18
18
  transform.Translate(translation);
19
- transform.Rotate(new Vector3(0, x, 0));
19
+ transform.Rotate(0, x, 0);
20
20
  }
21
21
  ```
22
22
 

1

修正

2020/03/30 16:25

投稿

Hawn
Hawn

スコア1222

answer CHANGED
@@ -1,5 +1,5 @@
1
1
  こんばんは
2
- 想定している回転具合が判らないのですが単純なHorizontalを使った回転は`transform.Rotate(new Vector3(0, x, 0));`だけで良いかと思います。
2
+ 想定している回転具合が判らないのですがHorizontalを使った単純な回転は`transform.Rotate(new Vector3(0, x, 0));`だけで良いかと思います。
3
3
 
4
4
  ```C#
5
5
  void Update()