﻿1
00:00:04,380 --> 00:00:09,780
‫だから､ 弾が当たったらカメラが揺れるようにしたい､ みたいな｡

2
00:00:09,780 --> 00:00:13,680
‫また､ 池のひとつが枯れても､ 一度振ってほしいと思っています｡

3
00:00:14,040 --> 00:00:15,460
‫やあ､ お帰りなさい｡

4
00:00:15,480 --> 00:00:22,950
‫このビデオでは､ カメラを揺らすという特殊な効果をゲームに追加していきます｡

5
00:00:22,950 --> 00:00:29,670
‫投射物が何かにぶつかったときや､ 池が1つ枯れたときにカメラを揺らしたいですね｡

6
00:00:29,700 --> 00:00:36,480
‫そうすることで､ もう一段階､ プロフェッショナルな仕上がりになるのです｡

7
00:00:36,480 --> 00:00:38,610
‫では､ さっそく潜入してみましょう｡

8
00:00:38,610 --> 00:00:45,060
‫ここでは､ エディタ内にある､ 手ぶれ用の新しいクラスを追加したいと思います｡

9
00:00:45,060 --> 00:00:49,440
‫Unreal Engineには､ カメラを揺らすためのクラスが組み込まれています｡

10
00:00:49,440 --> 00:00:55,590
‫ここで､ blueprints フォルダに新しいフォルダを作成し､ これを camera shake と呼ぶことにします｡

11
00:00:55,590 --> 00:00:57,630
‫そして､ 手ブレフォルダ内｡

12
00:00:57,630 --> 00:01:00,450
‫右クリックして､ 新しいブループリントを作成するんだ｡

13
00:01:00,480 --> 00:01:05,580
‫ブループリントを作る理由は､ 手ぶれには調整すべき変数がたくさんあるので､

14
00:01:05,580 --> 00:01:12,900
‫ブループリント側から作る方がずっと簡単だからです｡ 探しているクラスはマチネーカメラブレなので､

15
00:01:12,900 --> 00:01:18,060
‫カメラブレを検索して選択できます｡

16
00:01:18,060 --> 00:01:20,160
‫マチネの手ぶれ｡

17
00:01:20,980 --> 00:01:24,790
‫選択」をクリックし､ これを最初の手ぶれと呼ぶことにします｡

18
00:01:25,060 --> 00:01:27,890
‫BPヒット手振れ｡

19
00:01:27,910 --> 00:01:37,300
‫この新しいブループリントをダブルクリックして開いてみると､ さまざまな変数を選択できる詳細パネルがあることがわかります｡

20
00:01:37,310 --> 00:01:42,350
‫そして､ この手振れクラスに存在するいくつかのパラメータについて説明します｡

21
00:01:42,370 --> 00:01:49,880
‫さて､ ここにはかなりの数がありますが､ ここでは手ブレの全体的なフィーリングに影響する2つについてだけ触れます｡

22
00:01:49,900 --> 00:01:53,140
‫さて､ 発振という項目があるのがお分かりになると思います｡

23
00:01:53,140 --> 00:02:00,430
‫そして､ この部分がオシレーションと呼ばれているのは､ 手ブレはカメラを振動させることになるからです｡

24
00:02:00,670 --> 00:02:04,370
‫さて､ 正弦波のWikipediaのページはこちらです｡

25
00:02:04,390 --> 00:02:11,650
‫正弦波は数学的な関数であり､ 正弦波の背後にある数学を理解する必要はないのです｡

26
00:02:11,650 --> 00:02:14,850
‫しかし､ 正弦波がどのようなものかを確認するのに役立ちます｡

27
00:02:14,860 --> 00:02:24,010
‫右側にスクロールすると､ この赤い波が見えますが､ これはサイン波と書かれています｡

28
00:02:24,010 --> 00:02:26,920
‫つまり､ 上がったり下がったり､ 行ったり来たりする｡

