﻿1
00:00:04,410 --> 00:00:04,750
‫こんにちは｡

2
00:00:04,780 --> 00:00:05,160
‫ようこそ｡

3
00:00:05,160 --> 00:00:12,030
‫この講義では､ コントローラの動きを追加して､ コントローラを使って移動できるようにします（このような動きを見てみましょう）｡

4
00:00:12,060 --> 00:00:19,500
‫ルックアップ率とルックライト率の軸を変えてやってみますが､ なぜそれが必要なのか､ その理由を見てみましょう｡

5
00:00:19,500 --> 00:00:21,300
‫その理由を探るべく､ 潜入してみましょう｡

6
00:00:23,140 --> 00:00:26,410
‫そこで､ コントローラーを使ってシーンを移動できるようにしたいのです｡

7
00:00:26,410 --> 00:00:30,520
‫プレイモードでないときはもうできるんですけどね｡

8
00:00:30,760 --> 00:00:40,840
‫そこで､ これと同じような動きを､ 右スティックでパン､ 左スティックで左右に移動できるようにしたいのです｡

9
00:00:41,050 --> 00:00:42,820
‫また､ 上下することも可能です｡

10
00:00:43,060 --> 00:00:47,340
‫でも､ それは相手がフライングポーンではないので､ できないことなんです｡

11
00:00:47,350 --> 00:00:53,340
‫そこで､ これからやりたいことは､ まず､ 動きのマッピングがしやすいことです｡

12
00:00:53,350 --> 00:01:03,640
‫あとは､ プロジェクトの設定で､ 入力のところにある「エンジン入力」をクリックすれば､ 前方移動軸と右方移動軸を設定することができます｡

13
00:01:03,640 --> 00:01:11,770
‫WとSだけでなく､ 別のマッピングを追加すれば､ ゲームパッドも追加できます｡

14
00:01:11,800 --> 00:01:17,380
‫ゲームパッドの下を見ると､ 左のサムスティックが見えますが､ これは前進のためのY軸にしたいのです｡

15
00:01:17,380 --> 00:01:24,190
‫右の移動は､ またゲームパッドを追加して､ ゲームパッドで､ やはり左スティックです｡

16
00:01:24,190 --> 00:01:29,140
‫しかし､ 今回はX軸とY軸をやっているので､ それが正しい動きなのかどうかを確認することができます｡

17
00:01:29,140 --> 00:01:31,330
‫それでは､ 再生ボタンを押してください｡

18
00:01:31,360 --> 00:01:33,250
‫そのためのショートカットとして､ alt pを使っています｡

19
00:01:33,250 --> 00:01:37,570
‫すると､ 左右は前方に､ 後方は期待通りに動作します｡

20
00:01:37,570 --> 00:01:41,740
‫しかし､ まだマッピングしていないため､ 明らかに回転はうまくいきません｡

21
00:01:41,740 --> 00:01:43,000
‫では､ それに挑戦してみましょう｡

22
00:01:43,000 --> 00:01:48,790
‫設定､ プロジェクト設定､ 入力でもう一度､ 見てみましょう､ 上を見ましょう｡

23
00:01:48,790 --> 00:01:50,350
‫現在､ マウスYを使用しています｡

24
00:01:50,380 --> 00:01:53,380
‫ここに入れるだけでは何か問題があるのでしょうか？

25
00:01:53,380 --> 00:01:58,330
‫例えば､ ゲームパッド､ 右スティック､ そして今回のY軸？

26
00:01:58,630 --> 00:02:02,440
‫まあ､ 最初の試みとしては､ ちょっと遊びに行ってみようか､ ということです｡

27
00:02:02,470 --> 00:02:04,930
‫これなら実は大丈夫と思われるかもしれません｡

28
00:02:04,930 --> 00:02:07,510
‫そこで､ 中に入ってみると､ 動き回ることができるのがわかります｡

29
00:02:07,510 --> 00:02:07,960
‫ええ､ もちろんです｡

30
00:02:07,960 --> 00:02:10,630
‫ちょっと速いけど､ まあまあかな？

31
00:02:10,660 --> 00:02:11,880
‫いいんじゃないですか？

