﻿1
00:00:04,340 --> 00:00:05,390
‫こんにちは､ ようこそ｡

2
00:00:05,390 --> 00:00:09,320
‫今回のレクチャーでは､ こちらのアクターにダメージを与えることにします｡

3
00:00:09,320 --> 00:00:13,610
‫アクターのtake damageという仮想メソッドをオーバーライドすることでそれを実現します｡

4
00:00:13,610 --> 00:00:18,380
‫このログを見ると､ このキャラクターを撃つと体力がどんどん減っていき､ ゼロになったところで止まってしまい､

5
00:00:18,380 --> 00:00:21,860
‫マイナスの数字にはならないことがわかります｡

6
00:00:21,860 --> 00:00:23,780
‫では､ その方法を潜入してみましょう｡

7
00:00:26,450 --> 00:00:36,590
‫ですから､ 現在､ この男などのアクターにダメージを与えることはできても､ 実際にそのダメージを受けることはありません｡

8
00:00:36,590 --> 00:00:46,080
‫ここで最終講義の仮想メソッドの出番です｡ beginやplay､ ticと同じように､ アクターにダメージを与えることができるようにしたいからです｡

9
00:00:46,100 --> 00:00:53,160
‫さて､ 幸いなことに､ アクターHに移動してこの中を少し見てみると､ このテイクダメージバーチャルメソッドがあることがわかります｡

10
00:00:53,180 --> 00:01:01,470
‫これはイベントでも可能で､ 以前はイベントに登録するような方法を見たことがあるかもしれません｡

11
00:01:01,490 --> 00:01:09,680
‫これから行うのは､ ダメージを与える方法を変えるだけです｡ コンポーネントではなく､ アクターに対してダメージを蓄積させるのです｡

12
00:01:10,160 --> 00:01:15,950
‫そして､ そのダメージを簡単に受けられるのが､ こちらのバーチャルメソッドです｡

13
00:01:15,950 --> 00:01:18,620
‫そして､ これがオーバーライドする仮想メソッドです｡

14
00:01:18,620 --> 00:01:25,210
‫これをコピーして､ 特定のアクター､ つまりシューターキャラクターに移動して､ シューターキャラクターのドットHを検索するのが手っ取り早いでしょう｡

15
00:01:25,250 --> 00:01:35,480
‫そして､ ひとつ確認したいのは､ このアクターのドットHがどこに来るかということです｡

16
00:01:35,720 --> 00:01:41,660
‫ですから､ 上にスクロールすれば､ どのセクションにいるのかがわかるはずです｡

17
00:01:42,080 --> 00:01:51,200
‫だから､ 私たちが公開されているか､ 彼らが行くのか､ 私たちは公開セクションにいるのか､ それを見つけるまで右上にスクロールするつもりです｡

18
00:01:51,200 --> 00:01:54,530
‫だから､ これはここでも公開されるべきなんだ｡

19
00:01:54,530 --> 00:02:00,200
‫前回の講義でお話したように､ overrideを使用すると､

20
00:02:00,440 --> 00:02:17,180
‫仮想メソッドを親からオーバーライドしていることを確認できます｡

21
00:02:17,180 --> 00:02:21,560
‫そしてここでは､ ダメージを受けるために入ってくるデータをすべて見ることができます｡

22
00:02:21,560 --> 00:02:30,530
‫損害額､ 損害イベント､ 損害を与えているコントローラー､ 誘因､ 損害原因を把握しました｡

23
00:02:30,530 --> 00:02:34,250
‫銃から通していたものが､ ここでも出てきているんです｡

24
00:02:34,250 --> 00:02:35,150
‫だからすごいんです｡

25
00:02:35,150 --> 00:02:43,820
‫次に､ コントロールシフトを押しながら実装を作成するか､ コピー＆ペーストを行うと､ ダメージを受ける実装を作成することができます｡

26
00:02:43,820 --> 00:02:49,250
‫しかし､ まず注意しなければならないのは､ 何かをオーバーライドするときはいつでも､ 親クラスのtake

27
00:02:49,250 --> 00:02:58,580
‫damageのバージョンを呼び出すことを考えなければならないということです｡ なぜなら､ その中に実行する必要のある実装があるかもしれないからです｡

28
00:02:58,940 --> 00:03:00,140
‫というわけで､ そういうことになります｡

29
00:03:00,170 --> 00:03:01,070
‫私たちはいつもこうしています｡

30
00:03:01,070 --> 00:03:02,210
‫技術でやってきた｡

31
00:03:02,210 --> 00:03:03,710
‫Begin Playでやりました｡

32
00:03:03,710 --> 00:03:09,200
‫これは､ メソッドをオーバーライドするときに､ それを完全にオーバーライドするためです｡

33
00:03:09,200 --> 00:03:11,120
‫その行動を完全に排除します｡

34
00:03:11,120 --> 00:03:17,630
‫ですから､ もし私たちがそのような行動を取りたいのであれば（一般的にはそうですが）､ 常にクールからスーパーにすることから始めるべきでしょう｡

