﻿1
00:00:04,390 --> 00:00:05,410
‫こんにちは､ ようこそ｡

2
00:00:05,420 --> 00:00:11,230
‫この講義では､ メンバー関数と､ 特定のベクトルの方向を把握することができるこのget

3
00:00:11,230 --> 00:00:17,680
‫safeとnormal関数を紹介する予定です｡

4
00:00:17,680 --> 00:00:19,900
‫さっそく､ この仕組みを見てみましょう｡

5
00:00:20,690 --> 00:00:28,200
‫ですから､ プラットフォームを逆方向に送るというシンプルな方法は､ 私たちがテストした速度ではうまくいっているのです｡

6
00:00:28,220 --> 00:00:34,130
‫しかし､ もし私が「このプラットフォームを10倍速くしよう」と言ったらどうなるでしょうか｡

7
00:00:34,160 --> 00:00:36,570
‫さっそくプレイして見ましょう｡

8
00:00:36,590 --> 00:00:43,710
‫さて､ 突然そのプラットフォームがかなり前に飛び出し､ 以前と同じ位置でウロウロしているわけではありません｡

9
00:00:43,730 --> 00:00:53,330
‫その理由は､ 現在地をスタート地点に設定しても､ 必ずしも正確に移動した距離ではなく､

10
00:00:53,330 --> 00:00:58,910
‫オーバーシュートしている可能性があるからです｡

11
00:00:58,910 --> 00:01:01,490
‫そして､ それがこのif文の中に収められている｡

12
00:01:01,490 --> 00:01:07,310
‫移動距離より移動した距離の方が大きいということで､ オーバーシュートしてしまうということです｡

13
00:01:07,310 --> 00:01:11,680
‫このif文が発動するためには､ オーバーシュートしていなければならないのです｡

14
00:01:11,690 --> 00:01:17,840
‫しかし､ 問題はどの程度かということで､ それはデルタ時間の大きさに大きく依存することになります｡

15
00:01:17,840 --> 00:01:26,990
‫特にプラットフォームの速度が大きいと､ かなり大きくオーバーシュートしてしまうので､ 時間の経過とともに開始位置がずれてしまう可能性があります｡

16
00:01:26,990 --> 00:01:28,550
‫一定しないかもしれません｡

17
00:01:28,550 --> 00:01:39,770
‫そこで､ 元のスタート地点から新しいスタート地点に行くために必要な移動距離を､ 正確な移動距離を使って計算するのが良い方法でしょう｡

18
00:01:39,770 --> 00:01:43,040
‫では､ この往復の計算を可視化してみましょう｡

19
00:01:43,040 --> 00:01:46,430
‫こっちのスタート地点にプラットフォームがあるということです｡

20
00:01:46,520 --> 00:01:55,840
‫速度は方向と大きさを矢印で表し､ 移動させる距離も指定します｡

21
00:01:55,850 --> 00:01:58,160
‫ここでは､ このブレースで表現することにします｡

22
00:01:58,700 --> 00:02:05,720
‫今､ 私たちが言っているのは､ プラットフォームが最後になる正確なポイントを把握したいということです｡

23
00:02:05,720 --> 00:02:09,960
‫オーバーシュートではなく､ まさに最後の位置です｡

24
00:02:09,980 --> 00:02:14,960
‫さて､ その方法は､ その速度の矢印の方向を取ることです｡

25
00:02:14,960 --> 00:02:22,610
‫ベクトル用語では､ これを矢印の法線と呼び､ 基本的に大きさが1になるようにします｡

26
00:02:22,610 --> 00:02:25,970
‫だから､ 方向性は分かるが､ サイズは1つ｡

27
00:02:25,970 --> 00:02:31,700
‫そのため､ このカウント､ つまり本質的には速度の大きさ､ どれくらいの速度が出ているのかを知ることができるのです｡

28
00:02:32,090 --> 00:02:45,230
‫そして､ その方向と距離の量を掛け合わせることで､ 開始位置から終了位置までの全体の動きを矢印で示すことができるのです｡

29
00:02:45,230 --> 00:02:46,310
‫その通りです｡

30
00:02:46,310 --> 00:02:49,760
‫では､ C++でどのようにすればいいのか見てみましょう｡

31
00:02:49,760 --> 00:02:52,460
‫求めているのは､ 新しいスタート地点です｡

32
00:02:52,460 --> 00:02:59,780
‫では､ 現在行っている方法を削除して､ 開始位置が等しくなるようにしましょう｡