32
00:02:11,890 --> 00:02:13,690
‫まあ､ そうでもないんですけどね｡

33
00:02:15,200 --> 00:02:20,810
‫そしてその理由は､ 最終的にはフレームレートとこれらの軸の働きに集約されるのです｡

34
00:02:21,380 --> 00:02:27,860
‫30フレーム/秒でゲームを動かしているとき､ マウスを画面の左から右へ均等な速度で動かすと､

35
00:02:27,860 --> 00:02:36,560
‫軸の値が10､ 10､ 10となることがあります｡

36
00:02:36,560 --> 00:02:44,420
‫そしてこれは､ 毎回マウスが10単位ずつ右に移動し､ それが毎フレーム同じように行われていることを教えてくれています｡

37
00:02:45,080 --> 00:02:47,890
‫フレームレートを2倍にするとどうなるか？

38
00:02:47,900 --> 00:02:54,170
‫さて､ 突然ですが､ マウスが同じ速度で動いているのは､ プレイヤーが同じ速度で手を動かしているためです｡

39
00:02:54,170 --> 00:02:59,840
‫しかし､ フレームを表示する頻度が高くなり､ 刻みの頻度も高くなると､ 5分の5､

40
00:02:59,840 --> 00:03:06,290
‫5分の5､ 5分の5となるたびに､ 軸からの入力が実際に半分になることになるのです｡

41
00:03:06,650 --> 00:03:12,710
‫つまり､ 速いコンピューターでも遅いコンピューターでも､ 同じ速度で画面をパンすることに変わりはないのですから､

42
00:03:12,710 --> 00:03:18,200
‫素晴らしいことです｡

43
00:03:18,470 --> 00:03:25,580
‫マウスを一定量動かせば､ 同じ量の動きに気づくはずで､ それが私たちの望むところです｡

44
00:03:25,610 --> 00:03:31,940
‫例えば､ アナログコントローラーで右方向にフルスロットルすると､

45
00:03:31,940 --> 00:03:36,380
‫1秒間に30フレームになります｡

46
00:03:36,380 --> 00:03:38,780
‫一人､ また一人と増えていく｡

47
00:03:38,780 --> 00:03:39,950
‫理にかなっているでしょ？

48
00:03:40,250 --> 00:03:42,380
‫60フレーム/秒の場合はどうでしょうか？

49
00:03:42,410 --> 00:03:44,720
‫今でも1本､ 1本､ 1本と出てきます｡

50
00:03:44,720 --> 00:03:47,360
‫でも､ コマ数が増えるから､ もっと増えるんです｡

51
00:03:47,570 --> 00:03:54,920
‫それを直接使ってポーンの動きに影響を与えると､ 2倍のスピード､ 2倍のフレームレートで動くことになり､

52
00:03:54,920 --> 00:03:59,390
‫私たちが望むような動きではありません｡

53
00:03:59,390 --> 00:04:03,740
‫そこで､ ここでフレームレートの独立性を導入したいと思います｡

54
00:04:03,980 --> 00:04:09,650
‫そのためには､ デルタタイムを掛けられるようにする必要があるわけです｡

55
00:04:09,650 --> 00:04:15,560
‫入力軸を利用して､ 回転速度を調節するのに役立ちそうですね｡

56
00:04:16,160 --> 00:04:18,350
‫そこで､ ちょっとだけ取り入れるといい｡

57
00:04:18,350 --> 00:04:22,850
‫でも､ どういうことかというと､ 回転率の変数みたいなものが必要なんです｡

58
00:04:22,850 --> 00:04:29,300
‫そのために新しいプロパティを作成し､ どこでも編集できるようにし､

59
00:04:29,300 --> 00:04:34,820
‫フロートにして回転率にします｡

60
00:04:34,820 --> 00:04:40,160
‫今度は､ 上も左も右も同じ回転数にしてみます｡

61
00:04:40,160 --> 00:04:43,130
‫その両方に別々の変数を用意すればいいのです｡

62
00:04:43,130 --> 00:04:46,460
‫それに､ ここでは回転率の良し悪しがよくわからないんです｡

