﻿1
00:00:04,350 --> 00:00:05,340
‫こんにちは､ ようこそ｡

2
00:00:05,340 --> 00:00:19,860
‫この講義では､ 重なり合うアクターを配列というものでアクセスし､ このボリュームの中に見えるアクターをすべてC++から出力できるようにします｡

3
00:00:19,860 --> 00:00:21,510
‫さっそく潜入してみましょう｡

4
00:00:22,420 --> 00:00:30,970
‫そこで､ これまでの例えのように､ 型や変数が値を入れる箱であると想像してみましょう｡

5
00:00:31,000 --> 00:00:35,290
‫では､ 格納する値の数が分からない場合はどうするか？

6
00:00:35,290 --> 00:00:36,670
‫たくさんの変数を作るかもしれません｡

7
00:00:36,670 --> 00:00:39,610
‫5つあるとわかっていれば､ 5つの変数を作るかもしれません｡

8
00:00:39,610 --> 00:00:45,910
‫しかし､ レベル内にいるアクターの数や､ 特定のトリガーボリュームと重なっているアクターなど､

9
00:00:46,540 --> 00:00:51,220
‫予測できないほど多いものがあったとしたらどうでしょうか｡

10
00:00:51,370 --> 00:01:01,270
‫この場合､ アンリアルではT配列と呼ばれる新しいデータ型を使用する必要があり､ 基本的にはある型のT配列が使用されます｡

11
00:01:01,270 --> 00:01:08,860
‫ここでも角括弧が表示されていますが､ これは前にも述べたように､ コンパイル時のパラメータです｡

12
00:01:08,860 --> 00:01:14,800
‫そして今回もまた､ 配列に格納できる型を示す型を取り込んでいます｡

13
00:01:14,800 --> 00:01:21,520
‫配列は変数と同じですが､ 箱が複数あり､ ゲームをするときに箱の数が違うことがあることを除けば､

14
00:01:21,550 --> 00:01:23,980
‫配列は変数と同じです｡

15
00:01:23,980 --> 00:01:24,940
‫変えることができる｡

16
00:01:24,940 --> 00:01:28,330
‫ゲームを進めながら､ 増やしたり減らしたりすることができるのです｡

17
00:01:28,330 --> 00:01:32,650
‫重なり始めたら､ 重なり合った部分から離れるものとして､ さらにボックスを追加していきます｡

18
00:01:32,650 --> 00:01:33,850
‫取り上げてしまうのです｡

19
00:01:33,850 --> 00:01:37,510
‫そして､ 先ほども言ったように､ これはこれらの中のパラメータです｡

20
00:01:38,300 --> 00:01:39,560
‫アングルブラケット｡

21
00:01:39,560 --> 00:01:46,190
‫それで､ 例えばintsのトレイを用意して､ それらの箱に異なる整数を格納することができます｡

22
00:01:46,190 --> 00:01:55,880
‫アクターポインターのトレイを用意して､ 実際にポインターをボックスに格納し､ それが世界のアクターを指し示すようにします｡

23
00:01:55,880 --> 00:01:57,740
‫そして､ ご覧の通り､ それらは重なり合う可能性すらあります｡

24
00:01:57,740 --> 00:02:01,430
‫つまり､ これらのポインタの中には､ 同じアクターを指しているものもあるわけです｡

25
00:02:01,460 --> 00:02:04,760
‫さて､ 実際には､ それはあまり有用ではないでしょうが､ 確かに可能です｡

26
00:02:04,760 --> 00:02:11,450
‫そこで､ プリミティブコンポーネントのドキュメントをもう一度見直してみたいと思います｡ ここで探しているのは､

27
00:02:11,450 --> 00:02:16,490
‫get overlapping actorsという機能です｡

28
00:02:16,490 --> 00:02:21,170
‫また､ 重複するアクターを取得する機能には､ いくつかのバージョンがあります｡

29
00:02:21,530 --> 00:02:26,810
‫でも､ 一番気になるのは､ 2番目のものです｡

30
00:02:27,170 --> 00:02:30,470
‫戻り値を持たない､ voidな戻り値です｡

31
00:02:30,470 --> 00:02:38,750
‫しかし､ ここで最初のパラメータは､ 最後にアンパサンドを付けたアクターポインタのt配列であり､

32
00:02:38,750 --> 00:02:43,700
‫この全体がt配列への参照であることがわかる｡

