﻿1
00:00:04,340 --> 00:00:05,240
‫こんにちは､ ようこそ｡

2
00:00:05,240 --> 00:00:12,830
‫この講義では､ grab関数をより小さく､ より読みやすくするために､ コードのリファクタリングを行う予定です｡

3
00:00:12,830 --> 00:00:15,290
‫そして､ 今回もパラメータを使用することになります｡

4
00:00:15,290 --> 00:00:18,860
‫今回は､ 実際にそれをパラメータとして受け取る関数を作成します｡

5
00:00:18,860 --> 00:00:21,380
‫さっそく､ その方法を見てみましょう｡

6
00:00:22,130 --> 00:00:29,090
‫ですから､ 一般的に機能は一画面に収まるようにするのがベストプラクティスです｡

7
00:00:29,090 --> 00:00:37,490
‫今､ 私の場合､ 画面がとても大きいのですが､ まだまだ勉強中なので､ 実はさらに小さな機能で理解できるようにすることに意味があるのです｡

8
00:00:38,030 --> 00:00:46,070
‫そして､ このグラブ機能が長くなりすぎたので､ かなり機能的に2つのユニットに分けてもいいのではないかと思います｡

9
00:00:46,070 --> 00:00:52,250
‫1つ目は､ スイープを行うビットで､ スタートとエンドのベクトルの計算をすべて行い､

10
00:00:52,250 --> 00:00:59,480
‫ヒットした結果とヒットしたかどうかのブール値を出力する予定です｡

11
00:00:59,480 --> 00:01:05,900
‫そして､ 2つ目のビットは､ if文の中にあります｡ これは､ おそらくグラブの仕事として残しておくことができます｡ なぜなら､

12
00:01:05,900 --> 00:01:08,930
‫これは実際にグラブに関係しているからですね｡

13
00:01:08,930 --> 00:01:10,790
‫剛体を起こす必要がある｡

14
00:01:10,790 --> 00:01:16,430
‫grabという関数で呼ばれるメソッドの中で､ 意味のあるコンポーネントを掴まなければならない｡

15
00:01:16,430 --> 00:01:20,210
‫でも､ この他のものは､ ちょっと余計なお世話ですね｡

16
00:01:20,210 --> 00:01:23,720
‫むしろユーティリティとして引き込まないといけないんです｡

17
00:01:23,720 --> 00:01:28,580
‫そこで､ その実用性を高めるために､ 手の届くところにグラブ・アベレージを作ることに挑戦したいと思います｡

18
00:01:28,580 --> 00:01:29,870
‫そう呼ばれるべきだと思います｡

19
00:01:29,870 --> 00:01:33,290
‫そのコードの塊が何をするのかを説明しているのだと思います｡

20
00:01:33,290 --> 00:01:37,220
‫そこで､ そのスイープコードをすべて新しいプライベート関数に抽出します｡

21
00:01:37,220 --> 00:01:41,600
‫そのパラメータと戻り値はどうあるべきか､ 考えてみてください｡

22
00:01:41,600 --> 00:01:43,670
‫2つの出力があることを忘れないでください｡

23
00:01:43,670 --> 00:01:46,760
‫だから､ ヒットとヒットの結果が出たんです｡

24
00:01:46,760 --> 00:01:51,890
‫そのため､ outパラメータを使った試行錯誤を考える必要があります｡

25
00:01:52,040 --> 00:01:58,970
‫さて､ ちょっとだけヒントが欲しいという方のために､ ヘッダーファイルに何を入れるかをちょっとだけお見せしましょう｡

26
00:01:58,970 --> 00:02:01,520
‫そうでない場合は､ 今すぐビデオを一時停止しに行くことができます｡

27
00:02:01,820 --> 00:02:04,340
‫そうでなければ､ ヒントを出します｡

28
00:02:04,730 --> 00:02:12,740
‫grab Hに移動して､ get physics handleの下に､

29
00:02:12,740 --> 00:02:23,180
‫何かを取得できたかどうかを示すBoolean戻り値型を持つことにします｡

30
00:02:23,180 --> 00:02:27,650
‫次に､ このパラメータにアウトパラメータを与える必要があります｡

31
00:02:27,650 --> 00:02:34,040
‫つまり､ Fヒット結果を不定期に参照することになるわけです｡

32
00:02:34,040 --> 00:02:35,630
‫参考文献を載せる｡

33
00:02:36,590 --> 00:02:41,450
‫アンパサンドで､ このようにaltのヒット結果を呼び出すことにします｡

34
00:02:41,450 --> 00:02:49,340
‫それから､ これでは機能が何も変わらないので､ コスト面でも工夫できると思います｡