33
00:02:59,780 --> 00:03:05,150
‫まず､ 開始位置に何かを足したものになります｡ なぜなら､ ここから開始して､

34
00:03:05,150 --> 00:03:10,850
‫この緑のベクトルを加えて､ 最後に到達するからです｡

35
00:03:10,850 --> 00:03:13,250
‫では､ そこにある緑のベクトルは何でしょう？

36
00:03:13,670 --> 00:03:18,770
‫まあ､ そこは台速のノーマルが必要なんですけどね｡

37
00:03:18,770 --> 00:03:24,740
‫そして､ 私たちが理解しやすいように､ それを独自の変数に分割することにします｡

38
00:03:24,740 --> 00:03:32,630
‫そこで､ Fベクトル型の新しい変数を作り､

39
00:03:32,630 --> 00:03:47,780
‫移動方向と呼ぶことにしましょう｡

40
00:03:47,780 --> 00:03:48,950
‫それで､ どうしたんですか？

41
00:03:48,950 --> 00:03:50,660
‫今まで見たことがない｡

42
00:03:50,660 --> 00:03:54,770
‫Dotを使って､ ベクトルの成分であるX､ Y､ Zを手に入れました｡

43
00:03:54,770 --> 00:03:55,970
‫それらは変数でした｡

44
00:03:56,060 --> 00:04:08,510
‫しかし､ C++や一般的なオブジェクト指向プログラミングでは､ クラス上に存在する関数もあるので､ DOT演算子を使ってその一つを手に入れることができる｡

45
00:04:08,510 --> 00:04:13,250
‫クラス自体から取り出そうとした時にコロンコロンと使っています｡

46
00:04:13,250 --> 00:04:20,480
‫しかし､ 実際のベクトルそのもの､ つまりプラットフォームの速度ベクトルに対して操作を行いたい場合､

47
00:04:20,480 --> 00:04:25,520
‫そのベクトルの法線を得るためにドット演算子を使うことができます｡

48
00:04:25,520 --> 00:04:30,830
‫つまり､ メンバー変数の代わりにメンバー関数を使うということです｡

49
00:04:31,070 --> 00:04:36,770
‫プラットフォーム速度のセーフノーマルを取得し､ 行の最後にセミコロンを付けます｡

50
00:04:36,770 --> 00:04:41,360
‫これは､ 本質的に移動方向を示す変数があるためです｡

51
00:04:41,360 --> 00:04:56,870
‫つまり､ オーバーシュートせずに最後まで正確に移動したいので､ 設定された移動距離に移動方向を乗じたものを後続のラインで使用することができます｡

52
00:04:56,870 --> 00:05:01,850
‫そして､ それが終わったら､ 実際にプラットフォームをエンドロケーションに移動させなければなりません｡

53
00:05:01,850 --> 00:05:08,630
‫なぜなら､ そうしないと､ プラットフォームがオーバーシュートして､

54
00:05:08,630 --> 00:05:16,460
‫終了位置を過ぎてしまうからです｡

55
00:05:16,700 --> 00:05:20,000
‫そのため､ 終点まで正確に移動することができるのです｡

56
00:05:20,050 --> 00:05:23,710
‫そして､ その新しい出発地点からスタートする｡

57
00:05:23,740 --> 00:05:31,420
‫ここで重要なのは､ 移動方向を把握するためにプラットフォームベロシティを使用するため､ これらをすべて実行した後にプラットフォームベロシティを更新することです｡

58
00:05:31,420 --> 00:05:36,230
‫そこで､ アクターの位置を設定した後に､ プラットフォームベロシティを更新することにします｡

59
00:05:36,250 --> 00:05:40,690
‫では､ 1つのリールに戻ってコンパイルを押して､ これが修正されているかどうか見てみましょう｡

60
00:05:40,690 --> 00:05:47,230
‫我々のプラットフォームが前後に移動する問題､ この端末を閉じて再生を押してみよう｡

61
00:05:47,230 --> 00:05:56,020
‫そして今､ 見てみると､ プラットフォームは素早く動いていますが､ 私たちが期待する開始と終了の位置の周辺を確実に動いているのです｡

62
00:05:56,020 --> 00:05:58,300
‫というわけで､ 今回の講義で取り上げたかったことは以上です｡

63
00:05:58,300 --> 00:06:03,880
‫一部のプラットフォームで発生した可能性のあるバグを修正しました｡

64
00:06:03,880 --> 00:06:05,380
‫次回作でお会いしましょう｡