29
00:02:26,920 --> 00:02:33,610
‫ですから､ カメラが前後に滑らかに揺さぶられることを「振動している」と言います｡

30
00:02:33,610 --> 00:02:39,940
‫ここで､ 発振時間､ ブレンドインタイム､ ブレンドアウトタイムがあることがわかります｡

31
00:02:39,940 --> 00:02:44,620
‫デュレーションは､ シェイクが持続する時間に影響します｡

32
00:02:44,650 --> 00:02:53,560
‫しかし､ 私はすでにいくつかの実験を行い､ 手ブレを軽減するためのおおよその値を知っています｡

33
00:02:53,560 --> 00:02:58,270
‫弾丸が何かにぶつかると､ 比較的短い持続時間になります｡

34
00:02:58,330 --> 00:03:08,080
‫さて､ これは秒単位ですが､ 0を選びます｡  2 この手ブレの時間､ およびブレンドインとブレンドアウトの時間は5秒です｡

35
00:03:08,080 --> 00:03:18,220
‫0の値を使うことにしています｡  05なので､ 0. ブレンド・イン・タイムで05､ 0. ブレンドアウトタイムの05

36
00:03:18,340 --> 00:03:25,360
‫これは､ 手ブレをなじませるのにかかる時間であり､ 0まで続きます｡  2 5秒

37
00:03:25,390 --> 00:03:28,330
‫今､ 私たちはさまざまなタイプの振動を手に入れました｡

38
00:03:28,330 --> 00:03:35,500
‫回転振動があり､ これがその振動関数に従ってカメラを回転させます｡

39
00:03:35,500 --> 00:03:42,430
‫位置振動はカメラを空間内に移動させ､ 視野振動は視野に影響を与え､

40
00:03:42,430 --> 00:03:48,130
‫基本的にカメラでズームインとズームアウトを行います｡

41
00:03:48,160 --> 00:03:54,700
‫さて､ 回転振動と視野振動は､ 乗り物酔いを起こしやすいものです｡

42
00:03:54,700 --> 00:03:57,700
‫だから､ 好きなようにそれらを実験することができます｡

43
00:03:57,700 --> 00:04:03,100
‫でも､ 今回の手ブレは､ 位置の揺れを変えるだけです｡

44
00:04:03,130 --> 00:04:10,300
‫さて､ X､ Y､ Zの3軸がありますが､ 正弦波が何かを前後に揺らすことは確認しました｡

45
00:04:10,300 --> 00:04:16,210
‫この振動は､ カメラをX､ Y､ Z方向に前後に揺らすことになります｡

46
00:04:16,210 --> 00:04:26,740
‫これらのドロップダウンをクリックして展開すると､ 各軸に振幅､ 周波数､ さらに初期オフセットと波形があることがわかります｡

47
00:04:26,740 --> 00:04:36,310
‫ここで､ 手ブレの初期オフセットをランダムにしていますが､ これをランダムにしておくことで､ 手ブレを予測しにくくすることができます｡

48
00:04:36,310 --> 00:04:41,110
‫そして､ 正弦波は､ カメラをジャークするときに使う波形の種類です｡

49
00:04:41,110 --> 00:04:45,070
‫そして､ 上下の動きがスムーズであることも確認できました｡

50
00:04:45,070 --> 00:04:51,450
‫ここでいう振幅とは､ その軸でカメラが動く最大量のことです｡

51
00:04:51,460 --> 00:05:02,800
‫X､ Y､ Zの3つの振幅を10に設定し､ 周波数はカメラが振動する速さにします｡

52
00:05:02,800 --> 00:05:05,650
‫これらも10に設定するつもりです｡

53
00:05:05,740 --> 00:05:10,840
‫あとは､ 手ブレを実装すると同時に､ これがどのように見えるのかを確認することができます｡

54
00:05:10,840 --> 00:05:17,680
‫その前に､ ポーンが死んだときのために､ もう1つ手ぶれを作っておこうと思います｡

