﻿1
00:00:04,080 --> 00:00:05,890
‫こんにちは､ お帰りなさい｡

2
00:00:05,910 --> 00:00:11,990
‫これで戦車を前進､ 後退させることができましたが､ 実際に操縦する方法はありません｡

3
00:00:12,000 --> 00:00:18,260
‫そこで､ このビデオでは､ ローカルローテーションというものを使って､ 実際に水槽を回転させる作業をします｡

4
00:00:18,270 --> 00:00:23,040
‫アクターローカルオフセットを追加するための回転アナログです｡

5
00:00:23,070 --> 00:00:31,470
‫さて､ アクターのローカルオフセットには複数の入力パラメータがあり､ 他の3つはオプションであるため､ 最初の1つだけを渡しました｡

6
00:00:31,650 --> 00:00:35,010
‫しかし､ そのほかの3つのうち1つは､ 掃除に関係することでした｡

7
00:00:35,010 --> 00:00:41,190
‫そして､ ローテーションの実装を続ける前に､ スイープについて少し説明します｡

8
00:00:41,190 --> 00:00:45,660
‫というわけで､ ADD Actor Local Offsetのドキュメントに戻りました｡

9
00:00:45,660 --> 00:00:48,720
‫では､ これらの入力パラメータを今一度見てみましょう｡

10
00:00:48,750 --> 00:00:52,770
‫2つ目はB Sweepと呼ばれるもので､ ブーリアンです｡

11
00:00:53,160 --> 00:00:59,790
‫さて､ もう少し下にスクロールして､ Bスイープの情報を読んでみると､ 「目的地までスイープして､

12
00:00:59,790 --> 00:01:08,820
‫途中でオーバーラップを起こし､ 何かに遮られた場合は目的地の手前で停止するかどうか」と書かれています｡

13
00:01:09,180 --> 00:01:14,790
‫さらに､ ルート部品のみを掃引し､ ブロッキングコリジョンをチェックするとも書かれています｡

14
00:01:14,790 --> 00:01:17,430
‫子部品は掃くことなく動きます｡

15
00:01:17,700 --> 00:01:20,820
‫コリジョンがオフの場合､ 効果はありません｡

16
00:01:21,060 --> 00:01:30,390
‫では､ これがどういうことかというと､ ゲームプログラミングでは､ スイープが有効である限り､ エンジンが行う技術です｡

17
00:01:30,570 --> 00:01:42,090
‫この円で表現された球体のような移動体がある場合､ この球体が移動するたびに､ エンジンはスイープチェックを実行しているのです｡

18
00:01:42,090 --> 00:01:51,420
‫これは､ このフレームでその動きが2つのオブジェクトの間に重なりをもたらすかどうかをチェックしていることを意味します｡

19
00:01:51,630 --> 00:01:55,560
‫このブロックは､ この長方形で表現されています｡

20
00:01:56,010 --> 00:01:59,580
‫ここで､ 世界にこの2つしかない物体を考えてみましょう｡

21
00:01:59,580 --> 00:02:09,330
‫球体がオブジェクトに向かって移動している間､ エンジンはこの2つのオブジェクトが重なっているかどうかをチェックしているのです｡

22
00:02:09,570 --> 00:02:19,500
‫さて､ 球体が動き続けている間に､ あるフレームで球体が移動して､ もう一方のオブジェクトに重なったとします｡

23
00:02:19,500 --> 00:02:26,760
‫スイープを有効にすると､ エンジンはこの重なりを検知して､ 球体を特定のフレームに戻し､

24
00:02:26,790 --> 00:02:31,920
‫実際にオブジェクトを貫通することがないようにします｡

25
00:02:31,950 --> 00:02:35,460
‫これで､ 実際に球体が物体を貫通する様子は見られなくなりました｡

26
00:02:35,490 --> 00:02:40,530
‫その重なりを､ 実際に動作が実装される前にエンジンがキャッチするのです｡

27
00:02:40,530 --> 00:02:46,020
‫その結果､ 球体が重なる寸前で止まっていることがわかるわけです｡

28
00:02:46,020 --> 00:02:52,710
‫ですから､ 例えばこの長方形が壁だったとしたら､ 球体は壁の表面で止まってしまうのです｡