63
00:04:46,460 --> 00:04:48,400
‫フライングガス・ヘックスを

64
00:04:48,410 --> 00:04:53,330
‫ここでは関係する単位が全く分からないので､ 先に10とします｡

65
00:04:53,330 --> 00:04:54,020
‫でも､ そのうちわかるよ｡

66
00:04:54,020 --> 00:04:55,610
‫速すぎるかもしれませんね｡

67
00:04:55,610 --> 00:04:56,750
‫遅すぎるのでは？

68
00:04:56,750 --> 00:05:01,760
‫ブループリントで調整できますので､ 先に進んで保存しておきます｡

69
00:05:01,760 --> 00:05:11,300
‫ちなみにC++のAlt Oで切り替えて､ 移動の区別がつくように新しいタイプの軸を用意したいところです｡

70
00:05:11,300 --> 00:05:15,020
‫右は､ マウス､ 直接の動きと移動の比較です｡

71
00:05:15,020 --> 00:05:15,440
‫そうだろ？

72
00:05:15,440 --> 00:05:16,550
‫というか申し訳ないことに､ 見た目が｡

73
00:05:16,550 --> 00:05:18,860
‫そうですね､ これは率ですね｡

74
00:05:19,370 --> 00:05:25,820
‫そこで､ プロジェクト設定に移動して､ ゲームパッドの左手親指を移動にマッピングする代わりに､

75
00:05:25,820 --> 00:05:27,740
‫これを行うことにします｡

76
00:05:27,740 --> 00:05:31,880
‫右､ すみません､ 左のサムスティックではなく､ 右のサムスティックが上を見るようにマッピングされているんです｡

77
00:05:31,880 --> 00:05:38,870
‫その軸を削除して､ 新しい軸を追加して､ その軸が外観になるようにしてください｡

78
00:05:39,920 --> 00:05:40,550
‫上へ

79
00:05:40,970 --> 00:05:41,770
‫そうですね｡

80
00:05:42,110 --> 00:05:45,680
‫そして､ これはゲームパッドを取り込むのですよね？

81
00:05:45,680 --> 00:05:47,420
‫ゲームパッドですか､ そうですか｡

82
00:05:47,720 --> 00:05:53,780
‫Y軸はルックアップなので､ 正の方を使うべきだと言っているからです｡

83
00:05:54,200 --> 00:06:00,230
‫そこで､ これをマッピングする必要があるのですが､ 広告コントローラに直接マッピングするのはやめましょう｡

84
00:06:00,230 --> 00:06:05,900
‫レートを計算し､ そのレートをフレームレートに依存しないようにするために､ ちょっとした計算が必要だからです｡

85
00:06:05,900 --> 00:06:12,950
‫そこで､ オルトゼロに移動して､ 自分自身でルックアップを作成することにします｡

86
00:06:12,950 --> 00:06:19,010
‫そして､ 右上に見えるように作成し､ 先に進んでこのコントロールシフトを作成するつもりです｡

87
00:06:19,010 --> 00:06:22,210
‫P そして､ 実装プラグインを使用しています｡

88
00:06:22,220 --> 00:06:25,730
‫ルックアップ・レート実装をやってみよう｡

89
00:06:26,630 --> 00:06:27,950
‫軸の値が入るようになった｡

90
00:06:27,950 --> 00:06:28,640
‫それは素晴らしいことです｡

91
00:06:28,640 --> 00:06:34,100
‫次に､ プレーヤー入力コンポーネントのセットアップで､ このコンポーネントが呼び出されることを確認します｡

92
00:06:34,100 --> 00:06:37,010
‫そこで､ ここに新しい行を作り､ 見た目を複製してみましょう｡

93
00:06:37,010 --> 00:06:38,780
‫なるほど､ ルックアップということですね｡

94
00:06:38,780 --> 00:06:42,920
‫右､ そうしてコピー＆ペーストするように｡

95
00:06:43,670 --> 00:06:49,040
‫ルックアップ・レートを呼び出す関数への完全修飾されたリファレンス｡

96
00:06:49,790 --> 00:06:57,950
‫それから､ 基本的に最後に呼び出したいのは､ コントローラ入力､ ピッチ､ コントローラ､ ピッチ入力を追加することです｡

