回答編集履歴

9

言い回し

2022/10/17 10:46

投稿

UnchFullburst
UnchFullburst

スコア663

test CHANGED
@@ -13,7 +13,6 @@
13
13
  >PlayerでplayerInputを使って入力を受け取り、playerMovementのyPositionに代入して動かそうと思ったが、
14
14
  >yPositionがprivateのため
15
15
 
16
- これもとてつもなく重要です。
17
16
  単一責任にするなら、Playerは「playerMovementがyPositionを持っているから、移動するならこいつのyPositionに代入してtransformを動かさないとな」と考えちゃダメです。
18
17
  それは結局移動のロジックについて、Playerも責任持って関わっていることになるので、単一責任原則ではありません。
19
18
 

8

言い回し修正

2022/10/17 10:27

投稿

UnchFullburst
UnchFullburst

スコア663

test CHANGED
@@ -14,8 +14,8 @@
14
14
  >yPositionがprivateのため
15
15
 
16
16
  これもとてつもなく重要です。
17
- Playerは「playerMovementがyPositionを持っているから、移動するならこいつのyPositionに代入してtransformを動かさないとな」と考えちゃダメです。
17
+ 単一責任にするなら、Playerは「playerMovementがyPositionを持っているから、移動するならこいつのyPositionに代入してtransformを動かさないとな」と考えちゃダメです。
18
- それは結局Player責任持って移動に関わっているので、責任分割きていないです
18
+ それは結局移動のロジックについて、Player責任持って関わっていることになるので、単一責任原則はありません
19
19
 
20
20
  ```C#
21
21
  public class Player : MonoBehaviour

7

言い回し修正

2022/10/17 10:21

投稿

UnchFullburst
UnchFullburst

スコア663

test CHANGED
@@ -13,8 +13,8 @@
13
13
  >PlayerでplayerInputを使って入力を受け取り、playerMovementのyPositionに代入して動かそうと思ったが、
14
14
  >yPositionがprivateのため
15
15
 
16
- もうこれとてつもなく重要なところです。
16
+ これとてつもなく重要です。
17
- Playerは「playerMovementがyPositionを持っているから、移動するならこいつのyPositionを動かさないとな」とか知ってちゃダメです。
17
+ Playerは「playerMovementがyPositionを持っているから、移動するならこいつのyPositionに代入してtransformを動かさないとな」とか考えちゃダメです。
18
18
  それは結局Playerが責任持って移動に関わっているので、責任分割できていないです。
19
19
 
20
20
  ```C#

6

言い回し

2022/10/17 10:18

投稿

UnchFullburst
UnchFullburst

スコア663

test CHANGED
@@ -15,7 +15,7 @@
15
15
 
16
16
  もうこれがとてつもなく重要なところです。
17
17
  Playerは「playerMovementがyPositionを持っているから、移動するならこいつのyPositionを動かさないとな」とか知ってちゃダメです。
18
- それは結局Playerが責任持って移動に関わっているので、全然責任分割できていないです。
18
+ それは結局Playerが責任持って移動に関わっているので、責任分割できていないです。
19
19
 
20
20
  ```C#
21
21
  public class Player : MonoBehaviour

5

言い回し修正

2022/10/17 09:54

投稿

UnchFullburst
UnchFullburst

スコア663

test CHANGED
@@ -15,7 +15,7 @@
15
15
 
16
16
  もうこれがとてつもなく重要なところです。
17
17
  Playerは「playerMovementがyPositionを持っているから、移動するならこいつのyPositionを動かさないとな」とか知ってちゃダメです。
18
- それは結局Player自身考えて責任持って移動ているので、全然責任分割できていないです。
18
+ それは結局Playerが責任持って移動に関わっているので、全然責任分割できていないです。
19
19
 
20
20
  ```C#
21
21
  public class Player : MonoBehaviour

4

言い回し修正

2022/10/17 09:53

投稿

UnchFullburst
UnchFullburst

スコア663

test CHANGED
@@ -15,6 +15,7 @@
15
15
 
