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

質問編集履歴

1

ソースコードで関係のない部分を省略

2019/07/12 04:09

投稿

MrDAUSX
MrDAUSX

スコア13

title CHANGED
File without changes
body CHANGED
@@ -10,48 +10,24 @@
10
10
 
11
11
  ### 該当のソースコード
12
12
  ***Player.cs***
13
- ~略~
14
13
 
14
+ '''~略~
15
+
15
16
  public class Player : MovingObject
16
17
  {
17
18
  ~略~
18
- public Text foodText; //食料を表示するテキスト
19
- public int wallDamage = 1; //壁へのダメージ量
20
- public int pointsPerFood = 10; //食べ物の回復量
21
- public int pointsPerSoda = 20; //ソーダの回復量
22
- public float restartLevelDeray = 1f; //ステージ移動時の時間
23
-
24
- private Animator animator; //アニメーション用変数
25
- private int food; //食料
26
-
27
- ~略~
28
-
29
- //PlayerのfoodをGameManageに保存する
30
- public void OnDisable()
31
- {
32
- GameManager.instance.playerFoodPoints = food;
33
- }
34
-
35
19
  protected override void AttemptMove<T>(int xDir, int yDir)
36
20
  {
37
- //移動するたびに食料が減る
38
- food--;
21
+ ~略~
39
22
 
40
- //減らした食料をUIに表示する
41
- foodText.text = "Food: " + food;
42
-
43
23
  //MovingObjectのAttemptMoveを呼び出す
44
24
  base.AttemptMove<T>(xDir, yDir);
45
25
 
46
26
  RaycastHit2D hit;
47
27
 
28
+
48
- //動いた時の効果音を鳴らす
29
+     ~~略~~
49
- if (Move(xDir, yDir, out hit))
50
- {
51
- SoundManager.instance.RandomizeSFx(moveSound1, moveSound2);
52
- }
53
30
 
54
-
55
31
  //ゲームオーバーか確認
56
32
  CheckIfGameOver();
57
33
  //プレイヤーのターン終了
@@ -64,60 +40,13 @@
64
40
  //Wallスクリプトを使えるように設定
65
41
  Wall hitWall = component as Wall;
66
42
  //壁にダメージを与える
67
- hitWall.DamageWall(wallDamage);
43
+ '''hitWall.DamageWall(wallDamage);//'''
44
+ //↑もうまくいっていない
68
45
  //チョップするアニメーションを呼び出す
69
46
  animator.SetTrigger("PlayerChop");
70
47
  }
48
+
71
49
 
72
- //プレイヤーが、Exit、Food、Sodaと接触した場合に呼び出す
73
- private void OnTriggerEnter2D(Collider2D other)
74
- {
75
- //Exitと接触した場合
76
- if (other.tag == "Exit")
77
- {
78
- //ステージ移動の時間分待ってから、次のツテージに移動する
79
- Invoke("Restart", restartLevelDeray);
80
- //Disable the player object since level is over.
81
- enabled = false;
82
- }
83
- else if (other.tag == "Food")
84
- { //食料と接触した場合
85
- //食料を回復
86
- food += pointsPerFood;
87
- //増えた食料をUIに表示する
88
- foodText.text = "+" + pointsPerFood + " Food: " + food;
89
- //食べた時の効果音を鳴らす
90
- SoundManager.instance.RandomizeSFx(eatSound1, eatSound2);
91
-
92
- //食料を削除
93
- other.gameObject.SetActive(false);
94
- }
95
- else if (other.tag == "Soda")
96
- {
97
- //食料を回復
98
- food += pointsPerSoda;
99
- //増えた食料をUIに表示する
100
- foodText.text = "+" + pointsPerFood + " Food: " + food;
101
- //飲んだ時の効果音を鳴らす
102
- SoundManager.instance.RandomizeSFx(drinkSound1, drinkSound2);
103
- //ソーダを削除
104
- other.gameObject.SetActive(false);
105
- }
106
- }
107
-
108
- //プレイヤーが敵に攻撃された場合、食料を減らす
109
- internal void LoseFood(int loss)
110
- {
111
- //攻撃を受けたアニメーションを呼び出す
112
- animator.SetTrigger("PlayerHit");
113
- //食料を減らす
114
- food -= loss;
115
- //減らした食料をUIに表示する
116
- foodText.text = "-" + loss + " Food: " + food;
117
- //ゲームオーバーか判定
118
- CheckIfGameOver();
119
- }
120
-
121
50
  ~~略~~
