﻿1
00:00:04,400 --> 00:00:05,210
‫こんにちは､ ようこそ｡

2
00:00:05,210 --> 00:00:13,790
‫この講義では､ コンストラクタと呼ばれる特殊な関数で､ クラスのプロパティにデフォルト値を与えることができるものを見ていくことにします｡

3
00:00:13,790 --> 00:00:16,820
‫そして､ エディターで呼び出された時に分かる｡

4
00:00:16,820 --> 00:00:18,890
‫潜入して確かめてみよう｡

5
00:00:19,430 --> 00:00:25,430
‫このトリガーコンポーネントで､ ティックコンポーネント機能を追加して､ どのコンポーネント､

6
00:00:25,430 --> 00:00:37,010
‫どの他のアクターが現在このトリガーコンポーネントに重なっているかをチェックし､ それが正しい種類のアクターであればアクティブにできるようにしたいと思います｡

7
00:00:37,550 --> 00:00:39,890
‫問題は､ まあ､ これからですね｡

8
00:00:39,890 --> 00:00:41,870
‫試しにティック機能を実装してみましょう｡

9
00:00:41,870 --> 00:00:50,690
‫ティックコンポーネント関数の宣言はどうあるべきか､ グラブHに行くと､ publicセクションにある必要があることがわかります｡

10
00:00:50,690 --> 00:00:53,450
‫仮想空白､ ティック成分､ デルタ時間です｡

11
00:00:53,450 --> 00:00:56,000
‫パラメータがたくさんあるから､ コピーしてみよう｡

12
00:00:56,030 --> 00:01:04,430
‫tickコンポーネントのヘッダに移動して､ beginの下に追加します｡ そして､ その定義をコピーして､

13
00:01:04,430 --> 00:01:08,570
‫triggerコンポーネントに移動します｡

14
00:01:08,570 --> 00:01:13,280
‫CP そして､ ここで注目すべきは､ いくつかのキーワードを削除することができるということです｡

15
00:01:13,280 --> 00:01:15,140
‫仮想キーワードを削除すればいいのです｡

16
00:01:15,140 --> 00:01:17,030
‫それは､ 一般的に守れるルールだと思います｡

17
00:01:17,030 --> 00:01:19,430
‫また､ overrideキーワードを削除することも可能です｡

18
00:01:19,430 --> 00:01:22,040
‫これらは､ C++ファイルには必要ないものです｡

19
00:01:22,190 --> 00:01:24,770
‫クラス名を追加する必要があります｡

20
00:01:24,770 --> 00:01:26,330
‫コンポーネントコロンのトリガーになるわけですね｡

21
00:01:26,330 --> 00:01:27,380
‫コロン

22
00:01:27,830 --> 00:01:35,870
‫次に､ セミコロンを中括弧に置き換えて､ スーパーティックコンポーネントを呼び出す必要があります｡

23
00:01:35,870 --> 00:01:43,460
‫かなり長い通話なので､ grab a CPからコピーして､ この通話にペーストします｡

24
00:01:43,460 --> 00:01:49,040
‫これは､ 基本的に親のティックコンポーネント関数を呼び出しているのです｡

25
00:01:49,040 --> 00:01:52,880
‫つまり､ この場合の親はボックス・コンポーネントです｡

26
00:01:52,880 --> 00:02:01,580
‫そのため､ このコンポーネントを動作させるために必要な機能がある場合に､ それを呼び出すことが重要です｡

27
00:02:01,580 --> 00:02:06,890
‫そうしないと､ 本質的にその機能をバイパスすることになり､ 物事が壊れてしまう可能性があるのです｡

28
00:02:06,890 --> 00:02:13,820
‫ですから､ "begin"､ "play"､ "tick "の各コンポーネントを実装する際には､ 常にスーパーへの呼びかけを忘れないことが大切です｡

29
00:02:13,820 --> 00:02:17,750
‫では､ Begin Playからログメッセージをコピーして､ tickコンポーネントに配置してみましょう｡

30
00:02:17,750 --> 00:02:25,040
‫そして､ tick component loggingと言って､ Tick component is ticking in hereと言って､

31
00:02:25,100 --> 00:02:30,740
‫コンパイルが終わったらそのtickが実際に動くかどうかを確認するのではなく､ 再生ボタンを押して､

32
00:02:30,740 --> 00:02:34,160
‫出力ログを開いてみましょう｡

33
00:02:34,190 --> 00:02:37,400
‫うーん､ まあ､ 今は何もないようですが｡

34
00:02:37,400 --> 00:02:45,530
‫その理由は､ 最適化によって､ 自動的に､ そしてほとんどのコンポーネントがそのティックをオフにしているからです｡

35
00:02:45,530 --> 00:02:49,880
‫ですから､ 俳優は通常デフォルトでスイッチが入っていますが､ コンポーネントは通常スイッチオフになっています｡

