﻿1
00:00:04,350 --> 00:00:05,340
‫こんにちは､ ようこそ｡

2
00:00:05,340 --> 00:00:11,490
‫この講義では､ 最初のジオメトリトレースを設定して､ ガーゴイルを見に行き､

3
00:00:11,490 --> 00:00:21,030
‫範囲内に十分に近づくと､ トレースによってヒットしたアクタの名前が確実にプリントアウトされるようにします｡

4
00:00:21,030 --> 00:00:27,540
‫それでは､ いよいよチャンネルごとの掃引に取り組む準備が整いましたので､ その方法をご紹介します｡

5
00:00:27,540 --> 00:00:31,290
‫それを実現するためのピースがたくさんあったのです｡

6
00:00:31,290 --> 00:00:32,550
‫でも､ やっとここまで来た｡

7
00:00:32,700 --> 00:00:36,240
‫では､ この関数の構文を見てみましょう｡

8
00:00:36,240 --> 00:00:43,230
‫そのため､ このようなタイプでは､ ここで何が起こっていたのかを理解するのに非常に有利な状況にあります｡

9
00:00:43,230 --> 00:00:51,510
‫つまり､ 戻り値はブール値で､ 基本的にスイープで何かを見つけたかどうかを教えてくれます｡

10
00:00:51,990 --> 00:00:56,430
‫さて､ 第2引数は､ ここにあるように､ 参照です｡

11
00:00:56,430 --> 00:00:58,050
‫このアンパサンドがあるんです｡

12
00:00:58,170 --> 00:01:02,520
‫そして､ アンパサンドの後にスペースがあっても､ 変数名の間にスペースがあっても､

13
00:01:02,520 --> 00:01:07,830
‫その型が参照であることを示すアンパサンドが型の後にあればすべて同じで､ Fヒット結果という型であれば､

14
00:01:07,950 --> 00:01:12,690
‫構造体であることがわかります｡

15
00:01:12,810 --> 00:01:15,870
‫つまり､ このFヒットの結果がアウトヒットというわけだ｡

16
00:01:15,870 --> 00:01:18,630
‫それが､ スイープで出てくる結果です｡

17
00:01:18,630 --> 00:01:26,790
‫この掃討作戦から得られる情報は多岐にわたるため､ どのようなものがヒットしたのか､ どのような構造になっているのかを確認することができるのです｡

18
00:01:26,790 --> 00:01:31,080
‫そうすると､ 一定のfベクトルの基準ができる｡

19
00:01:31,080 --> 00:01:36,510
‫つまり､ これは開始ベクトルをコピーするのではなく､ 参照で取っているのです｡

20
00:01:36,510 --> 00:01:40,530
‫エンドベクトルも同じで､ あとは回転です｡

21
00:01:40,530 --> 00:01:47,610
‫つまり､ これはfローテーターを使った代替構造であるfクワットを使ったシェイプの回転です｡

22
00:01:47,610 --> 00:01:51,690
‫球体を使用しているので､ 基本的にゼロ回転で置くことができることを確認します｡

23
00:01:51,690 --> 00:01:52,770
‫そんなことはどうでもいいんです｡

24
00:01:53,220 --> 00:01:59,940
‫次に登場するのはTrace Channelです｡ C++でTrace Channelが何と呼ばれているのか､

25
00:01:59,940 --> 00:02:02,220
‫その方法を確認してみましょう｡

26
00:02:02,370 --> 00:02:08,820
‫そして､ コリジョンシェイプを用意しました｡ これが最後の引数になりますが､ これを実行することで､

27
00:02:08,820 --> 00:02:13,830
‫ある半径の球体を作成できることを確認します｡

28
00:02:13,830 --> 00:02:18,540
‫しかし､ その前に､ 半径とは何か､ どのように設定されているかを知っておく必要があります｡

29
00:02:18,540 --> 00:02:27,870
‫そこで､ grab a dot hに移動して､ これまで例として使ってきた参照参照とアウトパラメータ用の関数を削除します｡