55
00:05:17,680 --> 00:05:27,400
‫そこで､ 右クリックして､ 新しいブループリント・クラスを作成し､ カメラブレを検索して､ マチネ・カメラブレを選択し､ selectをクリックすることにしましょう｡

56
00:05:27,400 --> 00:05:31,600
‫そして､ これについては､ 「BP Depth Camera Shake」と呼ぶことにします｡

57
00:05:32,320 --> 00:05:38,430
‫さて､ 死の手ぶれは､ 当たりの手ぶれより少し激しくなりそうです｡

58
00:05:38,440 --> 00:05:42,460
‫手振れ補正は､ 弾丸が何かにぶつかるとカメラが揺れるというものです｡

59
00:05:42,460 --> 00:05:47,360
‫でも､ デスカメラシェイクは､ 何かが死ぬとカメラが揺れちゃうんですよ｡

60
00:05:47,380 --> 00:05:51,940
‫だから､ 発振時間については､ もう少し長くしようと思っているんです｡

61
00:05:51,940 --> 00:05:57,040
‫4にするつもりです｡  3､ 5秒と4､ ブレンドインタイムとアウトタイム｡

62
00:05:57,040 --> 00:06:00,070
‫これを両方とも0にします｡  1.

63
00:06:01,000 --> 00:06:03,820
‫さて､ 余談ですが､ ブレンドインとアウトの時間です｡

64
00:06:03,820 --> 00:06:07,990
‫フルタイムのパーセンテージは､ 0と1の間で正規化されているのでしょうか？

65
00:06:07,990 --> 00:06:12,460
‫つまり､ 1点目は全発振時間の10%です｡

66
00:06:12,490 --> 00:06:26,060
‫次に､ XとYの振幅を54に設定し､ Zの振幅をゼロのままにして､ カメラが死んだときにXとYにだけ動くようにします｡

67
00:06:26,080 --> 00:06:29,130
‫こうすることで､ ちょっと変わった感じの手ブレになります｡

68
00:06:29,140 --> 00:06:33,280
‫そして周波数は､ どちらも20に設定します｡

69
00:06:35,440 --> 00:06:43,810
‫さて､ これで手ブレが発生したわけですが､ この手ブレを実際にC++側で再生する実装をしましょう｡

70
00:06:44,470 --> 00:06:49,480
‫さて､ 手ブレを再生するためには､ いくつかの手ブレ変数が必要です｡

71
00:06:49,510 --> 00:06:58,700
‫アンリアル・エンジンの古いバージョン､ アンリアル・エンジン4を使用している場合｡  25以下は具体的には､ 変数のためのクラスがあなたになるのです｡

72
00:06:58,720 --> 00:06:59,760
‫手ぶれ｡

73
00:06:59,770 --> 00:07:03,040
‫しかし､ 新しいバージョンでは4. 2､ 6以上

74
00:07:03,040 --> 00:07:05,400
‫そして､ これにはアンリアル・エンジン5も含まれています｡

75
00:07:05,410 --> 00:07:07,330
‫マチネを使うんです｡

76
00:07:07,360 --> 00:07:08,260
‫手ぶれ｡

77
00:07:08,260 --> 00:07:10,690
‫ということで､ この動画ではそれを使っています｡

78
00:07:10,990 --> 00:07:14,670
‫さて､ 手ブレを再生する機能も異なります｡

79
00:07:14,680 --> 00:07:19,810
‫もし､ 4． 2､ 5以下なら､ 使う機能はクライアントプレイです｡

80
00:07:19,840 --> 00:07:20,800
‫手ぶれ｡

81
00:07:21,190 --> 00:07:30,220
‫そして､ これは4で登場したプレイヤー・コントローラー・クラスの関数です｡  26歳以上､ 5歳を含む｡  0を使用しています｡