29
00:02:52,710 --> 00:02:55,170
‫それが､ 掃除の成果です｡

30
00:02:55,170 --> 00:03:00,030
‫現在､ ドキュメントには､ コリジョンがオフの場合､ これは何の効果もないと書かれています｡

31
00:03:00,030 --> 00:03:04,590
‫そのため､ スイープを行うにはコリジョンを有効にする必要があります｡

32
00:03:04,740 --> 00:03:12,090
‫そして､ 必要であれば､ ここに別の入力パラメータを渡すことができます｡

33
00:03:12,120 --> 00:03:20,310
‫2つ目はスイープのブール値で､ ここに真を渡すことができます｡

34
00:03:20,310 --> 00:03:24,540
‫では､ これをコンパイルして､ スイープを有効にした場合の効果をみてみましょう｡

35
00:03:24,540 --> 00:03:31,560
‫再生ボタンを押して､ 例えば壁を通り抜けようとすると､ 壁を突き抜けていくのがわかります｡

36
00:03:31,560 --> 00:03:34,020
‫だから､ 何かがうまくいっていないのです｡

37
00:03:34,020 --> 00:03:38,280
‫では､ そのBPポンドタンクのルート部品とは何なのかを見てみましょう｡

38
00:03:38,280 --> 00:03:41,730
‫思い出してください､ ルートにはカプセル部品を使いました｡

39
00:03:41,730 --> 00:03:45,570
‫だから､ BP池の水槽で選んだカプセル成分で｡

40
00:03:45,570 --> 00:03:51,690
‫詳細パネルに移動し､ 下にスクロールすると､ ここにCollisionというセクションがあります｡

41
00:03:51,690 --> 00:03:55,860
‫そして､ ここにコリジョンプリセットがあり､ ドロップダウンがあります｡

42
00:03:55,860 --> 00:03:57,420
‫では､ それを広げてみましょう｡

43
00:03:57,420 --> 00:04:05,010
‫さて､ コリジョン プリセットはいくつでも設定することができますが､ デフォルトでは､ すべてのダイナミックなオーバーラップを見ることができます｡

44
00:04:05,010 --> 00:04:08,280
‫さて､ お使いのアンリアル・エンジンのバージョンによりますが｡

45
00:04:08,280 --> 00:04:11,580
‫ここに他のものが見えるかもしれませんが､ これを変更することができます｡

46
00:04:11,580 --> 00:04:18,750
‫ドロップダウンを選択して､ block all dynamicを選択すると､ 以下のグレーアウトされたオプションが変更されます｡

47
00:04:18,750 --> 00:04:25,470
‫ここでは､ 3列のチェックボックスが表示されています｡

48
00:04:25,590 --> 00:04:33,240
‫これは衝突に対する応答で､ 左の欄には衝突オブジェクトの種類のリストが表示されます｡

49
00:04:33,240 --> 00:04:37,860
‫つまり､ 任意のコンポーネントは､ 独自のコリジョンオブジェクトタイプを持つことになります｡

50
00:04:37,860 --> 00:04:42,840
‫カプセルのオブジェクトタイプがワールドダイナミックに設定されていることに注目してください｡

51
00:04:42,840 --> 00:04:48,600
‫また､ コリジョンプリセットをすべてのダイナミックをブロックするように変更すると､ 他のすべてのコリジョンオブジェクトタイプに反応して､

52
00:04:48,600 --> 00:04:54,450
‫コリジョン応答がすべてブロックするようにチェックされていることがわかります｡

53
00:04:54,450 --> 00:04:59,160
‫では､ 再生ボタンを押して､ モノを通過させてみるとどうなるか見てみましょう｡

54
00:04:59,160 --> 00:05:03,630
‫と重なるギリギリのところで止まっているのがわかると思います｡

55
00:05:03,710 --> 00:05:04,860
‫他の池のこと｡

56
00:05:04,880 --> 00:05:14,340
‫では､ 水槽を動かして壁と重なるようにし､ 他の池を回り込むようにするとどうでしょう｡

57
00:05:14,360 --> 00:05:17,900
‫今は､ 再生ボタンを押すと､ 壁もブロックしてしまいます｡