30
00:02:27,870 --> 00:02:35,040
‫そして､ どこでも編集可能な新しいプロパティを作成します｡ それは､ グラブ半径と呼ばれるフロートで､

31
00:02:35,310 --> 00:02:42,690
‫101メートルに設定するつもりです｡

32
00:02:42,690 --> 00:02:49,140
‫では､ C++に移動して､ print damageとhas damageへの参照を削除して､

33
00:02:49,140 --> 00:02:53,490
‫tickコンポーネントからも同様に削除しましょう｡

34
00:02:53,490 --> 00:02:58,830
‫if文全体と､ ダメージの受け渡し場所です｡ ここではデバッグ・ラインを描いているので､

35
00:02:58,830 --> 00:03:03,900
‫チャンネルごとにスイープ・シングルを呼び出したいと思います｡

36
00:03:03,990 --> 00:03:06,150
‫そこで､ sweepと入力します｡

37
00:03:06,150 --> 00:03:14,070
‫つまり､ これは新しいワールド・オブジェクトに対する関数であることがわかるので､ get worldという括弧をタイプするのです｡

38
00:03:14,370 --> 00:03:19,500
‫それから､ get worldがポインターを返すことが分かっているので､ 矢印を描くことができます｡

39
00:03:19,500 --> 00:03:31,710
‫そして､ このようにチャンネルごとにスイープするつもりです｡ そして､ ここで最初の引数として､ 入力するためのアウトパラメータを入力する必要があります｡

40
00:03:31,800 --> 00:03:38,100
‫そこで､ 空の変数を作成し､ それを入力することになりますが､ それには正しい型が必要です｡

41
00:03:38,100 --> 00:03:44,640
‫つまり､ if f hit resultで､ 変数自体をhit resultと呼び､ 最後にセミコロンを付けます｡

42
00:03:44,640 --> 00:03:55,050
‫なぜなら､ 初期化していないので､ 値を与えていませんが､ チャンネルごとのスイープ関数で値を与えるために渡すつもりです｡

43
00:03:55,770 --> 00:03:57,270
‫というわけで､ 今回のヒット結果です｡

44
00:03:57,270 --> 00:04:05,190
‫次に､ 開始と終了のベクトルを渡す必要があります｡ これは､ コピーされるのではなく､ 参照を取られることが分かっています｡

45
00:04:05,430 --> 00:04:13,080
‫次に､ 回転を入力する必要がありますが､ これは単純なfクォートコロン､ コロンアイデンティティで行うことができ､

46
00:04:13,080 --> 00:04:17,370
‫基本的にこれは回転なしであることを伝えます｡

47
00:04:17,370 --> 00:04:19,290
‫それにしては､ ちょっと変な言葉遣いですね｡

48
00:04:19,290 --> 00:04:23,190
‫これは､ 数学的な言い方で､ 「これは回転していない」という意味です｡

49
00:04:23,760 --> 00:04:27,030
‫次に､ トレースコリジョンチャンネルが必要です｡

50
00:04:27,030 --> 00:04:31,020
‫さて､ そのトレースコリジョンチャンネルを見つけるにはどうしたらいいのでしょうか？

51
00:04:31,170 --> 00:04:38,370
‫プロジェクトを保存しているフォルダに移動して､ configからdefault engine INIに移動し､

52
00:04:38,370 --> 00:04:44,160
‫それをクリックして､ Visual Studio codeで開いてください｡

53
00:04:44,160 --> 00:04:47,700
‫そして､ この中でグラボを検索してみたいと思います｡

54
00:04:48,030 --> 00:04:52,770
‫そこで､ グラボのコリジョンレスポンスチャンネルを見ることができるようになります｡

55
00:04:52,770 --> 00:04:56,040
‫そして､ 基本的にはこのデフォルトエンジンのINIに設定されています｡

56
00:04:56,040 --> 00:05:00,990
‫ファイル全体で一度だけ記載されており､ チャンネル名も確認できます｡

57
00:05:00,990 --> 00:05:02,820
‫C++でのチャンネル名です｡

58
00:05:02,820 --> 00:05:03,750
‫とてもじゃないですが｡

