﻿1
00:00:04,480 --> 00:00:05,530
‫こんにちは､ ようこそ｡

2
00:00:05,530 --> 00:00:16,170
‫このレクチャーでは､ 実際に弾薬の量を制限して､ 使い切ったら投射物を生み出せなくなるようにします｡

3
00:00:16,390 --> 00:00:22,270
‫弾薬がなくなって､ もうスポーンできないよというメッセージまで出ている｡

4
00:00:22,270 --> 00:00:24,700
‫では､ どのようにするのか､ 飛び込んでみましょう｡

5
00:00:25,540 --> 00:00:34,930
‫つまり､ 弾薬がゼロになると､ 新しい弾丸を発射できなくなるのが理想的です｡

6
00:00:34,930 --> 00:00:42,760
‫しかし､ 変数の値によってコードの流れをコントロールするにはどうしたらよいのでしょうか｡

7
00:00:42,760 --> 00:00:47,170
‫この難問を解決するのが､ ブランチノードと呼ばれるものです｡

8
00:00:47,170 --> 00:00:54,490
‫そこで枝葉末節ですが､ あることが真実かどうかを確認し､ その結果に基づいて何かをしようということです｡

9
00:00:54,490 --> 00:01:04,660
‫つまり､ 「お腹が空いたら､ 奥さんが見ていないところでジャンクフードを食べよう」というようなブランチノードがあるかもしれませんね｡

10
00:01:04,660 --> 00:01:08,470
‫そして､ それが事実でないのなら､ ビデオゲームを続けてください｡

11
00:01:08,470 --> 00:01:15,040
‫つまり､ これらの分岐ノードによって､ ある条件が真であればあることを行い､ 偽であれば別のことを行うことができるのです｡

12
00:01:15,040 --> 00:01:18,010
‫どちらを選んでも､ 実は何もできない可能性があります｡

13
00:01:18,010 --> 00:01:23,080
‫つまり､ 偽ノードしか接続できないか､ 真ノードしか接続できないか､ どちらかです｡

14
00:01:23,110 --> 00:01:25,570
‫どちらか1つで大丈夫です｡

15
00:01:25,570 --> 00:01:27,550
‫だから､ 覚えておいてください｡

16
00:01:27,550 --> 00:01:35,050
‫あるいは､ アンリアルでブーリアン型の変数に赤色が関連付けられていたのを覚えている人もいるかもしれません｡

17
00:01:35,050 --> 00:01:37,660
‫では､ 牛とは何なのか､ 改めて考えてみよう｡

18
00:01:38,080 --> 00:01:45,700
‫ブールはブーリアン（boolean）の略で､ trueかfalse､ yesかnoの2つの値のどちらかを格納できるタイプがある｡

19
00:01:45,790 --> 00:01:49,390
‫if文や分岐でよく使われる｡

20
00:01:49,390 --> 00:01:53,590
‫だから､ 今後､ C++では､ 分岐をif文と呼ぶことになるんだ｡

21
00:01:53,590 --> 00:01:56,200
‫でも､ それは同じこと､ 同じコンセプトだということです｡

22
00:01:56,200 --> 00:02:01,870
‫そして､ 何かが起こるかどうかを制御することができ､ 特定のノードはブール値を返すことができます｡

23
00:02:01,870 --> 00:02:04,360
‫では､ どのようなノードがブーリアンを返すことができるのだろうか｡

24
00:02:04,360 --> 00:02:06,610
‫どのような答えが欲しいのか？

25
00:02:06,610 --> 00:02:13,450
‫さて､ スポーンアクターを許容したいのはいつなのか｡

26
00:02:13,450 --> 00:02:16,600
‫新しい弾丸をいつ作るか？

27
00:02:16,600 --> 00:02:24,100
‫弾薬の量が0より大きい場合のみ､ 新しい弾丸を作成するようにします｡

28
00:02:24,100 --> 00:02:32,140
‫そこで幸いなことに､ イベントグラフで右クリックして「greater」を検索すると､ そのためのノードがあります｡

29
00:02:32,170 --> 00:02:40,660
‫このようなタイプの演算子やノードは､ 2つの値を取り込み､ それらの間の比較を作成し､ ブール値の答えを持つことができるので､

30
00:02:40,660 --> 00:02:45,070
‫比較と呼ばれるのですか？

31
00:02:45,070 --> 00:02:48,940
‫つまり､ 大は一例であり､ 小は別の例なのです｡

32
00:02:48,940 --> 00:02:52,840
‫また､ この less equal は､ 以下､ 等しいという意味であることがわかりますね｡

33
00:02:52,870 --> 00:02:56,890
‫イコール､ イッツ・ザット・イズ・ワンもあるんですよ｡

