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

回答編集履歴

1

追記への回答

2020/06/08 13:51

投稿

GqewG9aG7S
GqewG9aG7S

スコア150

answer CHANGED
@@ -1,3 +1,31 @@
1
- 100減ってしまうのではなく、そもそも``heart2``が100になってないのでは?
1
+ ~~100減ってしまうのではなく、そもそも``heart2``が100になってないのでは?
2
2
  というか``heart2``の存在意義がわかりません。
3
- 全て``heart``に統一してしまえばいいのでは。
3
+ 全て``heart``に統一してしまえばいいのでは。~~
4
+ 修正された+勘違いだったので取り消し線
5
+
6
+ 追記に対する回答
7
+
8
+ Start()のコードにある、
9
+ heart2 = PlayerPrefs.GetInt("level");
10
+ が原因でしょう。
11
+
12
+ heart2は最初は900ですが、Start()した時点でPlayerPrefs.GetInt("level")に置き換えられ、クリックするとそこからPlayerPrefs.GetInt("level")が引かれるのですから、0になるのは当然と言えます。
13
+
14
+ また、Text.text = "HP: " + 900;という表記がありますが、違和感が2点。
15
+ ・両方固定なら普通に"HP: 900"でいい
16
+ ・そもそも、数値決め打ちは良くない
17
+ 前者はわかると思います。
18
+ 後者についてですが、以下の点から望ましくないです。
19
+ ・publicなことから、Editor側で変更するのも想定されてるのでしょうが、Editor側で数値が変更されても表示が変わらない
20
+ ・今回のようにミスで実際と違う数値が表示されてしまうことがある
21
+
22
+ 私の使う対処法を例としてあげると、changeHeartなどの関数を作り、そこでGUIと変数の書き換えを両方行います。
23
+ 変数を書き換える時必ず使うようにすることで、変数だけ変えてGUIを更新してなかった!などを防げます。
24
+ また、表示を"HP: "ではなくしたい!とか、一緒にこっちの表示も変えたい!などとなった場合に簡単に変更が可能です。
25
+ この方法が処理的に軽いかは知りませんが...
26
+ ```C#
27
+ public void changeHeart2(int value) { //動作未確認
28
+ heart2 = value;
29
+ Text.text = "HP: "+value;
30
+ }
31
+ ```