59
00:05:04,050 --> 00:05:06,060
‫はい､ でも､ それはSです｡  e. c.

60
00:05:06,090 --> 00:05:17,980
‫Game Trace Channel 2 をコピーして､ Grab a CP に戻り､ トレースチャンネルとしてここに貼り付けることができます｡

61
00:05:18,000 --> 00:05:22,590
‫さて､ この行はかなり長くなっていますが､ それを補うために､ 実際にそれぞれのパラメータを別々の行にするか､

62
00:05:22,590 --> 00:05:27,030
‫少なくとも分散させることができます｡

63
00:05:27,030 --> 00:05:29,220
‫だから､ スタートとエンドは同じところにあるのかもしれませんね｡

64
00:05:29,220 --> 00:05:35,250
‫IDの基準は1行に､ トレースチャンネルは別の行に､ このように表示されます｡

65
00:05:35,250 --> 00:05:39,640
‫そうすることで､ これらの長い論証リストを読むためのスペースが少し増えるのです｡

66
00:05:39,660 --> 00:05:47,250
‫さて､ ドキュメントに戻ると､ ここで次に渡す必要があるのは､ Fコリジョンシェイプであることがわかります｡

67
00:05:47,250 --> 00:05:49,890
‫そこで､ 形状を構成する必要があります｡

68
00:05:49,890 --> 00:05:52,980
‫もしかしたら､ これは上の方に別の変数としてやるかもしれませんね｡

69
00:05:52,980 --> 00:05:58,140
‫Fのヒット結果の前にやって､ Fのヒット結果が実はアウトパラメータであることを超わかりやすくしておく｡

70
00:05:58,140 --> 00:06:02,490
‫いつも関数の呼び出しの前に､ 最後に残しておくんです｡

71
00:06:02,850 --> 00:06:08,970
‫そこで､ Fコリジョンシェイプを作成し､ これを球体と呼ぶことにします｡ Fコリジョンシェイプ､

72
00:06:08,970 --> 00:06:15,210
‫コロン､ コロン､ 球体を作るに等しくなるように設定します｡

73
00:06:15,210 --> 00:06:18,540
‫これで､ 新しい球体､ コリジョンシェイプが作成されます｡

74
00:06:18,540 --> 00:06:26,580
‫この関数の引数は球の半径で､ Uプロパティとして設定したgrab radius変数として取得しました｡

75
00:06:26,580 --> 00:06:41,130
‫この行の最後にセミコロンを置くと､ 球をスイープチャンネル関数の最後の引数として渡すことができます｡

76
00:06:41,130 --> 00:06:47,790
‫もうひとつ､ この関数はブール値を返しますが､ これは何かをヒットしたかどうかを表しています｡

77
00:06:47,790 --> 00:06:57,480
‫そこで､ その結果をhas hitというブーリアン変数に入れ､ この関数の後半でそれを使うことにします｡

78
00:06:57,480 --> 00:07:02,280
‫そこで､ ヒットした俳優の名前を印刷することに挑戦してみたいと思います｡

79
00:07:02,280 --> 00:07:04,440
‫それで今､ このような掃討作戦が行われているのです｡

80
00:07:04,440 --> 00:07:07,230
‫何らかの成果を出すことができるはずだ｡

81
00:07:07,230 --> 00:07:11,700
‫そこで､ if文を使って､ まったく何もないかをプリントする｡

82
00:07:11,700 --> 00:07:16,830
‫つまり､ このブール関数が真であれば､ アクターの名前を出力することになります｡

83
00:07:16,830 --> 00:07:22,950
‫Sphere Trace がヒットしたアクターを hit result struct で取得することになります｡

84
00:07:22,950 --> 00:07:28,530
‫構造体なので､ ドット演算子でアクセスできるメソッドを持っています｡

85
00:07:28,530 --> 00:07:30,300
‫構造体へのポインタではありません｡

86
00:07:30,600 --> 00:07:36,630
‫ドットでアクターを取得し､ 括弧で囲むと､ アクターポインターが返されます｡