58
00:05:17,900 --> 00:05:26,330
‫つまり､ このコリジョンプリセットブロック､ オールダイナミックは､ 他のすべてのオブジェクトタイプをブロックするコリジョンレスポンスを設定します｡

59
00:05:26,330 --> 00:05:32,900
‫また､ コンポーネントパネルでコンポーネントを選択し､ 詳細パネルのコリジョンセクションまでスクロールしてコリジョンプリセットのドロップダウンを開くと､

60
00:05:32,900 --> 00:05:40,790
‫特定のコンポーネントのコリジョンオブジェクトタイプを常に確認することができます｡

61
00:05:40,790 --> 00:05:47,540
‫ベースメッシュを選択し､ そのオブジェクトタイプをワールドダイナミックにし､ すべてをブロックするように設定しています｡

62
00:05:47,540 --> 00:05:55,490
‫カプセルコンプのコリジョンプリセットですべてのダイナミックをブロックするように設定したので､ スイープが機能していることがわかります｡

63
00:05:55,490 --> 00:06:02,720
‫そして､ ルートコンポーネントのみを掃引し､ ブロックの衝突をチェックすることをドキュメントで確認しました｡

64
00:06:02,720 --> 00:06:06,140
‫ですから､ 他の部品がどう設定されているかはあまり関係ありません｡

65
00:06:06,170 --> 00:06:10,790
‫ルートコンポーネントが何かをブロックしていないかどうかを確認しているだけです｡

66
00:06:10,790 --> 00:06:17,510
‫さて､ 一部の生徒がつまずく問題として､ カプセルをセットしてすべてのダイナミックをブロックすると､ すぐに移動できなくなることがあります｡

67
00:06:17,810 --> 00:06:23,750
‫さて､ その原因のひとつに､ カプセルが床と重なっていることが考えられます｡

68
00:06:23,780 --> 00:06:28,820
‫カプセルが床と重なっている場合､ エンジンがブロックするように設定されているものとカプセルの部品が重なっている場合､

69
00:06:28,820 --> 00:06:35,390
‫戦車を移動させることができないため､ 移動することができません｡

70
00:06:35,390 --> 00:06:41,240
‫ですから､ これを簡単に解決するには､ カプセルが床と重ならないようにすることです｡

71
00:06:41,720 --> 00:06:49,370
‫さて､ BP -- タンクに入り､ カプセルがちょうどこのホイールの上にあることを確認します｡

72
00:06:49,370 --> 00:06:52,640
‫オルソグラフィックビューにする｡

73
00:06:53,720 --> 00:06:56,840
‫そして､ ベースメッシュを選択し､ それを下に持ってくるだけです｡

74
00:06:56,840 --> 00:07:00,980
‫つまり､ カプセル部品のすぐ下にホイールがあるわけです｡

75
00:07:01,190 --> 00:07:06,470
‫では､ メッシュがちょうど床の上にあり､ カプセルがメッシュのすぐ上にある場合です｡

76
00:07:06,680 --> 00:07:09,010
‫動けるようになるはずです｡

77
00:07:09,020 --> 00:07:12,110
‫だから､ 再生を押して､ そこに行くんだ｡

78
00:07:12,740 --> 00:07:17,620
‫さて､ 掃き出しが終わったところで､ いよいよローテーションの実装に入ります｡

79
00:07:17,630 --> 00:07:19,520
‫プロジェクトの設定に戻りましょう｡

80
00:07:19,520 --> 00:07:29,060
‫edit project settings "で "input "までスクロールし､ "input "セクションで軸のマッピングを設定します｡

81
00:07:29,060 --> 00:07:30,710
‫これでもう大丈夫です｡

82
00:07:30,710 --> 00:07:31,790
‫前に進む｡

83
00:07:31,790 --> 00:07:44,060
‫次はTurnという曲で､ TurnにはDとAが割り当てられていて､ Dはスケールが1､ Aはスケールがマイナス1になっています｡

84
00:07:44,060 --> 00:07:48,080
‫DとAXを使ってタンクを回転させたいと考えています｡