97
00:06:58,460 --> 00:07:00,860
‫しかし､ これには2つのことを掛け合わせたい｡

98
00:07:00,860 --> 00:07:04,580
‫だから､ アクセス値は0から1の間の値で入ってくる｡

99
00:07:04,940 --> 00:07:12,020
‫そのため軸値にレート回転数を掛けた場合｡

100
00:07:12,870 --> 00:07:17,610
‫そうすると､ 出てくるのは速度ですが､ 実は欲しいのは距離なんです｡

101
00:07:17,610 --> 00:07:20,700
‫マウスを動かすと､ 一定の距離で移動するように､ 毎フレーム､ 移動しています｡

102
00:07:20,700 --> 00:07:22,050
‫それが入ってきていたのです｡

103
00:07:22,050 --> 00:07:24,630
‫この速度を距離に換算してみたい｡

104
00:07:24,630 --> 00:07:32,850
‫昔､ 数学の授業で､ 速度から距離を求めるには､ 時間を掛け合わせる必要があったのを覚えているだろうか｡

105
00:07:32,850 --> 00:07:37,620
‫だから､ デルタ秒を世界から得ることでそれを実現しているのです｡

106
00:07:37,620 --> 00:07:39,540
‫さて､ デルタ秒とは何でしょうか？

107
00:07:39,540 --> 00:07:43,050
‫それが､ 最後の1フレームにかかった時間です｡

108
00:07:43,050 --> 00:07:45,600
‫つまり､ フレームレートの逆バージョンみたいなものですね｡

109
00:07:45,600 --> 00:07:50,430
‫1フレームにかかる時間は､ この動きを適用するのに必要な時間なので､

110
00:07:50,430 --> 00:07:51,900
‫素晴らしいことです｡

111
00:07:51,900 --> 00:07:57,840
‫つまり､ 速度があって､ その速度を適用するのに必要な時間がある､ と考えればいいのです｡

112
00:07:57,870 --> 00:08:03,990
‫これは､ 基本的にコントローラーのピッチ入力に適用したい動作量を示しています｡

113
00:08:03,990 --> 00:08:05,040
‫だから､ それを望んでいるのです｡

114
00:08:05,070 --> 00:08:11,130
‫レベルを取得したいので､ まずは身の回りのワールドを取得します｡

115
00:08:11,130 --> 00:08:20,310
‫そして､ 矢印関数を使ってデルタ秒を取得します｡ これは､ 最後のフレームで経過した時間を取得することを意味し､

116
00:08:20,310 --> 00:08:28,470
‫現在の時点におけるフレームレートの近似値を得ることができます｡

117
00:08:28,470 --> 00:08:34,260
‫なぜ動作入力で同じことをしないのかと思われるかもしれませんが､ 動作入力では､

118
00:08:34,260 --> 00:08:42,900
‫そこで広告入力をすると､ すでにそれが実際の動作量ではなく､ レートであると仮定されてしまうからです｡

119
00:08:42,900 --> 00:08:49,200
‫だから､ この計算をすでにやってくれているんです｡ 基本的にボンネットの中で､ ファイルを保存して､ アンリアルでコンパイルして､

120
00:08:49,200 --> 00:08:53,610
‫この中のどれかに価値があるかどうかを確認するんです｡

121
00:08:55,390 --> 00:09:01,420
‫それではプレイに向かい､ コントローラーの入力を使ってみます｡

122
00:09:01,450 --> 00:09:02,020
‫これでよしとしよう｡

123
00:09:02,050 --> 00:09:04,840
‫わりとゆっくり上がったり下がったりしています｡

124
00:09:04,960 --> 00:09:10,900
‫しかし､ このデルタタイムを利用することで､ 完全にフレームレートに依存しなくなることを期待しています｡

125
00:09:11,650 --> 00:09:18,530
‫そこで､ やっていただきたいのは､ ルックライトレートを導入してくることです｡

126
00:09:18,550 --> 00:09:25,000
‫右を見るときにも､ 上を見るときと同じ方法を繰り返し､ スピードを微調整して､ 本当に遅くならないようにし､