35
00:02:49,340 --> 00:02:52,280
‫すでに考えていたのであれば､ ちょっとしたボーナスポイントですね｡

36
00:02:52,490 --> 00:02:57,860
‫それでは､ ビデオを一時停止して､ C++ファイルにその関数を記入してみてください｡

37
00:03:01,090 --> 00:03:01,420
‫なるほど｡

38
00:03:01,420 --> 00:03:02,190
‫お帰りなさい｡

39
00:03:02,200 --> 00:03:03,010
‫だから､ コピーするんです｡

40
00:03:03,010 --> 00:03:04,960
‫C++に行くんだ｡

41
00:03:04,960 --> 00:03:11,800
‫ヘッダーファイルの順番と同じになるように､ Get Physics Handleコンポーネントの下に配置するつもりです｡

42
00:03:11,980 --> 00:03:16,930
‫前にUグラボをつける｡

43
00:03:17,110 --> 00:03:18,520
‫正しくインデントする

44
00:03:18,520 --> 00:03:26,890
‫セミコロンの代わりに中括弧を追加し､ grabにあるコードを移動させます｡

45
00:03:26,890 --> 00:03:36,220
‫53行目から65行目まで､ この部分をすべてカットして､ すぐに何かに置き換えます｡

46
00:03:36,370 --> 00:03:44,710
‫リーチのかかったボールをつかむために貼り付けると､ このようなヒット結果が生まれました｡

47
00:03:44,710 --> 00:03:53,530
‫そこで､ このヒット数と同じ数のヒット数を設定することができます｡

48
00:03:53,620 --> 00:03:56,740
‫ヒットしたときだけやりたいかもしれない｡

49
00:03:56,740 --> 00:04:05,440
‫そこで､ has hitというif文を入れて､ if文の中で代入､

50
00:04:05,530 --> 00:04:11,500
‫out hitからhit結果までラップして､

51
00:04:11,500 --> 00:04:23,260
‫関数の最後でhas hitを返すようにすればよいのです｡

52
00:04:23,260 --> 00:04:28,960
‫実際には､ ここで新しいヒット結果を作成し､ それをヒット結果にコピーする必要はないのです｡

53
00:04:28,960 --> 00:04:30,250
‫それじゃ､ メモリの無駄遣いじゃないですか｡

54
00:04:30,820 --> 00:04:36,490
‫リーチでボールをつかむという内部で作成しているヒット結果を削除し､

55
00:04:36,490 --> 00:04:44,980
‫代わりに､ 渡された参照を使用して､ チャンネルごとにスイープに直接渡すことができます｡

56
00:04:44,980 --> 00:04:50,440
‫そのため､ この関数への参照をスイープ・シングルチャンネルに渡し､

57
00:04:50,440 --> 00:04:57,880
‫そこにデータを取り込むようにしています｡

58
00:04:57,880 --> 00:05:01,510
‫そして実際､ has hitを格納するための変数も必要ないと思います｡

59
00:05:01,510 --> 00:05:03,790
‫そのまま帰ればいいんです｡

60
00:05:03,790 --> 00:05:09,730
‫get world sweep channelの結果を返すのが､ よりきれいになりそうです｡

61
00:05:09,730 --> 00:05:17,050
‫その結果を､ "get grab able in reach "またはその呼び出しを行った人物に渡すだけなのです｡

62
00:05:17,050 --> 00:05:21,970
‫ということで､ 誰が電話しているかといえば､ 今度は私たちのグラブに上がる必要があります｡

63
00:05:21,970 --> 00:05:24,670
‫ヒットした結果をどこかで作る必要があるのです｡

64
00:05:24,670 --> 00:05:25,690
‫ここでつくらなければならないのです｡

65
00:05:25,690 --> 00:05:28,150
‫それでヒットした結果､ これが入力されることになります｡

66
00:05:28,330 --> 00:05:38,320
‫ブーリアン変数を作成し､ リーチでつかめるようにするために､ ヒットの種類を設定することになります｡

67
00:05:38,320 --> 00:05:43,240
‫そして､ 入力させたいヒット結果を参照で渡すことになります｡

68
00:05:43,240 --> 00:05:49,270
‫そして､ ヒットした場合は､ そのままグラブのコードを実行します｡

69
00:05:49,270 --> 00:05:50,320
‫ファンタスティックなもの

70
00:05:50,320 --> 00:05:56,590
‫このグラブ機能を1画面に収めるために､ 何かを関数に移し替えています｡

71
00:05:56,590 --> 00:06:05,200
‫そして､ 再びアウトパラメータを利用し､ 今度は本格的にアウトパラメータを利用する自分用の関数を作りました｡

72
00:06:05,200 --> 00:06:07,270
‫次の動画でお会いしましょう｡