36
00:02:49,880 --> 00:02:54,890
‫実際に､ ティッキングが機能することが分かっている他のコンポーネント､ 例えば移動を見てみると､

37
00:02:54,890 --> 00:02:58,610
‫ファイルの一番上にこのようなものがあるのが分かると思います｡

38
00:02:58,610 --> 00:03:09,740
‫あなたは関数を移動し､ それはこの主要なコンポーネントを持っているティックドットBは､ あなたがクラスにこのプロパティを設定しない場合､ これまでティックイコールtrueになることができます｡

39
00:03:09,740 --> 00:03:15,320
‫つまり､ これは古典的な主成分のtickのプロパティとしてクラスのプロパティであり､ その中にB

40
00:03:15,320 --> 00:03:19,340
‫can ever tickのプロパティを持つ構造体です｡

41
00:03:19,490 --> 00:03:28,490
‫つまり､ ムーバークラスを作成するときに､ このデフォルト値を設定するのです｡

42
00:03:28,490 --> 00:03:29,660
‫それがこの機能です｡

43
00:03:29,660 --> 00:03:37,100
‫これはコンストラクタと呼ばれ､ 新しいムーバーコンポーネントを作成するたびに呼び出される関数で､

44
00:03:37,100 --> 00:03:44,750
‫自動的にデフォルト値を設定することができます｡

45
00:03:44,750 --> 00:03:51,800
‫しかし､ ヘッダーファイルでそれを行う代わりに､ コンストラクタでこれらのプロパティを実際に設定することができます｡

46
00:03:51,800 --> 00:03:57,350
‫さて､ ここで構文に注目していただきたいのですが､ ヘッダーファイルの移動に進みます｡

47
00:03:57,350 --> 00:04:03,320
‫コンストラクタがクラスと全く同じ名前であることがおわかりになると思います｡

48
00:04:03,320 --> 00:04:12,350
‫つまり､ you moverはムーバーコンポーネントのクラス名であり､ そのコンストラクタもyou mover noticeと呼ばれています｡

49
00:04:12,350 --> 00:04:14,630
‫また､ 戻り値もありません｡

50
00:04:14,630 --> 00:04:19,490
‫新しいオブジェクトを構築しているのだから､ 何も返してはいけないのです｡

51
00:04:19,490 --> 00:04:22,820
‫私たちは､ この授業を実現するために､ ただひたすら努力するのみです｡

52
00:04:22,820 --> 00:04:30,560
‫つまり､ 必要なのはこのクラスのプロパティにアクセスすることであり､ また､ publicに設定されていることに注目することである｡

53
00:04:30,560 --> 00:04:35,180
‫つまり､ クラス定義のpublicセクションにあるわけです｡

54
00:04:35,180 --> 00:04:39,470
‫そこで､ 自分自身でティッキングを可能にすることに挑戦してみたいのです｡

55
00:04:39,470 --> 00:04:44,720
‫ですから､ ヘッダーの中にコンストラクタを作り､

56
00:04:44,720 --> 00:04:54,620
‫ムーバーHとグラブ・ア・ロッホHの両方で見た構文に留意してください｡

57
00:04:54,620 --> 00:04:57,140
‫だから､ それがどのように行われているかを真似るだけでいいんです｡

58
00:04:57,290 --> 00:05:02,450
‫コンストラクタからログをとって､ いつ呼び出されるかを試してみてください｡

59
00:05:02,450 --> 00:05:03,610
‫ビギンプレイのようなものでしょうか？

60
00:05:03,780 --> 00:05:07,290
‫それともプレイ開始前にコールされるのか､ それとも何なのか？

61
00:05:07,320 --> 00:05:09,840
‫ビデオを一時停止して行ってみてください｡

62
00:05:12,920 --> 00:05:13,310
‫ケイ

63
00:05:13,310 --> 00:05:14,100
‫お帰りなさい｡

64
00:05:14,120 --> 00:05:21,320
‫そこで､ トリガー・コンポーネントに入り､ ここに新しいパブリック・セクションを作成することにします｡

65
00:05:22,070 --> 00:05:26,630
‫最後のコロンを覚えていて､ あとはクラスと全く同じに呼び出す必要があります｡

66
00:05:26,630 --> 00:05:28,040
‫だから､ それはトリガー部品ではないんです｡

67
00:05:28,040 --> 00:05:33,320
‫それは､ あなたがトリガーではなく､ あなたがトリガー成分をフルに発揮することです｡

68
00:05:33,320 --> 00:05:41,600
‫そして､ このコンストラクタには何も引数がないので､ 空の括弧だけを付けて､ 行末にセミコロンを付けます｡

69
00:05:41,600 --> 00:05:46,880
‫さて､ CPPファイルに移動して､ ここで実装を行うことができます｡