85
00:07:48,170 --> 00:07:54,470
‫そこで､ 回転軸マッピングに関数をバインドするために､ バインドする関数が必要です｡

86
00:07:54,470 --> 00:08:04,100
‫Vのコードに戻り､ タンクファイルに移動して､ 回転軸マッピングにバインドする関数を作成することにします｡

87
00:08:04,100 --> 00:08:08,630
‫さて､ このvoid関数をturnと呼び､ moveと同じようにします｡

88
00:08:08,660 --> 00:08:12,560
‫これはfloatの入力パラメータを必要とし､ この値を呼び出すことにします｡

89
00:08:12,560 --> 00:08:19,790
‫この関数を宣言したので､ 定義してタンクCPとし､ move関数のすぐ下に置くことにします｡

90
00:08:19,790 --> 00:08:27,590
‫そこで､ 関数本体を与えたのですが､ 関数名の直前にダブルコロンと一緒にクラス名が必要です｡

91
00:08:27,590 --> 00:08:29,270
‫これで､ ちゃんとした機能ができました｡

92
00:08:29,270 --> 00:08:31,400
‫さて､ やるべきことはこれだけではありません｡

93
00:08:31,430 --> 00:08:36,590
‫この関数がturnという軸マッピングに束縛されていることを確認する必要があります｡

94
00:08:36,590 --> 00:08:44,000
‫プレイヤー入力コンポーネントのセットアップで､ 前進軸のマッピングと同じように行います｡

95
00:08:44,000 --> 00:08:51,290
‫プレーヤー入力コンポーネントと言い､ 矢印演算子と軸の結合を行います｡

96
00:08:52,100 --> 00:08:58,250
‫さて､ 最初のパラメータは､ テキストマクロでラップされた軸のマッピング名となります｡

97
00:08:58,340 --> 00:09:02,420
‫そこで､ 軸のマッピング名としてturnとすることにしました｡

98
00:09:02,420 --> 00:09:05,180
‫次に､ 関数をバインドするオブジェクトです｡

99
00:09:05,180 --> 00:09:10,100
‫これを渡して､ 最後にまたバインドしたい関数を渡します｡

100
00:09:10,100 --> 00:09:14,600
‫オペレーターのアドレスが必要で､ 戦車で回ることになる｡

101
00:09:14,600 --> 00:09:16,550
‫だから､ それくらい簡単なことなんです｡

102
00:09:16,580 --> 00:09:21,200
‫ターン機能をターン軸マッピングにバインドしました｡

103
00:09:21,500 --> 00:09:26,330
‫あとは､ ターン機能で実際に何かを行うだけです｡

104
00:09:26,330 --> 00:09:32,390
‫さて､ ADD Actor Local offset を見てきましたが､ この関数には回転方向のアナログがあり､ ADD Actor

105
00:09:32,390 --> 00:09:35,240
‫Local rotation と呼ばれています｡

106
00:09:35,240 --> 00:09:41,600
‫この関数には､ F ローテーターを受け取るバージョンと､ F クワッドと呼ばれるものを受け取るバージョンの

107
00:09:41,600 --> 00:09:48,530
‫2 種類があることがわかります｡

108
00:09:48,530 --> 00:09:51,140
‫今回はFローテータを取るバージョンを使用します｡

109
00:09:51,140 --> 00:09:53,480
‫デルタ回転と呼ばれるものです｡

110
00:09:53,480 --> 00:10:03,170
‫また､ ADD Actor Local offsetと同様に､ Sweepパラメータと他の2つの入力パラメータを取ることができます｡

111
00:10:03,170 --> 00:10:08,720
‫そして､ これら最後の3つの入力パラメータは､ アクターローカルオフセットを追加するのと同様､ オプションです｡

112
00:10:08,720 --> 00:10:13,060
‫そこで､ Fベクトルの代わりに､ Fローテータを渡すことにします｡

113
00:10:13,070 --> 00:10:20,210
‫F rotatorを右クリックして定義に進むと､ rotatorに移動し､

114
00:10:20,210 --> 00:10:30,410
‫float型の3つのパブリックメンバ変数が表示されます｡

115
00:10:30,410 --> 00:10:39,140
‫さて､ FベクトルFローテータと同じように､ X､ Y､ Zの代わりに､ ピッチ､ ヨー､ ロールの3つの成分を持っています｡