122
51
 
123
52
 
@@ -152,45 +81,15 @@
152
81
  }
153
82
  }
154
83
 
155
- //食料が0いかになった場合、ゲームオーバーにする
156
- private void CheckIfGameOver()
157
- {
158
- if (food <= 0)
84
+ ~~略~~
159
- {
160
- //ゲームオーバーの時の効果音を鳴らす
161
- SoundManager.instance.PlaySingle(gameoverSound);
162
- SoundManager.instance.musicSource.Stop();
163
-
164
- //GameManagerのGameOverを呼び出す
165
- GameManager.instance.GameOver();
166
- }
167
- }
168
85
  }
169
86
 
170
87
  ****MovingObject***
171
- using System.Collections;
172
- using System.Collections.Generic;
173
- using UnityEngine;
174
88
 
175
89
  public abstract class MovingObject : MonoBehaviour
176
90
  {
177
- public float moveTime = 0.1f; // //動く時間
178
- public LayerMask blockingLayer;
91
+ ~~略~~
179
92
 
180
- private BoxCollider2D boxCollider; //コンポーネント
181
- private Rigidbody2D rd2D; //コンポーネント
182
- private float inverseMoveTime;
183
-
184
- // Use this for initialization
185
- //継承クラスでオーバーライドできるようにする
186
- protected virtual void Start()
187
- {
188
- //コンポーネントを取得する
189
- boxCollider = GetComponent<BoxCollider2D>();
190
- rd2D = GetComponent<Rigidbody2D>();
191
- inverseMoveTime = 1f / moveTime;
192
- }
193
-
194
93
  //移動可能か判断する ※blockingLayerに衝突する場合、移動しない
195
94
  //boolはtrueかfalseを返す
196
95
  //outで指定した変数は、取得可能になる
@@ -219,60 +118,10 @@
219
118
  return false;
220
119
  }
221
120
 
222
- //継承クラスでオーバーライドできるようにする
223
- //移動を試し、書が異物がある場合、移動不可の場合の処理を呼び出す
224
- protected virtual void AttemptMove<T>(int xDir, int yDir)
225
- where T : Component //後からコンポーネントを決める
226
- {
227
- RaycastHit2D hit;
228
- //Moveメソッドを実行し、移動可能か判定する
229
- bool canMove = Move(xDir, yDir, out hit);
230
- Debug.Log(canMove);
231
- //hitがnullの場合 ※現在地から目的地の間にblockingLayerに該当するものがない場合
232
- if (hit.transform == null)
233
- {
234
- return;
121
+ ~~以下略~~
235
- }
236
- //現在地から目的地の間にblockingLayerに該当するものがある場合
237
- //障害物のコンポーネントを取得
238
- T hitComponet = hit.transform.GetComponent<T>();
239
122
 
240
- //障害物がある場合、移動不可の場合の処理を呼び出す
241
- if (!canMove && hitComponet != null)
242
- {
243
- OnCantMove(hitComponet);
244
- }
245
123
 
246
- }
247
124
 
248
- //現在地から目的地までの距離を求めて移動する
249
- protected IEnumerator SmoothMovement(Vector3 end)
250
- {
251
- //目的地までの距離を計算 ※現在地:transform.position、目的地:end、距離を求める:.sqrMagnitude
252
- float sqrRemainingDistance = (transform.position - end).sqrMagnitude;
253
-
254
- //目的地に限りなく近くまで繰り返し実行する
255
- while (sqrRemainingDistance > float.Epsilon)
256
- {
257
- //1フレームあたりの移動距離を計算する ※Time.deltaTime:1フレームあたりの時間
258
- Vector3 newPosition = Vector3.MoveTowards(rd2D.position, end, inverseMoveTime * Time.deltaTime);
259
- //移動距離分、移動する
260
- rd2D.MovePosition(newPosition);
261
- //移動した場所から、目的地までの距離を再計算する
262
- sqrRemainingDistance = (transform.position - end).sqrMagnitude;
263
- //移動するのに1フレーム使うため、1フレーム待機
264
- yield return null;
265
- }
266
- }
267
-
268
- //抽象クラス
269
- protected abstract void OnCantMove<T>(T component)
270
- where T : Component;
271
- }
272
-
273
-
274
-
275
-
276
125
  ```ここに言語名を入力
277
126
  C#
278
127
  ```