﻿1
00:00:04,450 --> 00:00:05,320
‫こんにちは､ ようこそ｡

2
00:00:05,320 --> 00:00:11,200
‫この講義では､ ブール演算子について学び､ 例えばガーゴイルが正しいタグであり､

3
00:00:11,200 --> 00:00:23,470
‫かつ掴まれていない場合にのみ受け入れられるというような､ 複数のブール演算子が真となることを必要とする複雑な文を作ることができるようにします｡

4
00:00:23,470 --> 00:00:29,020
‫だから､ ガーゴイルを離すと､ そのときだけ壁が反応するのがわかるんです｡

5
00:00:29,020 --> 00:00:31,030
‫さっそく､ この仕組みを見てみましょう｡

6
00:00:31,990 --> 00:00:42,040
‫つまり､ 理想的には､ トリガーコンポーネントが､ 現在掴まれているアクタを無視するか､ または受け入れ可能なアクタを引き受けないようにしたいのです｡

7
00:00:42,040 --> 00:00:48,820
‫そこで､ これを変更するために､ トリガーコンポーネントCPのアクター許容実装を調べてみると､

8
00:00:48,850 --> 00:00:57,550
‫if文の中で､ アクターが許容タグを持っていれば､ それを取ろうと言っていることがわかります｡

9
00:00:57,700 --> 00:01:01,750
‫しかし､ 私がやりたいのは､ これを2つの条件付きにすることです｡

10
00:01:01,750 --> 00:01:04,960
‫2つのブール値を組み合わせるには？

11
00:01:04,960 --> 00:01:06,280
‫まあ､ 選択肢はいくつかあるんですけどね｡

12
00:01:06,280 --> 00:01:08,500
‫そのためのオペレーターがいるんです｡

13
00:01:08,500 --> 00:01:12,940
‫そのひとつがアンパサンドampersand演算子で､ こう読みます｡

14
00:01:12,940 --> 00:01:20,020
‫そして､ これは基本的に2つのブール値を組み合わせて､ その両方が真の場合にのみ真となるようにすることを意味します｡

15
00:01:20,350 --> 00:01:27,700
‫つまり､ trueとtrueがあったとしたら､ それはtrueと同じになるわけです｡

16
00:01:27,880 --> 00:01:32,950
‫一方､ どちらかが偽であれば､ だから右のものが偽であれば､

17
00:01:32,950 --> 00:01:40,150
‫全体が偽になる､ といった具合です｡ ここにはもう一つオプションがあり､ このダブルバー演算子をsoのように使って､

18
00:01:40,150 --> 00:01:44,170
‫こちらはorと読みます｡

19
00:01:44,170 --> 00:01:49,780
‫そして基本的にこれは､ この2つのうちどちらかが真であれば､ 結果は真になるということです｡

20
00:01:49,780 --> 00:01:52,510
‫また､ その両方が真であれば､ 結果も真になる｡

21
00:01:52,510 --> 00:01:57,430
‫しかし､ もしその両方が偽であれば､ 結果は偽になる｡

22
00:01:57,430 --> 00:02:00,520
‫というわけで､ 以上がよく使う表現です｡

23
00:02:00,520 --> 00:02:11,980
‫感嘆符を使うと､ どんなブーリアン値でも反転して､ 「違う」と読み取ります｡

24
00:02:11,980 --> 00:02:19,990
‫つまり､ falseでもいいのですが､ 前に結び目をつけたので､ この値全体､ この式はtrueになります｡

25
00:02:19,990 --> 00:02:27,700
‫そして､ もし私がそれをfalseと順番に並べたとしたら､ まあ､ 少なくともどちらかがtrueなので､ 結果はtrueになるでしょうね｡

26
00:02:28,300 --> 00:02:36,310
‫つまり､ actorタグがあれば､ それが許容されるactタグであると言いたいのですが､

27
00:02:36,310 --> 00:02:40,210
‫そうではありません｡

28
00:02:40,210 --> 00:02:46,300
‫ですから､ この場合､ アクタータグがつかなければOKなのです｡

29
00:02:46,300 --> 00:02:47,980
‫いろいろなことに挑戦していますね｡

30
00:02:47,980 --> 00:02:52,300
‫今説明した3つの演算子は､ どのように使うのでしょうか？

31
00:02:52,300 --> 00:02:58,060
‫全部使う必要はありませんが､ あなたならどれを使い､ このif文をどう書き出しますか？

32
00:03:00,110 --> 00:03:00,350
‫なるほど｡

33
00:03:00,380 --> 00:03:03,380
‫そこで､ 超わかりやすくするために､ これをブール変数に入れることにします｡

34
00:03:03,380 --> 00:03:17,870
‫つまり､ bool that has acceptable tagは､ actor has tag acceptable tagと同じになるようにして､ 行末にセミコロンをつけています｡

35
00:03:17,870 --> 00:03:27,770
‫もうひとつのboolは､ それがつかまれたかどうかで､

36
00:03:27,950 --> 00:03:35,240
‫これはactor arrow actor

37
00:03:35,240 --> 00:04:05,770
‫has tagで取得できます｡ この場合はただつかまれるだけなので､ これに基づいてつかまれたかどうかが言えます｡

38
00:04:05,780 --> 00:04:08,240
‫コンパイルして動作確認をしてみましょう｡

39
00:04:08,240 --> 00:04:10,130
‫では､ さっそく再生を押してみましょう｡

40
00:04:10,160 --> 00:04:15,140
‫ガーゴイルを持ってトリガーエリアまで走ろう

41
00:04:15,230 --> 00:04:20,600
‫で､ ほら､ ガーゴイルを入れてるんだけど､ まだ出してないから何も起きない｡