116
00:10:39,140 --> 00:10:42,050
‫さて､ ここで気になるのがヨーの成分です｡

117
00:10:42,050 --> 00:10:46,940
‫Z軸を中心とした上軸周りの回転を括弧書きで書いてあります｡

118
00:10:46,940 --> 00:10:52,370
‫そして､ この回転は､ Z軸を中心に回転することにこだわる唯一のタイプです｡

119
00:10:52,370 --> 00:10:54,500
‫そうやって戦車の舵取りをするのです｡

120
00:10:54,500 --> 00:11:06,110
‫さて､ Fローテータにも複数のコンストラクタがあり､ Fベクタと同じようにデフォルトでは初期化なしとなっていることを指摘します｡

121
00:11:06,110 --> 00:11:13,190
‫そこで､ floatを1つだけ受け取るものを使えば､ すべてのコンポーネントはそのfloatの値で初期化されます｡

122
00:11:13,220 --> 00:11:18,560
‫フロート値が3つあるものがありますが､ 他のものも見てみてください｡

123
00:11:18,560 --> 00:11:25,820
‫さて､ ゼロローテーターがあることも指摘しておきますが､ ちなみにこれはスタティック・ゼロローテーターです｡

124
00:11:25,820 --> 00:11:34,880
‫そのため､ タンクCPに戻って､ equals F rotator zero rotator zero rotatorは静的メンバ変数であり､

125
00:11:34,880 --> 00:11:48,440
‫スコープ解決演算子でクラス名を指定して､ その静的変数や関数を名前で参照すれば､ このように静的メンバ関数や変数にアクセスできるようになるのです｡

126
00:11:48,440 --> 00:11:50,180
‫それが､ 私たちがここで皆さんと一緒にやっていることです｡

127
00:11:50,180 --> 00:11:53,060
‫ゲームプレイのスタティックはワールドデルタ秒を取得するスタティックです｡

128
00:11:53,310 --> 00:12:02,230
‫つまり､ ゲームプレイ静的クラスの実際のインスタンスがなくても､ その静的関数にアクセスすることができます｡

129
00:12:02,250 --> 00:12:04,160
‫もう存在しているだけなんです｡

130
00:12:04,170 --> 00:12:06,930
‫ゼロローテーター､ ゼロベクトルも同様です｡

131
00:12:07,080 --> 00:12:14,700
‫ローテータhをクローズアウトして､ このデルタ回転があり､ ローテータがゼロに初期化されているわけです｡

132
00:12:14,730 --> 00:12:20,280
‫これで､ FベクトルのX､ Y､ Zがゼロになったのと同様に､ ピッチとロールがゼロになりました｡

133
00:12:20,280 --> 00:12:22,920
‫そのため､ このコンポーネントを変更する必要があります｡

134
00:12:22,920 --> 00:12:30,120
‫そこで､ MOV関数のデルタ位置でやったように､ デルタ回転の疑似コードを作ってみましょう｡

135
00:12:30,120 --> 00:12:43,560
‫もちろん､ フレームレートに依存しない旋回をしたいので､ デルタ時間でスケーリングされた値に設定する必要があります｡

136
00:12:43,560 --> 00:12:49,890
‫これを設定したら､ ローカル回転を追加して､ 各フレームでFローテータに従ってアクタを回転させ､

137
00:12:49,890 --> 00:12:54,630
‫Yaを値でスケーリングします｡

138
00:12:54,630 --> 00:13:00,320
‫つまり､ 何もキーを押していなければ0になり､ DXとaxを押していれば値を持つことになります｡

139
00:13:00,330 --> 00:13:02,190
‫そこで､ 今度は挑戦です｡

140
00:13:02,190 --> 00:13:06,090
‫これは､ アクターのローカルオフセットを追加するのと同じように機能することになります｡

141
00:13:06,120 --> 00:13:09,000
‫ただ一つ違うのは､ 今は役者を交代させていることです｡

142
00:13:09,000 --> 00:13:14,820
‫アクターを回転させるためにある種のターンレートが必要なので､ ターンレート変数を作成し､