16
16
  もうこれがとてつもなく重要なところです。
17
17
  Playerは「playerMovementがyPositionを持っているから、移動するならこいつのyPositionを動かさないとな」とか知ってちゃダメです。
18
+ それは結局Player自身が考えて責任持って移動しているので、全然責任分割できていないです。
18
19
 
19
20
  ```C#
20
21
  public class Player : MonoBehaviour

3

言い回し修正

2022/10/17 09:48

投稿

UnchFullburst
UnchFullburst

スコア663

test CHANGED
@@ -9,6 +9,12 @@
9
9
 
10
10
  「いや、playerMovement.Move()とかplayerInput.GetInput()とか俺知らねぇんだけど!?」とお思いでしょうが、そこが一番のキモです。
11
11
  Playerから見たとき、「中で何をやっているか知らないけど、やれって行ったらやってくれることは知ってる」みたいにするのが重要です。
12
+
13
+ >PlayerでplayerInputを使って入力を受け取り、playerMovementのyPositionに代入して動かそうと思ったが、
14
+ >yPositionがprivateのため
15
+
16
+ もうこれがとてつもなく重要なところです。
17
+ Playerは「playerMovementがyPositionを持っているから、移動するならこいつのyPositionを動かさないとな」とか知ってちゃダメです。
12
18
 
13
19
  ```C#
14
20
  public class Player : MonoBehaviour

2

言い回し変更

2022/10/17 09:30

投稿

UnchFullburst
UnchFullburst

スコア663

test CHANGED
@@ -8,7 +8,7 @@
8
8
  playerMovement.Move(input)は、入ってきたvector3に沿って移動するメソッドです。
9
9
 
10
10
  「いや、playerMovement.Move()とかplayerInput.GetInput()とか俺知らねぇんだけど!?」とお思いでしょうが、そこが一番のキモです。
11
- 「中で何をやっているか知らないけど、やれって行ったらやってくれることは知ってる」みたいにするのが重要です。
11
+ Playerから見たとき、「中で何をやっているか知らないけど、やれって行ったらやってくれることは知ってる」みたいにするのが重要です。
12
12
 
13
13
  ```C#
14
14
  public class Player : MonoBehaviour

1

追記

2022/10/17 09:26

投稿

UnchFullburst
UnchFullburst

スコア663

test CHANGED
@@ -1 +1,31 @@
1
1
  教材を見ないと適用後コードの意図が分からないので適当なことしか言えませんが、とりあえず普通にpublicなメソッドとかプロパティを設定しないとどうしようもないと思います。
2
+
3
+ ---
4
+ 普通に書けば以下の感じのPlayerクラスだと、いい感じに単一責任原則です。(修正前のコードを見る限り、PlayerはPlayerAudioを知る必要すらありません。)
5
+
6
+ 入力に関する責任も移動に関する責任もPlayer自体は持っていないので簡潔かつ何をやっているのか分かりやすいです。
7
+ playerInput.GetInput();はプレイヤーの入力をvector3で返してくれるメソッド、
8
+ playerMovement.Move(input)は、入ってきたvector3に沿って移動するメソッドです。
9
+
10
+ 「いや、playerMovement.Move()とかplayerInput.GetInput()とか俺知らねぇんだけど!?」とお思いでしょうが、そこが一番のキモです。
11
+ 「中で何をやっているか知らないけど、やれって行ったらやってくれることは知ってる」みたいにするのが重要です。
12
+
13
+ ```C#
14
+ public class Player : MonoBehaviour
15
+ {
16
+ [SerializeField] private PlayerInput playerInput;
17
+ [SerializeField] private PlayerMovement playerMovement;
18
+
19
+ private void Start()
20
+ {
21
+ playerInput = GetComponent<PlayerInput>();
22
+ playerMovement = GetComponent<PlayerMovement>();
23
+ }
24
+
25
+ private void Update()
26
+ {
27
+ Vector3 input = playerInput.GetInput();
28
+ playerMovement.Move(input);
29
+ }
30
+ }
31
+ ```