42
00:04:20,600 --> 00:04:23,420
‫では､ ここでガーゴイルを弾き飛ばそうとしたらどうでしょう？

43
00:04:23,450 --> 00:04:23,840
‫これでよしとする｡

44
00:04:23,840 --> 00:04:30,270
‫私が放つと同時に発動し､ 私からガーゴイルを奪い､ それは地中に消えていくのです｡

45
00:04:30,290 --> 00:04:38,000
‫さて､ Grab a CPでは､ if文が2つある箇所がいくつかありますが､ andやandを使って操作しない場合は､

46
00:04:38,000 --> 00:04:43,670
‫1つで済むはずです｡

47
00:04:43,670 --> 00:04:48,980
‫つまり､ このようにヌルポインターでないかどうかをチェックする場合､

48
00:04:48,980 --> 00:04:55,280
‫このnot equal to nullポインターを単純に削除することもできるのです｡

49
00:04:55,280 --> 00:05:06,620
‫また､ 単純にifと言って､ booleanとして何らかのポインタを入れれば､ それがNULLポインタでないことを自動的にチェックすることができます｡

50
00:05:06,620 --> 00:05:16,460
‫つまり､ ここで物理ハンドルが利用可能であれば､ グラブコンポーネントが利用可能であれば､ 先に進んでそれを使用することができると言っているのです｡

51
00:05:16,460 --> 00:05:19,400
‫そこで､ if文の組み合わせに挑戦してみたいと思います｡

52
00:05:19,400 --> 00:05:22,340
‫ティックコンポーネントで結合するわけですね｡

53
00:05:22,340 --> 00:05:28,190
‫アンパサンド､ アンパサンド､ the､ ORを使う必要があるのか､ 否定､ 結び､

54
00:05:28,190 --> 00:05:37,710
‫感嘆符を使う必要があるのかを考え､ リリースでもそれらを結合して､ 機能をテストし､ それでもうまくいくかどうかを確認します｡

55
00:05:37,730 --> 00:05:39,800
‫ビデオを一時停止して､ 試してみてください｡

56
00:05:42,930 --> 00:05:43,380
‫なるほど｡

57
00:05:43,380 --> 00:05:44,070
‫お帰りなさい｡

58
00:05:44,070 --> 00:05:50,040
‫というのも､ 基本的にreleaseでやりたいことは､ 有効な物理ハンドルがあり､

59
00:05:50,040 --> 00:06:00,240
‫その物理ハンドルが掴まれたコンポーネントを持っていたら､ このif文の本文を実行したいからです｡

60
00:06:00,240 --> 00:06:03,000
‫だから､ そうやって書くと非常にシンプルなんです｡

61
00:06:03,000 --> 00:06:12,240
‫物理ハンドルと物理ハンドルが掴まれたコンポーネントがあれば､ 次のように言うことができる｡

62
00:06:12,240 --> 00:06:18,600
‫そのため､ このearly returnのif文は削除して､ コードを少し短くすることができます｡

63
00:06:18,870 --> 00:06:26,400
‫さて､ if文の中でこの物理ハンドルを参照し､ and文が動作するかどうかを評価しているのでは､

64
00:06:26,400 --> 00:06:32,340
‫と心配される方がいるかもしれません｡

65
00:06:32,760 --> 00:06:38,550
‫今は､ 左のものを先に評価するという特徴があります｡

66
00:06:38,550 --> 00:06:43,920
‫そして､ もしそのことが偽りであれば､ 右のものを評価することもないのです｡

67
00:06:43,920 --> 00:06:44,820
‫その必要はありません｡

68
00:06:44,850 --> 00:06:47,580
‫結果が偽になることはすでに分かっている｡

69
00:06:47,580 --> 00:06:50,130
‫これ以上､ 何かを評価する必要はないのです｡

70
00:06:50,130 --> 00:07:01,500
‫ということは､ このように計算するために右側の結果が真であるようなことをしても大丈夫ということです｡

71
00:07:01,890 --> 00:07:06,810
‫これは非常に便利なプロパティで､ ポインタを使うときによく使われます｡ まずポインタをチェックし､

72
00:07:06,810 --> 00:07:10,320
‫次にアンパサンドを指定します｡

73
00:07:10,320 --> 00:07:13,860
‫アンパサンド､ そして右側のポインターを使用します｡

74
00:07:13,860 --> 00:07:18,660
‫でも､ どうか､ この2つを順番に入れ替えるようなことはしないでください｡

75
00:07:18,660 --> 00:07:22,950
‫その逆はうまくいかず､ クラッシュしてしまいます｡

76
00:07:22,950 --> 00:07:28,080
‫では､ ティックコンポーネントに移動して､ 本質的にまったく同じことを行ってみましょう｡

77
00:07:28,080 --> 00:07:30,720
‫掴んだ部品があるかどうかを確認したかったのです｡

78
00:07:30,720 --> 00:07:37,200
‫ここでできることは､ 物理ハンドルと物理ハンドルを作ることです｡

79
00:07:37,470 --> 00:07:38,940
‫矢印で部品をつかむ｡

80
00:07:38,940 --> 00:07:44,430
‫そして､ if文とreturnを削除して､ コードの行数を減らし､

81
00:07:44,430 --> 00:07:50,430
‫読みやすさを向上させることができます｡

82
00:07:50,460 --> 00:07:50,970
‫素晴らしい内容です｡

83
00:07:50,970 --> 00:07:57,480
‫さて､ 今回の講義では､ C++のandまたはnot演算子の使い方について見てきました｡

84
00:07:57,480 --> 00:07:58,980
‫それでは､ 次回の講義でお会いしましょう｡