143
00:13:14,820 --> 00:13:20,550
‫これをフロートにして､ スピード変数のすぐ隣のプライベートセクションに置きます｡

144
00:13:20,550 --> 00:13:25,560
‫この変数をあなたのプロパティで公開し､ 適切な新しいプロパティ指定子を選択してください｡

145
00:13:25,560 --> 00:13:32,490
‫次に､ turn 関数で､ 特に Delta rotation を設定するつもりです｡

146
00:13:32,490 --> 00:13:41,280
‫私たちは､ あなたのコンポーネントを気にして､ 値を turn rate 変数の値に等しくして､

147
00:13:41,280 --> 00:13:48,780
‫delta time を掛けてから､ この f rotator を渡して､ add

148
00:13:48,780 --> 00:13:59,190
‫actor local rotation を呼び出す準備ができました｡

149
00:14:02,110 --> 00:14:02,500
‫なるほど｡

150
00:14:02,500 --> 00:14:04,630
‫だから､ これはかなりシンプルなものになるんだ｡

151
00:14:04,630 --> 00:14:07,360
‫ターンレート変数があればいいんです｡

152
00:14:07,390 --> 00:14:14,440
‫今度は､ スピードのすぐ下のタンクに入り､ フロート回転数を作成します｡

153
00:14:14,590 --> 00:14:18,640
‫さて､ あなたはおそらくこれを何らかの値で初期化するでしょうし､ それでいいのです｡

154
00:14:18,640 --> 00:14:24,040
‫選んでいるものと違うなら､ 45Fで様子を見ようと思っています｡

155
00:14:24,040 --> 00:14:29,150
‫しかし､ これをブループリントに公開することで､ 開発中に変更できるようにするのです｡

156
00:14:29,170 --> 00:14:35,620
‫あとはどこでも編集できるようにしたいので､ スピードと同じカテゴリの動きにくっつけようと思っています｡

157
00:14:35,620 --> 00:14:42,180
‫そこで､ このあなたのプロパティを盗んで､ 右回転の上のここに貼り付けて､ どこにでも設定できるようにします｡

158
00:14:42,190 --> 00:14:45,280
‫今すぐカテゴリ移動､ 戦車CP｡

159
00:14:45,310 --> 00:14:48,190
‫デルタ回転のイヤーができた｡

160
00:14:48,190 --> 00:14:50,320
‫そこで､ デルタ回転とします｡

161
00:14:50,650 --> 00:14:51,400
‫そうですね｡

162
00:14:51,790 --> 00:14:57,060
‫そして､ 値の時間､ 回転率の時間､ デルタ時間に等しくなるように設定するつもりです｡

163
00:14:57,070 --> 00:15:06,340
‫もちろん､ Uゲームプレイのスタティックでデルタタイムを取得することもできます｡

164
00:15:06,460 --> 00:15:08,350
‫そこで､ それをそのまま貼り付けます｡

165
00:15:08,470 --> 00:15:12,220
‫今､ 私の擬似コードは正確に一致していないことがわかりました｡

166
00:15:12,220 --> 00:15:13,270
‫順番が違うんです｡

167
00:15:13,270 --> 00:15:14,830
‫デルタタイムは､ ここでは真ん中です｡

168
00:15:14,830 --> 00:15:21,940
‫3つの値を掛け合わせる場合､ どのような順番で掛け合わせても同じ結果が得られるので問題ない｡

169
00:15:21,940 --> 00:15:29,350
‫だから一応､ この3つの値を違う順番でかけても､ 計算結果は同じになる｡

170
00:15:29,350 --> 00:15:30,910
‫だから､ あまり気にしないでください｡

171
00:15:30,910 --> 00:15:32,830
‫今度はデルタ回転です｡

172
00:15:32,830 --> 00:15:41,860
‫あとは､ add actor local rotationを呼び出すだけです｡ Delta rotationを渡し､ 2番目の入力には､

173
00:15:41,950 --> 00:15:47,290
‫回転時にスイープを有効にするためにtrueを渡すつもりです｡

174
00:15:47,290 --> 00:15:48,670
‫では､ これをコンパイルしてみましょう｡

175
00:15:48,820 --> 00:15:50,740
‫よし､ これでまとまった｡