70
00:05:46,880 --> 00:05:48,290
‫ここでも､ 戻り値の型は必要ない｡

71
00:05:48,290 --> 00:05:58,550
‫つまり､ コロン､ コロン､ コロンとコンポーネントをトリガーしていくだけなんです｡

72
00:05:58,550 --> 00:06:07,280
‫次に中括弧をいくつか入れて､ ここでクラスインスタンスにデフォルト値を与えるための任意のセットアップコードを記述します｡

73
00:06:07,280 --> 00:06:12,530
‫このCPPが行っていることを見てみると､ 主成分であるtick dot

74
00:06:12,530 --> 00:06:16,670
‫Bがtrueになることがあることがわかります｡

75
00:06:16,670 --> 00:06:17,840
‫では､ それを打ち出してみましょう｡

76
00:06:17,840 --> 00:06:23,540
‫主成分のティックドットBはこれまでティックすることができます｡

77
00:06:23,540 --> 00:06:31,520
‫Bは､ ブーリアン型がtrueに等しいときによく使う接頭辞で､ 小文字のtが付きます｡

78
00:06:31,670 --> 00:06:39,980
‫ですから､ コンストラクタの変更がライブコーディングで正しく伝搬されるとは限らないので､ エディタを閉じようと思います｡

79
00:06:40,100 --> 00:06:47,000
‫Visual Studioのコード内からリビルドして､ EUのプロジェクトファイルからリスタートするんだ｡

80
00:06:47,000 --> 00:06:54,890
‫これが終わったら､ 再生ボタンを押して､ 出力ログを見てみましょう｡ 案の定､ トリガーコンポーネントが動いているのがわかります｡

81
00:06:55,130 --> 00:07:00,230
‫そこで､ このログメッセージは迷惑なので削除し､ Visual Studioのコードで出力ログを閉じて､

82
00:07:00,230 --> 00:07:04,460
‫tickコンポーネントでこのログメッセージを削除することにします｡

83
00:07:04,460 --> 00:07:06,020
‫今､ 動いているのがわかる｡

84
00:07:06,410 --> 00:07:10,910
‫そして､ コンストラクタでログを記録することにしました｡

85
00:07:11,720 --> 00:07:17,990
‫そこで､ 「構築中」という新しいログを作成し､ ライブコーディングでそれを拾えるかどうかを確認します｡

86
00:07:17,990 --> 00:07:21,680
‫そして､ 出力ログに移動して､ すぐに見てみましょう｡

87
00:07:21,680 --> 00:07:23,750
‫ここには何も表示されません｡

88
00:07:24,170 --> 00:07:28,370
‫さて､ 再生してみると､ 出力ログが表示されます｡

89
00:07:28,370 --> 00:07:33,980
‫トリガーコンポーネントが生きていることをログメッセージで確認できるのですが､ これよりずっと前です｡

90
00:07:33,980 --> 00:07:39,020
‫実は､ 世界を作っているだけの時は､ ずっと先に構築していることがわかります｡

91
00:07:39,020 --> 00:07:46,400
‫プレイを始める前に世界全体の準備をする必要があるため､ 明らかにプレイを始める前の非常に早い段階で構築を開始します｡

92
00:07:46,400 --> 00:07:51,440
‫だから､ 再生ボタンを押したときに起こるのですが､ 実はエディターでも起こるんです｡

93
00:07:51,440 --> 00:07:59,300
‫ここでアクターを選択し､ コンポーネントを追加してトリガーを追加すると､ 出力ログを見ることができます｡

94
00:07:59,300 --> 00:08:03,050
‫すると､ 実際に構築メッセージが印刷されたことがわかります｡

95
00:08:03,050 --> 00:08:14,540
‫コンストラクターで何をするかは注意する必要があります｡ 実際にC++のコードが呼び出されるのは､ ゲームをプレイしていない編集中のときだけなのですから｡

96
00:08:14,540 --> 00:08:20,000
‫これらのオブジェクトは作成されるため､ セットアップされるため､ そのコンストラクタを呼び出す必要があります｡

97
00:08:20,090 --> 00:08:25,880
‫トリガーをもう一度削除して､ 構築中のログメッセージと再生開始のログメッセージも削除して､

98
00:08:25,880 --> 00:08:30,170
‫少しスッキリさせようと思っています｡

99
00:08:30,170 --> 00:08:30,800
‫素晴らしい内容です｡

100
00:08:30,800 --> 00:08:37,430
‫この講義では､ シーンコンポーネントやACTコンポーネントのテンプレートで作成されたものとほとんど同じように､

101
00:08:37,430 --> 00:08:47,720
‫独自のコンポーネントを設定する方法について見てきました｡

102
00:08:47,720 --> 00:08:49,610
‫それでは､ 次回の講義でお会いしましょう｡