127
00:09:25,000 --> 00:09:30,910
‫実際にレベル内を移動するのに使えるようにします｡

128
00:09:32,400 --> 00:09:32,850
‫なるほど｡

129
00:09:32,850 --> 00:09:33,600
‫お帰りなさい｡

130
00:09:33,630 --> 00:09:39,070
‫そこで､ まず最初に､ プロジェクトの設定で新しい軸のマッピングを作成しました｡

131
00:09:39,070 --> 00:09:42,840
‫今回も見た目で勝負だ｡

132
00:09:42,840 --> 00:09:43,500
‫そうだろ？

133
00:09:43,500 --> 00:09:44,310
‫そうですね｡

134
00:09:44,340 --> 00:09:46,010
‫そうそうどんな口ぶりなのか､ みたいな｡

135
00:09:46,020 --> 00:09:49,620
‫それから､ ゲームパッドを買いに行くんです｡

136
00:09:50,300 --> 00:09:54,440
‫今回の右とX軸､ これがマッピングの対象になるんです｡

137
00:09:55,310 --> 00:09:59,960
‫そして､ 今度はシューターヘッダーファイルに移動します｡

138
00:10:00,320 --> 00:10:02,870
‫ルックアップレートを複製するのです｡

139
00:10:03,060 --> 00:10:07,390
‫そして､ 左側にあるファイルをお見せします｡

140
00:10:07,400 --> 00:10:12,110
‫ルックアップ・レートの代わりに､ ルックライト・レート・コントロール・シフト・pクリエイトの実装を行い､

141
00:10:12,110 --> 00:10:26,150
‫ほとんど同じコードと同じ乗算で､ 速度から移動距離の量に変換します｡

142
00:10:26,810 --> 00:10:27,320
‫その姿です｡

143
00:10:27,320 --> 00:10:27,920
‫そうか､ そうか｡

144
00:10:27,920 --> 00:10:34,940
‫ルックライトレートは､ プレイヤー入力コンポーネントのセットから呼び出すか､

145
00:10:34,940 --> 00:10:43,990
‫または軸が実際に操作されているときに呼び出す必要があります｡

146
00:10:44,000 --> 00:10:47,620
‫そこで､ ルックアップ・レートではなく､ ここに別の軸を追加することにします｡

147
00:10:47,630 --> 00:10:49,910
‫ルックライトレートになりそうです｡

148
00:10:50,240 --> 00:10:59,180
‫そして､ その参照を関数にコピーします｡ その前にアンパサンドを､ そして文字に完全修飾したイシューを忘れないでください｡

149
00:10:59,180 --> 00:10:59,480
‫コロン

150
00:10:59,480 --> 00:11:01,610
‫コロン､ 右のレートを見てください｡

151
00:11:01,610 --> 00:11:04,070
‫先に進んで､ そのファイルとhead of fileの両方を保存しましょう｡

152
00:11:04,100 --> 00:11:11,030
‫プロジェクトに戻り､ 私がここでコンパイルをヒットさせたままにしておいたplayを終了してください｡

153
00:11:11,810 --> 00:11:15,470
‫飛び込みで遊べるようにしないとね｡

154
00:11:15,470 --> 00:11:16,100
‫だから

155
00:11:16,190 --> 00:11:19,410
‫上下はゆっくり､ 左右はゆっくり作業しています｡

156
00:11:20,090 --> 00:11:23,120
‫なかなか思うようにいきませんね｡

157
00:11:23,150 --> 00:11:24,890
‫プロジェクトの設定を確認しましょう｡

158
00:11:24,890 --> 00:11:25,640
‫だから､ 私たちのルック｡

159
00:11:25,640 --> 00:11:26,450
‫そうですね｡

160
00:11:26,450 --> 00:11:27,350
‫大丈夫そうだ｡

161
00:11:27,740 --> 00:11:28,520
‫右手親指

162
00:11:28,520 --> 00:11:29,640
‫サムスティックX軸｡

163
00:11:29,660 --> 00:11:30,800
‫それを確認しよう｡