176
00:15:50,740 --> 00:15:57,700
‫次のビデオでは､ ゼロベクトルとゼロローテータがこれらのラインから失われていることにお気づきでしょう｡

177
00:15:57,700 --> 00:16:05,890
‫というのも､ 最初はこれらを初期化していたのですが､ 後から､ これらは少なくともゼロ値で初期化されるべきなのだろうと気づいたからです｡

178
00:16:05,890 --> 00:16:12,070
‫ゼロベクターとゼロローテーターはそのままで､

179
00:16:12,070 --> 00:16:16,690
‫近いうちにビデオでお見せします｡

180
00:16:16,690 --> 00:16:17,770
‫だから､ 心配しないでください｡

181
00:16:17,770 --> 00:16:21,430
‫もし､ これらの初期化のものが表示されない場合は､ そこにあるはずです｡

182
00:16:21,430 --> 00:16:23,050
‫そして､ 再び編集部に戻ってきました｡

183
00:16:23,050 --> 00:16:30,970
‫再生ボタンを押してみましょう｡ Dキーで回転させ､ Aキーで反対方向に回転させ､

184
00:16:30,970 --> 00:16:33,790
‫前進と後退も可能です｡

185
00:16:33,790 --> 00:16:39,570
‫だから､ 回転して前進することができるようになった今､ 私たちは世界中を移動することができるようになったのです｡

186
00:16:39,580 --> 00:16:41,890
‫これは大きな節目です｡

187
00:16:41,890 --> 00:16:53,230
‫今はかなりゆっくり動いていますが､ 戦車を選択し､ 移動のカテゴリーを検索してターンレートを90など高いものに変えられるので大丈夫です｡

188
00:16:53,230 --> 00:16:54,760
‫では､ さっそく再生を押してみましょう｡

189
00:16:55,460 --> 00:16:57,630
‫しかも､ かなり高速化されています｡

190
00:16:57,650 --> 00:17:00,110
‫さて､ これでも少し遅いと思われた方｡

191
00:17:00,140 --> 00:17:02,330
‫もちろん､ これらを調整することも可能です｡

192
00:17:02,330 --> 00:17:05,570
‫そこで､ もう一度 -- タンクを選択します｡

193
00:17:05,570 --> 00:17:08,090
‫そして､ 400ではなく､ 800にしよう｡

194
00:17:08,090 --> 00:17:08,720
‫なぜダメなのか？

195
00:17:08,750 --> 00:17:11,840
‫90ではなく､ 例えば120にしよう｡

196
00:17:12,260 --> 00:17:16,160
‫今､ 再生ボタンを押したら､ かなり速くなりました｡

197
00:17:16,160 --> 00:17:18,800
‫だから､ これは本当に､ 本当にいい感じです｡

198
00:17:18,800 --> 00:17:23,390
‫そこで､ セクションプランを振り返ってみると､ 世界中を移動できる戦車が出来上がりました｡

199
00:17:23,390 --> 00:17:29,300
‫最初の箇条書きは確実にチェックされていますし､ WASDの動きにも対応しています｡

200
00:17:29,300 --> 00:17:32,510
‫まだ､ マウス入力は扱っていませんが､ そのうち扱えるようになるでしょう｡

201
00:17:32,510 --> 00:17:35,870
‫しかし､ このゲームの完成に一歩近づいたと言えるでしょう｡

202
00:17:35,870 --> 00:17:43,130
‫まとめると､ スイープとは何か､ そしてオブジェクト同士がすれ違わないようにするためにはどうすればよいかを学びました｡

203
00:17:43,130 --> 00:17:50,210
‫アクターのローカルローテーションを追加し､ 細部で調整可能なターンレートを実装して行いました｡

204
00:17:50,210 --> 00:17:53,750
‫開発を少しでも楽にするために､ エディタにパネルを設置｡

205
00:17:53,750 --> 00:17:54,500
‫素晴らしい仕事です｡

206
00:17:54,500 --> 00:17:56,480
‫今､ 私たちは世界中でタンクを動かしています｡

207
00:17:56,480 --> 00:17:57,770
‫次の動画でお会いしましょう｡