33
00:02:43,700 --> 00:02:51,950
‫定数参照ではないので､ このパラメータは実際にはoutパラメータであると推測できます｡

34
00:02:51,950 --> 00:03:02,450
‫重なっているアクターの結果が表示され､ 現在どのアクターが我々のプリミティブコンポーネントと重なっているかが分かります｡

35
00:03:02,450 --> 00:03:06,740
‫さて､ 今回使用するボックスコンポーネントは､ 偶然にもプリミティブコンポーネントです｡

36
00:03:06,740 --> 00:03:09,890
‫つまり､ トリガーコンポーネントもプリミティブコンポーネントなのです｡

37
00:03:09,890 --> 00:03:12,680
‫また､ この機能にアクセスできるのは誰でしょうか？

38
00:03:13,460 --> 00:03:18,200
‫ここには2つ目の引数がありますが､ 実際に使用する場合はデフォルト値が設定されているので､

39
00:03:18,200 --> 00:03:19,670
‫気にする必要はありません｡

40
00:03:19,670 --> 00:03:26,120
‫それでは､ アクターポインターのトレイを手に入れ､ 入力してみましょう｡

41
00:03:26,120 --> 00:03:27,710
‫これからトリガー部品に入ります｡

42
00:03:27,710 --> 00:03:31,610
‫CP ダニ成分まで調べます｡

43
00:03:31,700 --> 00:03:38,270
‫そして､ この中に空の t 配列を作成し､ この関数を使って値を入力することができます｡

44
00:03:38,270 --> 00:03:48,170
‫つまり､ t array open angle brackets a actor star という構文で､ アクターポインターの t 配列を持ち､

45
00:03:48,170 --> 00:03:55,310
‫angle brackets を閉じて､ 変数名を actors とすることができるのです｡

46
00:03:55,310 --> 00:04:05,780
‫そして､ オーバーラップするアクターを取得するために呼び出すと､ アクターの配列が渡されます｡

47
00:04:06,590 --> 00:04:06,950
‫今すぐ

48
00:04:06,950 --> 00:04:11,900
‫なぜこれを戻り値として渡さないのかわかりませんが

49
00:04:12,840 --> 00:04:13,450
‫これでよしとする｡

50
00:04:13,470 --> 00:04:18,340
‫そのパラメーターをもう少し活用する機会を与えてくれます｡

51
00:04:18,360 --> 00:04:19,530
‫さて､ それはそれでよいのですが｡

52
00:04:19,530 --> 00:04:22,350
‫配列の中にいくつかのアクターがあります｡

53
00:04:22,710 --> 00:04:24,120
‫長さが可変なんです｡

54
00:04:24,120 --> 00:04:25,140
‫結構あるかもしれませんね｡

55
00:04:25,140 --> 00:04:26,520
‫ゼロかもしれない｡

56
00:04:26,730 --> 00:04:29,670
‫このような配列はどうすればいいのでしょうか？

57
00:04:29,670 --> 00:04:34,020
‫さて､ 配列の中にいくつの項目があるか問い合わせることができます｡

58
00:04:34,020 --> 00:04:41,610
‫配列の中にいくつの項目があるかを示す整数を返すことができます｡

59
00:04:41,610 --> 00:04:52,020
‫つまり､ この配列には5つの項目があり､ この角括弧を使って配列の中の項目にアクセスすることができるのです｡

60
00:04:52,410 --> 00:04:56,100
‫そして､ 角括弧の中に渡した数字が､ どのアイテムを手に入れるかを教えてくれるのです｡

61
00:04:56,100 --> 00:05:02,820
‫また､ 多くのプログラミング言語では､ 配列のカウントは0から始まるのが通例です｡

62
00:05:02,820 --> 00:05:09,630
‫つまり､ 配列の0番目の要素は1番目の要素､ 配列の1番目の要素は2番目の要素､ といった具合です｡

63
00:05:09,630 --> 00:05:15,180
‫そうすると､ 最後の要素は常に配列の要素数より1つ少なくなってしまうのです｡

64
00:05:15,660 --> 00:05:17,640
‫では､ この知識をどのように活用すればいいのでしょうか｡

65
00:05:17,640 --> 00:05:24,540
‫まあ､ 例えば､ 複数のアクターがいる場合だけ､ 重なった部分を印刷すればいいわけです｡