82
00:07:30,220 --> 00:07:34,510
‫クライアントスタートの手ブレをクライアントプレイにするんです｡

83
00:07:34,540 --> 00:07:36,940
‫手ブレは非推奨になりました｡

84
00:07:37,060 --> 00:07:42,130
‫今回はUnreal Engine 5を使用しているので､ クライアント､ スタートカメラブレを使用します｡

85
00:07:42,130 --> 00:07:47,170
‫そして､ 5を使うなら､ それに倣ってクライアントスタート手ブレを使うということです｡

86
00:07:47,170 --> 00:07:54,460
‫しかし､ 古いエンジンバージョン､ 具体的には4. 2､ 5､ 以下は左側のクラスと関数を使い､

87
00:07:54,460 --> 00:08:00,250
‫それ以外は右側のクラスと関数を使う｡

88
00:08:00,580 --> 00:08:07,780
‫ここで､ ドキュメントにある手ぶれ補正のベースと､ そのためのインクルードを紹介します｡

89
00:08:07,780 --> 00:08:14,050
‫このカメラスラッシュの手ぶれ防止ベースをインクルードに使うわけですね｡

90
00:08:14,200 --> 00:08:18,660
‫そこでまず､ 射影機クラスでヒット時の手ブレを処理したいと思います｡

91
00:08:18,670 --> 00:08:22,870
‫そこで､ ここprojectileで､ 手ブレを追加してみます｡

92
00:08:23,110 --> 00:08:25,060
‫さて､ これがフォワード宣言になります｡

93
00:08:25,060 --> 00:08:26,410
‫Uを作ろうと思います｡

94
00:08:26,440 --> 00:08:27,940
‫手ブレ補正ベース｡

95
00:08:27,940 --> 00:08:29,050
‫ポインターなんです｡

96
00:08:29,140 --> 00:08:35,350
‫そして､ これを設計図から設定したいので､ 今は手ブレのヒットと呼ぶことにします｡

97
00:08:35,350 --> 00:08:38,800
‫せっかく手ブレの設計図があるのだから､ これを晒してみる｡

98
00:08:38,830 --> 00:08:40,480
‫新しい財産になりそうです｡

99
00:08:40,520 --> 00:08:44,200
‫どこでも編集できるようにして､ カテゴリーをつける｡

100
00:08:44,830 --> 00:08:48,410
‫これについては､ 戦闘編にとどめておきます｡

101
00:08:48,430 --> 00:08:51,670
‫これで手ブレを弾く準備が整いました｡

102
00:08:51,850 --> 00:09:00,100
‫ということで､ 射出CPでは､ 他のアクターのチェックで､ ここのヒット時に配置することにします｡

103
00:09:00,100 --> 00:09:05,620
‫そして､ まず最初にブループリントからカメラブレを設定したことを確認します｡ つまり､

104
00:09:05,620 --> 00:09:10,540
‫ヒットカメラブレがヌルでないことを確認する必要があります｡

105
00:09:10,840 --> 00:09:15,220
‫だから､ 手ブレを打てば､ 手ブレを起こせるんです｡

106
00:09:15,960 --> 00:09:23,310
‫そして､ こちらはバージョン4のプレイヤーコントローラクライアントスタート手ブレです｡  26歳以上

107
00:09:23,340 --> 00:09:24,990
‫ここで､ 2つのことに注目してください｡

108
00:09:25,020 --> 00:09:30,720
‫これらは変数のtwサブクラスを含むので､ 新しいクラスが必要です｡

109
00:09:30,750 --> 00:09:40,190
‫ここで､ これらの変数のブループリントを作成しました｡ つまり､ ここでは通常の変数ではなく､ そのサブクラスを簡単に作成することができるのです｡

110
00:09:40,200 --> 00:09:49,650
‫この手振れクラスはPTのサブクラスなので､

111
00:09:49,650 --> 00:09:56,220
‫PT subclass ofとします｡