164
00:11:30,800 --> 00:11:35,140
‫それがすべて､ C++に正しくバインドされた軸の見え方に通じているのです｡

165
00:11:35,150 --> 00:11:36,340
‫そうか､ そうか｡

166
00:11:36,350 --> 00:11:42,980
‫それは､ あなたの入力を呼び出すために順番に正しいレート関数またはシームを呼び出しています｡

167
00:11:44,710 --> 00:11:45,810
‫ダナ､ 何があったの?

168
00:11:45,820 --> 00:11:48,550
‫もう一度リコンパイルを押して､ もう一度再生を押すだけです｡

169
00:11:48,550 --> 00:11:49,600
‫時には､ こんなことも必要です｡

170
00:11:49,600 --> 00:11:56,350
‫しかし､ 今は左右を見ることが上下に働いており､ とてもとても遅いペースではありますが､ 動いているのです｡

171
00:11:56,350 --> 00:11:59,890
‫そこで､ キャラクターの設計図に手を加えてみることにします｡

172
00:11:59,890 --> 00:12:02,440
‫VPのシューターキャラクターを見つけに行こう｡

173
00:12:02,470 --> 00:12:03,820
‫彼の設計図を開いてみてください｡

174
00:12:04,500 --> 00:12:11,250
‫そして､ 下にスクロールして回転数を求めます｡ 10倍してみましょう｡

175
00:12:11,400 --> 00:12:16,070
‫10倍速にしてみて､ その中間で納得のいく値を探そう｡

176
00:12:16,080 --> 00:12:21,190
‫これは常に､ まず桁を変えてみることで値を見つけることができる一つの方法です｡

177
00:12:21,210 --> 00:12:23,990
‫まあ､ その方がよっぽど正しい球筋なんですけどね｡

178
00:12:24,000 --> 00:12:29,850
‫ちょっと繊細すぎるかもしれないので､ 半分くらいに叩いておくかな｡

179
00:12:30,090 --> 00:12:32,250
‫今回は50本くらいで挑戦してみてください｡

180
00:12:32,250 --> 00:12:33,750
‫500ではなく､ 50です｡

181
00:12:33,780 --> 00:12:35,020
‫試してみよう

182
00:12:35,040 --> 00:12:38,970
‫再生ボタンを押して､ スティックを動かしてみる｡

183
00:12:39,330 --> 00:12:41,190
‫それが､ より自然に感じられるようになりました｡

184
00:12:41,220 --> 00:12:44,160
‫この2つのちょうど中間くらいがいいかもしれませんね｡

185
00:12:44,190 --> 00:12:45,920
‫だから､ その間に入る｡

186
00:12:45,930 --> 00:12:51,750
‫今回も170まで行くのではなく､ 70くらいが適正なレートかもしれませんね｡

187
00:12:51,750 --> 00:12:53,730
‫金メダルかどうか､ 見てみよう｡

188
00:12:53,730 --> 00:12:54,810
‫はい､ そう思います｡

189
00:12:54,810 --> 00:12:57,290
‫70というのは､ 私が動き回るのにちょうどいい率になると思うんです｡

190
00:12:57,300 --> 00:13:04,650
‫もちろん､ このようなことは､ 多くのゲームでは設定でいじることができたり､ プレイヤーがいじることができたりするものなのですが｡

191
00:13:04,650 --> 00:13:06,210
‫それを調べるつもりはない｡

192
00:13:06,210 --> 00:13:14,070
‫これはこのセクションの範囲外ですが､ 自分のゲームでユーザーに公開したいと思う可能性があるものです｡

193
00:13:14,880 --> 00:13:15,210
‫かっこいい｡

194
00:13:15,210 --> 00:13:19,650
‫その講義の中で､ コントローラ入力とマウス入力の違いや､ 絶対的な動きではなく､

195
00:13:19,650 --> 00:13:22,770
‫レートを扱う必要があることを見てきました｡

196
00:13:22,950 --> 00:13:28,930
‫そこで､ 次回の講義では､ 私がずっとほのめかしていた三人称視点カメラについて見ていきたいと思います｡

197
00:13:28,950 --> 00:13:29,760
‫現地でお会いしましょう｡