87
00:07:37,140 --> 00:07:42,240
‫そして､ そのアクティブポインタを使用して､ アクター名またはラベルを取得するメソッドを使用してアクター名を取得し､

88
00:07:42,240 --> 00:07:53,700
‫これにドットまたは矢印演算子を使用するかどうかを考えてから､ コンパイルしてアクター名を出力して､ シーンで何がヒットするかをテストします｡

89
00:07:53,700 --> 00:07:55,500
‫ビデオを一時停止して､ 試してみてください｡

90
00:07:58,460 --> 00:07:58,750
‫なるほど｡

91
00:07:58,750 --> 00:07:59,710
‫お帰りなさい｡

92
00:07:59,740 --> 00:08:02,410
‫そこで､ まずはそのif文の作成から始めます｡

93
00:08:02,410 --> 00:08:10,270
‫そこで､ もしヒットしたなら､ 中括弧を付けて､ まず､ アクターポイントを取得します｡

94
00:08:10,270 --> 00:08:17,710
‫つまり､ アクタースターのヒット俳優がヒットした結果とイコールになるわけです｡

95
00:08:18,670 --> 00:08:20,260
‫ドットゲット

96
00:08:20,560 --> 00:08:21,420
‫俳優｡

97
00:08:21,910 --> 00:08:22,690
‫括弧内は

98
00:08:22,690 --> 00:08:22,900
‫ようなものです｡

99
00:08:22,900 --> 00:08:34,030
‫そして､ u log を実行し､ hit actor colon percent sx と書いて､ hit actor を実行します｡ ここはポインタなので､

100
00:08:34,060 --> 00:08:44,860
‫hit actor arrow､ get actor name or label､ それからいくつかの括弧を実行します｡

101
00:08:44,860 --> 00:08:55,210
‫そして､ これは文字列なので､ Yuiログに正しく表示されるように､ 全体の先頭に星を付けなければなりません｡

102
00:08:55,240 --> 00:08:58,660
‫さて､ では次にこれをコンパイルしてみましょう｡

103
00:08:58,660 --> 00:09:06,640
‫そして､ シーンに入ったら､ 出力ログを開いてレイアウトにドッキングさせ､ 再生しながら再生ボタンを押すことで確認できるようにしましょう｡

104
00:09:07,390 --> 00:09:11,050
‫そして瞬時に､ あのガーゴイル像にぶつかっているのがわかります｡

105
00:09:11,080 --> 00:09:16,360
‫後ろを向いて他のものを見ても､ まあ､ 何も当たっていないのか､ 何も表示されていないのか､

106
00:09:16,360 --> 00:09:19,150
‫よくわからないですよね｡

107
00:09:19,150 --> 00:09:27,640
‫これから行うのは､ このif文にelseを追加し､ さらに括弧を付けて､ もう一つのUログを作成することです｡

108
00:09:27,640 --> 00:09:34,450
‫そして今回のテキストは､ アクターがヒットしない､ 再コンパイルしてエディターで遊んでこよう､ ということになる｡

109
00:09:34,450 --> 00:09:35,230
‫そして､ 今､ あなたはそれを見ることができます｡

110
00:09:35,230 --> 00:09:41,230
‫ガーゴイルを見に行くまで､ ずっとアクターが当たらないって言ってるんです｡

111
00:09:41,230 --> 00:09:43,900
‫そして今､ ガーゴイルは殴られているものだと言っています｡

112
00:09:43,900 --> 00:09:50,740
‫もし､ 私がそこから離れすぎて射程圏外になった場合､ 再び殴られる俳優がいないと言っているのがわかると思います｡

113
00:09:50,770 --> 00:09:51,280
‫素晴らしい内容です｡

114
00:09:51,280 --> 00:09:58,090
‫球体オブジェクトのジオメトリスイープを行い､ 特定の Trace

115
00:09:58,270 --> 00:10:04,420
‫チャンネルのアクタにのみ反応することが確認できました｡

116
00:10:04,420 --> 00:10:06,880
‫だから､ それが唯一の発見なのです｡

117
00:10:06,880 --> 00:10:08,770
‫それでは､ 次回の講義でお会いしましょう｡