35
00:03:17,630 --> 00:03:20,000
‫だから､ かっこよくテイクダウンをするんです｡

36
00:03:21,450 --> 00:03:23,580
‫その分､ ダメージ量が大きくなりますね｡

37
00:03:23,580 --> 00:03:25,760
‫だから､ ここがちょっと面倒くさいんですよね､ 悲しいかな｡

38
00:03:25,800 --> 00:03:27,870
‫私のオートコンプリートツールは､ このようなことはしてくれません｡

39
00:03:27,870 --> 00:03:29,250
‫ダメージイベント｡

40
00:03:30,560 --> 00:03:32,660
‫では､ その次は何だったのか｡

41
00:03:32,660 --> 00:03:34,970
‫コントロールはできていた｡

42
00:03:35,180 --> 00:03:37,550
‫では､ イベントの仕掛け人､ コピーしてみましょう｡

43
00:03:37,820 --> 00:03:42,380
‫そして､ ダメージを与える側､ つまりアクターがいる｡

44
00:03:43,160 --> 00:03:48,320
‫そのため､ ダメージを受けるという親実装にすべて呼び出されます｡

45
00:03:48,560 --> 00:03:52,220
‫そしてもうひとつは､ これが戻り値の型を持っていることです｡

46
00:03:52,220 --> 00:03:55,880
‫だから､ 実際に適用されたダメージは､ だからフロートをやるんです｡

47
00:03:56,750 --> 00:04:01,460
‫適用されるダメージは､ take damageの戻り値です｡

48
00:04:01,460 --> 00:04:05,000
‫そこで､ そのダメージを適用したまま保持することにしています｡

49
00:04:05,270 --> 00:04:11,450
‫そして現実的には､ 私たちの特定のユースケースにおける損害額と同じになりそうですが､ 必ずしもそうではないので､

50
00:04:11,450 --> 00:04:14,690
‫適用された損害額を使用することにします｡

51
00:04:14,720 --> 00:04:21,000
‫次にやりたいことは､ 実際にどれだけの健康があるのか､ という情報を押さえておくことです｡

52
00:04:21,020 --> 00:04:24,980
‫さて､ ここで2つの変数を使用する方法です｡

53
00:04:25,010 --> 00:04:32,090
‫まず1つ目は､ 少なくとも今はインスペクタでヘルスを見えるようにしたいので､ 2つとも新しいプロパティにするつもりです｡

54
00:04:32,420 --> 00:04:37,220
‫そして､ 最初の物件は健康度MAXにしてもらうことにしています｡

55
00:04:37,220 --> 00:04:39,620
‫これが､ 最初にヘルスを初期化するものです｡

56
00:04:39,620 --> 00:04:48,170
‫つまり､ ビープレイで使うからこそのエディットデフォルトになるわけですね｡

57
00:04:48,170 --> 00:04:53,120
‫そのため､ 効果の後に最大体力の値を変更しても､ 何の影響もありません｡

58
00:04:53,120 --> 00:05:06,230
‫そして､ もう1つのプロパティは､ 先ほど言ったように､ 検査できるようにするための新しいプロパティにします｡

59
00:05:06,230 --> 00:05:09,770
‫そして､ それをどこでも見えるようにする｡

60
00:05:10,690 --> 00:05:15,310
‫しかし､ 少なくとも現時点では､ その健康状態を変更できるようにしたくないので､ 編集可能ではありません｡

61
00:05:15,520 --> 00:05:18,950
‫デバッグのために必要かもしれませんが､ 私は必要ありません｡

62
00:05:18,970 --> 00:05:23,080
‫だから､ ここに健康があり､ 遊びがあるのです｡

63
00:05:23,260 --> 00:05:27,250
‫その健康が保たれるように設定するのです｡

64
00:05:28,080 --> 00:05:31,060
‫最大体力と同じです｡

65
00:05:31,080 --> 00:05:32,460
‫そこで､ まずはスポーン｡

66
00:05:32,460 --> 00:05:36,150
‫体力は最大値で､ あとは減らしていくだけです｡

67
00:05:36,780 --> 00:05:41,760
‫そこで､ そろそろキャラクターの体力を減らすことにチャレンジしてみませんか？

68
00:05:41,760 --> 00:05:48,480
‫ここで選択するのではなく､ ここで適用したダメージを使うということですね｡

69
00:05:48,480 --> 00:05:52,710
‫シューターキャラクター､ CPがダメージを受けるわけですね｡

70
00:05:52,710 --> 00:05:57,450
‫ダメージ量は決まっているのですが､ 実際にはテイクダメージから戻ってきたダメージを適用したいのです｡

71
00:05:57,450 --> 00:06:02,100
‫なぜなら､ それは親側の何らかの処理で減少している可能性があるからです｡

72
00:06:02,550 --> 00:06:03,420
‫だから､ そうするんです｡

73
00:06:03,420 --> 00:06:10,410
‫そして､ その目に向けて撮影しているときに､ 彼のヘルスが下がっていることを確認できるように､