34
00:02:56,890 --> 00:02:58,570
‫イコールかイコールでないか｡

35
00:02:58,570 --> 00:03:01,210
‫2つの値が同じであれば､ trueを返す｡

36
00:03:01,240 --> 00:03:02,920
‫それ以外の場合はfalseを返す｡

37
00:03:02,920 --> 00:03:05,020
‫そこで､ 用語集を少し更新してみましょう｡

38
00:03:05,020 --> 00:03:09,460
‫ブランチとは､ ブルをベースにしたdo something or don'tであることを理解しました｡

39
00:03:09,460 --> 00:03:20,950
‫ブルやブーリアンはイエス・ノーのデータ型であり､ 比較はless than greater than equalなどのようなものであることを理解した｡

40
00:03:20,950 --> 00:03:20,950
‫を返します｡

41
00:03:20,950 --> 00:03:24,760
‫それでは､ これらの比較の一つを使って､ 試してみましょう｡

42
00:03:24,760 --> 00:03:30,760
‫右クリックして､ ここに大比較を追加します｡

43
00:03:30,760 --> 00:03:37,120
‫次に､ ammo変数をコントロールクリックして､ 比較ノードの最初のノードにドラッグします｡

44
00:03:37,120 --> 00:03:40,870
‫そして､ このデフォルトがゼロより大きいことがおわかりいただけると思います｡

45
00:03:40,870 --> 00:03:42,340
‫だから､ それこそ私たちの望むところです｡

46
00:03:42,340 --> 00:03:51,790
‫弾薬が0より大きいかどうかというノードがあり､ 戻り値は0ならイエス､ 0ならノーというブーリアン値です｡

47
00:03:51,790 --> 00:03:57,610
‫そこで､ このboolの戻り値を取り出し､ そこからドラッグしてブランチを探します｡

48
00:03:57,610 --> 00:04:04,840
‫そして､ 分岐ノードを追加すると､ ドラッグしていたブーリアンへの入力条件が自動的に接続されます｡

49
00:04:04,840 --> 00:04:15,550
‫次に､ スペースバーイベントをドラッグして戻し､ 押されたノードの実行ピンをブランチの入力にドラッグします｡

50
00:04:15,550 --> 00:04:18,070
‫これでブランチが実行されるわけです｡

51
00:04:18,070 --> 00:04:26,080
‫そして､ このブランチは､ もしそれがtrueなら､ 先に進んで投射物を生成し､ そうでなければ何もしないようにしたいのです｡

52
00:04:26,080 --> 00:04:27,190
‫では､ 実際に試してみましょう｡

53
00:04:27,190 --> 00:04:33,310
‫再生ボタンを押してから弾をたくさん発射すると､ 弾の値がゼロになるようにしています｡

54
00:04:33,310 --> 00:04:40,210
‫今､ いくらスペースバーを押しても､ 弾が出ないのがわかると思います｡

55
00:04:40,210 --> 00:04:43,930
‫そこで､ 弾薬のプリントアウトに挑戦してみたいと思います｡

56
00:04:43,930 --> 00:04:49,300
‫そこで､ falseブランチを使用して､ そこにprintノードを追加するようにします｡

57
00:04:49,300 --> 00:04:54,310
‫そして､ 基本的に弾薬がなくなったら､ プリントアウトしてほしい｡

58
00:04:54,310 --> 00:04:57,040
‫ですから､ コードをテストして､ それが起こっていることを確認してください｡

59
00:04:57,040 --> 00:04:59,200
‫ビデオを一時停止して､ 試してみてください｡

60
00:05:02,320 --> 00:05:02,920
‫なるほど｡

61
00:05:02,920 --> 00:05:03,890
‫お帰りなさい｡

62
00:05:03,910 --> 00:05:09,250
‫このように､ ブランチノードの2番目のブランチを作成しました｡

63
00:05:09,250 --> 00:05:13,600
‫この実行ピンと線が交差しないように､ ドラッグして戻しましょう｡

64
00:05:13,600 --> 00:05:18,220
‫そして､ falseブランチはここに降りてきて､ 文字列のプリントを行います｡

65
00:05:18,220 --> 00:05:23,950
‫そして､ プリントさせたい文字列は､ 単純に弾切れになってしまうのです｡

66
00:05:23,950 --> 00:05:31,450
‫では､ 実際にプレイして20発の砲弾をすべて撃ち尽くすと､ スペースキーを押すたびに弾切れのメッセージが表示され､

67
00:05:31,450 --> 00:05:41,490
‫プレイヤーはなぜこれ以上砲弾が生まれないのかが分かるようになります｡

68
00:05:41,500 --> 00:05:42,790
‫今回の講義は以上です｡

69
00:05:42,790 --> 00:05:44,320
‫次回作でお会いしましょう｡