66
00:05:24,540 --> 00:05:26,070
‫では､ どうすればいいのか｡

67
00:05:26,070 --> 00:05:38,130
‫もしアクターのドットナンバーの括弧が0より大きければ､ アクターの0要素にアクセスできるなど､

68
00:05:38,130 --> 00:05:50,130
‫ここで何かができる､ というif文を入れます｡

69
00:05:50,130 --> 00:05:54,690
‫つまり､ この配列の0番目の要素には何かが入っていなければならないのです｡

70
00:05:54,690 --> 00:05:59,940
‫配列の最初の要素､ 1つの要素に何かが入っているか､ 2つの要素に何かが入っているか､

71
00:05:59,940 --> 00:06:01,620
‫保証できないのです｡

72
00:06:01,620 --> 00:06:08,700
‫そのためには､ 配列に十分な数の項目があるかどうかを確認しなければなりませんが､ ここに最初の1つがあることは間違いありません｡

73
00:06:08,700 --> 00:06:12,690
‫では､ その配列から最初に重なるアクターを印刷することに挑戦してみましょう｡

74
00:06:12,720 --> 00:06:16,680
‫その角括弧を使ってポインタを取得するための配列を使用します｡

75
00:06:16,680 --> 00:06:22,290
‫そして､ そのポインターを使って､ アクター､ 名前､ ラベルを呼び出し､ それをプリントアウトし､ ビデオを一時停止して､

76
00:06:22,290 --> 00:06:25,140
‫実際にやってみるのです｡

77
00:06:28,340 --> 00:06:29,650
‫やあ､ お帰りなさい｡

78
00:06:29,660 --> 00:06:34,730
‫つまり､ この角括弧を使ってポインターを取得することができるのです｡

79
00:06:34,730 --> 00:06:43,610
‫そして､ 矢印演算子を使って､ get actor, name or labelを呼び出すことで､ ストレートに名前を取得することができます｡

80
00:06:44,090 --> 00:06:50,210
‫そして､ それをアクター名というFの文字列変数に入れるんです｡

81
00:06:50,210 --> 00:06:56,510
‫それから､ U字ログ､ これはオーバーラップコロンと呼ぶことにします｡

82
00:06:56,510 --> 00:06:58,390
‫そして､ パーセントs｡

83
00:06:58,400 --> 00:07:03,740
‫そして､ 2番目の引数には､ アスタリスク（俳優名）を指定します｡

84
00:07:03,740 --> 00:07:09,650
‫そして､ リコンパイルして､ レイアウトの出力ログのドケットに飛び込むことができます｡

85
00:07:09,650 --> 00:07:17,270
‫それから､ この文字列を印刷していると混乱するので､ BPPのシークレットウォールを開くことにします｡

86
00:07:17,270 --> 00:07:24,230
‫Blueprint では､ これを C++ から行っているので､ ダンジョンレベルのヒットプレイに移動してみましょう｡

87
00:07:25,160 --> 00:07:28,700
‫そして､ 明らかに今､ その俳優と重なっているものはない｡

88
00:07:28,700 --> 00:07:31,850
‫では､ 中に入ってみるとどうなるのでしょうか｡

89
00:07:31,940 --> 00:07:36,320
‫瞬時に印刷を開始し､ ビープ音プレーヤーと重なっているのがわかると思います｡

90
00:07:36,560 --> 00:07:37,760
‫ファンタスティックなもの

91
00:07:37,760 --> 00:07:40,370
‫代わりにガーゴイルを取りに行くとしたら？

92
00:07:40,370 --> 00:07:43,820
‫床の間まで持っていって､ 刺して､ ほら｡

93
00:07:43,820 --> 00:07:46,400
‫ガーゴイル像に重なると書いてある｡

94
00:07:46,670 --> 00:07:47,270
‫素晴らしい内容です｡

95
00:07:47,270 --> 00:07:55,340
‫というわけで､ t配列を使ってアクターのリストを取得し､ そのリストの中にあるものの数を調べ､

96
00:07:55,340 --> 00:08:00,980
‫そのリストの中から特定のアイテムを手に入れる方法を学びました｡

97
00:08:00,980 --> 00:08:10,790
‫次回の講義では､ 可変数のタスクを実行するために可変数のものを扱うことができるプログラミング構造をいくつか紹介する予定です｡

98
00:08:10,790 --> 00:08:11,870
‫現地でお会いしましょう｡