112
00:09:56,220 --> 00:10:16,350
‫この宣言はそのままにして､ アスタリスクは必要ありません｡

113
00:10:16,530 --> 00:10:23,100
‫この関数はプレイヤー・コントローラに属しますが､ Projectile CPではプレイヤー・コントローラ用の変数がありません｡

114
00:10:23,100 --> 00:10:29,670
‫しかし､ U worldクラスに存在するget first player controllerという関数があるので､ get

115
00:10:29,670 --> 00:10:36,000
‫worldを呼び出し､ get first player controllerを呼び出します｡

116
00:10:36,000 --> 00:10:37,470
‫だから､ そうすることにしたんです｡

117
00:10:37,470 --> 00:10:45,030
‫まず Git World を呼び出し､ そこから get first player

118
00:10:45,030 --> 00:10:52,140
‫controller を呼び出します｡ get first player

119
00:10:52,140 --> 00:10:59,610
‫controller からは､ client start camera shake

120
00:10:59,610 --> 00:11:04,980
‫を呼び出すことができます｡

121
00:11:04,980 --> 00:11:07,260
‫では､ これをコンパイルしてみましょう｡

122
00:11:07,860 --> 00:11:11,010
‫それでは､ エディタに戻ってテストしてみましょう｡

123
00:11:11,010 --> 00:11:16,320
‫さて､ ブループリントとPTサブクラスのofを作成しましたが､ そのPTサブクラスのofを設定する必要があります｡

124
00:11:16,320 --> 00:11:20,130
‫では､ アクターとBPプロジェクタイルに入りましょう｡

125
00:11:20,160 --> 00:11:26,160
‫ブループリント・エディタを開き､ 戦闘セクションに移動して､

126
00:11:26,160 --> 00:11:33,780
‫ここにヒット・カメラ・シェイクのクラスとサブクラスがあります｡

127
00:11:33,780 --> 00:11:39,660
‫では､ 再生ボタンを押してコンパイルし､ カメラが揺れるかどうか見てみましょう｡

128
00:11:41,140 --> 00:11:42,580
‫そして､ そこにあるのは

129
00:11:43,300 --> 00:11:44,110
‫すごい｡

130
00:11:44,800 --> 00:11:48,700
‫そこで次は､ ポッドが死ぬときの手ブレを演じたいと思います｡

131
00:11:48,700 --> 00:11:54,410
‫そこで､ バスポンドに入り､ ここに手ブレの変数を追加してみます｡

132
00:11:54,430 --> 00:11:59,950
‫では､ この下の方にある､ もう一つのt変数のサブクラスを作ってみましょう｡

133
00:11:59,980 --> 00:12:01,480
‫フォワード宣言します｡

134
00:12:01,480 --> 00:12:09,490
‫これは手ブレベースと呼ばれるもので､ 私はこれを深度手ブレクラスと呼ぶことにします｡

135
00:12:09,700 --> 00:12:13,720
‫そして､ 他のものと同じように､ これもUプロパティにするつもりです｡

136
00:12:14,290 --> 00:12:24,280
‫Edit Anywhere Category combat と､ ここベースポンで手ぶれクラスができました｡

137
00:12:24,610 --> 00:12:30,550
‫では､ ポーンが死んだときのデスカメラシェイクに挑戦します｡

138
00:12:30,550 --> 00:12:35,560
‫つまり､ ......が死んだらやるわけで､ それはもちろんハンドル破壊でやるわけです｡

139
00:12:35,560 --> 00:12:42,490
‫そこで､ この手ブレを再生するために､ この関数内の正しい位置を選択してから､ コードをコンパイルしてください｡

140
00:12:42,490 --> 00:12:48,910
‫タンクとタワーの両方のブループリント・クラスにvalueのサブクラスを設定し､ テストします｡

141
00:12:48,910 --> 00:12:51,520
‫映像を一時停止して､ デスカメラを実装する｡