74
00:06:10,410 --> 00:06:16,050
‫単純化のためにヘルスの値を減らして結果を記録し､ テストしています｡

75
00:06:16,050 --> 00:06:17,820
‫では､ ビデオを一時停止して､ やってみてください｡

76
00:06:18,060 --> 00:06:19,200
‫では､ お帰りなさい｡

77
00:06:19,200 --> 00:06:20,550
‫では､ 挑戦してみましょう｡

78
00:06:20,550 --> 00:06:27,930
‫ですから､ ヘルスは基本的に､ 適用されたダメージ分だけ減少させたいのです｡

79
00:06:29,260 --> 00:06:30,820
‫でも､ それでいいのでしょうか？

80
00:06:30,850 --> 00:06:37,150
‫もし､ 与えたダメージが残り体力より大きかったら？

81
00:06:37,330 --> 00:06:43,830
‫まあ､ その場合､ 適用されるダメージはその分の体力にしたいのでしょうけど｡

82
00:06:43,840 --> 00:06:47,860
‫だから､ この方法は､ ダメージが適用されたと言えるのです｡

83
00:06:48,770 --> 00:06:54,620
‫healthのf math dot minと等しくなければならない｡

84
00:06:55,610 --> 00:06:57,870
‫そして施されたダメージ｡

85
00:06:57,890 --> 00:07:01,010
‫だから､ これは基本的に適用したいダメージなんです｡

86
00:07:01,130 --> 00:07:06,260
‫そこで､ 「damage applied」ではなく､ 「damage applied」という名前に変更しようと思います｡

87
00:07:06,380 --> 00:07:10,040
‫塗るダメージとでも言いましょうか｡

88
00:07:10,780 --> 00:07:13,480
‫適用するダメージ

89
00:07:13,900 --> 00:07:18,490
‫ここで名前を変えて､ ダメージを適用してください｡

90
00:07:18,520 --> 00:07:21,450
‫適用するダメージをヘルスマイナスするんです｡

91
00:07:21,460 --> 00:07:22,180
‫なるほどね｡

92
00:07:22,180 --> 00:07:25,270
‫そして､ 基本的に最悪の場合､ それは健康になるだろう｡

93
00:07:25,270 --> 00:07:28,270
‫それで､ 健康状態がゼロになるんです｡

94
00:07:28,840 --> 00:07:33,070
‫そして､ 実際にかけたダメージは返すことになっていることを忘れないでください｡

95
00:07:33,070 --> 00:07:45,430
‫そして最後にUIIログを表示させますが､ これは警告に過ぎないので､ 私たちはそれを見ることができます｡

96
00:07:46,150 --> 00:07:56,020
‫そして､ これは左の健康状態にしたいのですが､ パーセントFにするか､ パーセント小文字Fにして､ フロートを表示させます｡

97
00:07:56,230 --> 00:08:03,070
‫そして､ その場でヘルスを入力し､ 先に進んでビルドを押すことができます｡

98
00:08:04,890 --> 00:08:05,220
‫今すぐ

99
00:08:05,250 --> 00:08:08,460
‫私のは､ セミコロンの欠落を修正してコンパイルしたものです｡

100
00:08:08,460 --> 00:08:18,060
‫ここで､ 開発者用ツールのウィンドウを開き､ ログメッセージを見るために､ 出力ログをここに表示します｡

101
00:08:18,060 --> 00:08:25,710
‫そして､ このキャラクターを撃つと､ 再生ボタンを押して行ってみようと思います｡

102
00:08:25,710 --> 00:08:26,170
‫これでよしとする｡

103
00:08:26,190 --> 00:08:30,210
‫1976年の健康左遷､ ボケて､ ずっとゼロ｡

104
00:08:30,210 --> 00:08:35,490
‫そして､ 撮り続けても､ そのエフ算ドットミンのおかげでゼロを下回ることはないんです｡

105
00:08:35,490 --> 00:08:38,370
‫つまり､ 健康状態が正しく設定されているということですね｡

106
00:08:38,370 --> 00:08:42,180
‫ただ､ コンポーネントの中で行うのとは別の方法です｡

107
00:08:42,180 --> 00:08:46,680
‫俳優の中でできることと､ その方法の長所と短所を紹介します｡

108
00:08:46,710 --> 00:08:52,410
‫最終的には､ これを別のコンポーネントに分離して､ 別の要素で再利用できるようにするとよいでしょう｡

109
00:08:52,410 --> 00:08:57,990
‫でもこれは､ 今言ったように､ このキャラクターは体力がゼロになっても特に死んだようには見えないので､

110
00:08:57,990 --> 00:09:00,120
‫別の方法だと思います｡

111
00:09:00,120 --> 00:09:02,910
‫それに対応するために､ アニメーションを修正する必要があります｡

112
00:09:02,910 --> 00:09:06,180
‫では､ 次回の講義でそれを確認し､ またお会いしましょう｡