142
00:12:51,520 --> 00:12:52,540
‫今すぐ振ろう｡

143
00:12:55,580 --> 00:12:55,820
‫なるほど｡

144
00:12:55,820 --> 00:12:58,260
‫そこで､ デフ手ぶれ教室を開催しています｡

145
00:12:58,280 --> 00:13:04,460
‫基地池CPに入ろう､ 破壊を処理するために上にスクロールする｡

146
00:13:04,460 --> 00:13:12,320
‫そして､ まず最初に深度手振れクラスが設定されているかどうかを確認し､ 設定されていれば､

147
00:13:12,320 --> 00:13:15,980
‫実際に手振れを再生することができます｡

148
00:13:16,040 --> 00:13:21,530
‫ここでプレイヤーコントローラへのポインタを持っていないので､ ここからGet Worldを呼び出して､

149
00:13:21,920 --> 00:13:27,290
‫最初のプレイヤーコントローラを取得し､ そこから呼び出すことにします｡

150
00:13:28,370 --> 00:13:30,380
‫クライアントスタート手ブレ

151
00:13:31,650 --> 00:13:36,150
‫そして､ ここでは､ 深度カメラ､ 手ぶれ補正のクラスで合格することができます｡

152
00:13:36,780 --> 00:13:38,070
‫そして､ そこにあるのは

153
00:13:38,160 --> 00:13:46,190
‫では､ これをコンパイルして､ エディタに戻って､ --のフォルダー､ BP -- tankを開いてみましょう｡

154
00:13:46,200 --> 00:13:48,960
‫そして､ ここでは深度手ブレ教室を開催しています｡

155
00:13:48,990 --> 00:13:50,330
‫これを死ぬほど設定する｡

156
00:13:50,340 --> 00:13:54,060
‫カメラ､ 手ぶれ､ コンパイル､ 保存して終了｡

157
00:13:54,090 --> 00:13:56,160
‫投影機も閉じようと思います｡

158
00:13:56,160 --> 00:14:02,880
‫そしてBP池､ 砲台を開き､ ここでも深度カメラブレーククラスを深度カメラブレークに設定します｡

159
00:14:02,910 --> 00:14:04,800
‫これで､ 死のテストができる｡

160
00:14:04,800 --> 00:14:06,360
‫では､ その仕組みを見てみましょう｡

161
00:14:06,390 --> 00:14:10,470
‫ケイ､ 私は塔のひとつに登って､ そして

162
00:14:11,490 --> 00:14:12,420
‫ベーム

163
00:14:12,420 --> 00:14:14,220
‫手ブレが効く｡

164
00:14:14,640 --> 00:14:19,360
‫さて､ 最後のチェックポイントは､ 塔が死ぬときに手ブレが発生するかどうかです｡

165
00:14:19,380 --> 00:14:22,080
‫では､ 先にタワーを1つ倒してしまいましょう｡

166
00:14:22,810 --> 00:14:23,930
‫そして､ そこに行く｡

167
00:14:23,950 --> 00:14:27,190
‫カメラを手ぶれさせました｡

168
00:14:27,220 --> 00:14:28,030
‫すごい｡

169
00:14:29,240 --> 00:14:32,480
‫まとめると､ 今はカメラを振っているということですね｡

170
00:14:32,480 --> 00:14:37,760
‫投擲物が何かに当たったときと､ 池のひとつが死んだときに振っています｡

171
00:14:37,790 --> 00:14:43,890
‫これは､ ゲームをよりプロフェッショナルに見せるための効果的なポリッシュアップの一つです｡

172
00:14:43,910 --> 00:14:49,460
‫次回のビデオでは､ このセクションの締めくくりとして､ ゲームが完全に動作する状態にするために､

173
00:14:49,460 --> 00:14:56,450
‫ゲームを磨き上げ､ 最終的な動作状態にします｡

174
00:14:56,480 --> 00:14:57,380
‫また､ お会いしましょう｡

