﻿1
00:00:04,500 --> 00:00:05,730
‫こんにちは､ 本講演にようこそ｡

2
00:00:05,730 --> 00:00:11,310
‫これから､ メッシュの腕を上下に動かすための AIM オフセットで遊びます｡

3
00:00:11,310 --> 00:00:15,360
‫上と下を狙いながら､ それがどんなものなのか､ 飛び込んでみましょう｡

4
00:00:16,170 --> 00:00:20,940
‫ですから､ 現時点では､ 上下に照準を合わせても､ キャラクターの腕は実際には何もしていませんし､

5
00:00:20,940 --> 00:00:28,440
‫銃も上向きで発射して実際に当たるべき場所に当たっているようには見えないと思います｡

6
00:00:28,710 --> 00:00:30,930
‫では､ どうすればこれを変えられるのか｡

7
00:00:30,930 --> 00:00:33,450
‫まあ､ アニメーションの設計図に変更があったということです｡

8
00:00:33,450 --> 00:00:38,700
‫それでは､ 出発点としてアニメーション設計図を開き､ メインウィンドウにドッキングさせてみましょう｡

9
00:00:39,120 --> 00:00:44,250
‫そして､ 今までにない新しいタイプのアニメーションアセットを紹介したいと思います｡

10
00:00:44,250 --> 00:00:46,680
‫ブレンドスペースを見たり､ アニメーションを見たり｡

11
00:00:46,680 --> 00:00:53,700
‫次に紹介するのは､ アニメーションオフセットと､ 特にエイミングオフセットと呼ばれるものです｡

12
00:00:53,700 --> 00:01:02,130
‫そこで､ アニメーションの中から「ayo」というキーワードを探すと､ 「aim offsets」という小さな青いアンダーラインのついたものが見つかります｡

13
00:01:02,130 --> 00:01:03,090
‫しかも､ 2人組です｡

14
00:01:03,090 --> 00:01:09,180
‫気になるのはAoEコンバットで､ この辺にあるはずなのですが｡

15
00:01:09,180 --> 00:01:11,730
‫アイドルA0戦闘になるのだ｡

16
00:01:11,970 --> 00:01:16,830
‫これを選択すると､ ブレンドスペースと同じようなものが表示されます｡

17
00:01:16,860 --> 00:01:25,680
‫ただし今回は､ 小さな緑の塊を動かすと､ キャラクタのメッシュが向いている方向が変化します｡

18
00:01:25,680 --> 00:01:30,720
‫だから､ 私たちが左に来たら､ 彼は銃を左に向け､ 私たちが右に来たら､

19
00:01:30,720 --> 00:01:32,670
‫彼は銃を右に向けます｡

20
00:01:32,670 --> 00:01:36,250
‫そして､ アップダウンと同様に､ ピッチを上げて行けば､ 彼はずっと上を向いています｡

21
00:01:36,250 --> 00:01:39,240
‫下を向いて､ ずっと下を向いて､ 下を向いて撮影しようとする｡

22
00:01:39,510 --> 00:01:47,310
‫さて､ これまで見てきたアニメーションとの違いは､ これが「加算型アニメーション」と呼ばれるものであることです｡

23
00:01:47,310 --> 00:01:51,750
‫詳細ペインに移動すると､ 加算設定と書かれているので加算されていることがわかります｡ また､ アニメーションベースのポーズがあり､

24
00:01:51,750 --> 00:01:55,920
‫このポーズがすべてのベースになっていることがわかります｡

25
00:01:56,340 --> 00:02:02,430
‫基本的にadditiveである場合の意味は､ このアニメーションは他のアニメーションの上に追加することができるということです｡

26
00:02:02,430 --> 00:02:06,090
‫つまり､ あなたが走っている間､ 私はこの狙いをつけることができますよ､ ということなんです｡

27
00:02:06,090 --> 00:02:13,320
‫走るポーズに対して腕がどこに移動したかという情報を､ 上に追加することができるんです｡

28
00:02:13,500 --> 00:02:14,700
‫では､ どのように見えるのでしょうか｡

29
00:02:14,700 --> 00:02:22,200
‫アニメーションの設計図に進むと､ 運動に関する情報をすべて追加した後に､

30
00:02:22,200 --> 00:02:28,530
‫この情報を追加したくなります｡

31
00:02:29,040 --> 00:02:31,140
‫だから､ ロコモーションを持たせたいのです｡

32
00:02:31,140 --> 00:02:32,970
‫そこで､ すべてのランニングアニメーションをこの中に入れています｡

33
00:02:32,970 --> 00:02:41,040
‫そのうえで､ 腕をどこに動かせば正しく狙えるのか､ ちょっとした情報を加えたい｡

34
00:02:41,130 --> 00:02:45,060
‫そこで､ 右クリックして､ 目的のオフセットを追加することができます｡

35
00:02:45,060 --> 00:02:46,710
‫アセットブラウザからも可能です｡

36
00:02:46,710 --> 00:02:53,580
‫A0を探して､ そして先ほど言ったように､ その戦闘バージョンを探しているのですが､ このブラウザでは違う場所です｡

37
00:02:53,580 --> 00:03:01,140
‫面白いことに､ これをトラッキングすると､ 「ベースは何で動いているのか？

38
00:03:01,170 --> 00:03:07,050
‫ロコモーションブレンドスペースは､ アニメーション全体を提供するため入力ピンがありませんでしたが､

39
00:03:07,140 --> 00:03:14,580
‫この目的は加算型アニメーションであるため､ 何か追加する必要があることに注意してください｡

40
00:03:14,580 --> 00:03:20,040
‫次に､ 私たちが死んでいるかどうかにかかわらず､

41
00:03:20,040 --> 00:03:28,260
‫ブレンドの偽ポーズにそのポーズを入力します｡

42
00:03:29,000 --> 00:03:41,750
‫そして､ ピッチを1か180に変えて､ コンパイルしてみると､ 彼が完全に上を見ているのがわかりますね｡

43
00:03:41,900 --> 00:03:44,570
‫さて､ ここでもう一つ手を加えたいのは､ イベントグラフの部分です｡

44
00:03:44,570 --> 00:03:50,120
‫現在､ アニメーションのプレビューでは､ イベントグラフがゼロで上書きされるため､ 何も手を加えることができないという､

45
00:03:50,120 --> 00:03:54,890
‫なんとも悩ましい状況になっています｡

46
00:03:54,890 --> 00:04:04,370
‫これを解決する簡単な方法は､ ここで手に入れたポーンのオーナーが有効かどうか､ つまりNULLかどうかをチェックすることです｡

47
00:04:04,820 --> 00:04:10,280
‫ここにis validを置くと､ クエスチョンマークが付いたものが自動的にこれらの実行ノードを提供し､

48
00:04:10,280 --> 00:04:26,960
‫アニメーションの更新の実行ノードを通過して､ それが有効である場合にのみ物事を設定することができるようになります｡

49
00:04:26,960 --> 00:04:28,470
‫アニメーションプレビューエディターです｡

50
00:04:28,490 --> 00:04:36,620
‫そこで､ スピードを変えてみると､ 照準オフセットを高く設定した状態で走り出したのがわかります｡

51
00:04:36,860 --> 00:04:41,090
‫では､ 実際にピッチが変数になるように設定してみましょう｡

52
00:04:41,090 --> 00:04:47,120
‫そこで､ pitchを右クリックして変数を昇格させ､ その変数をここに見えるように持ってきて､

53
00:04:47,120 --> 00:04:50,510
‫名前をpitchに変更することにします｡

54
00:04:51,110 --> 00:04:54,530
‫というか､ もっと具体的に言うと､ こんな感じの狙い球です｡

55
00:04:54,530 --> 00:05:00,290
‫そこで今､ コンパイルを進めると､ 偶然にもデフォルトの狙い球が設定されています｡

56
00:05:00,290 --> 00:05:03,380
‫それをデフォルトでゼロにしたいのです｡

57
00:05:03,560 --> 00:05:05,150
‫それをコンパイルしてきます｡

58
00:05:05,150 --> 00:05:11,270
‫そして今度は､ 速度を変えてから､ 狙いのピッチを変えるとします｡

59
00:05:12,110 --> 00:05:17,090
‫上に向かっても下に向かっても､ まさに私たちの思い通りになることがおわかりいただけると思います｡

60
00:05:17,120 --> 00:05:20,180
‫さて､ ここで問題なのは､ まだ我々のゲームに設定されていないことです｡

61
00:05:20,180 --> 00:05:26,930
‫上下しても､ どれも制御回転や照準からの情報ではありません｡

62
00:05:27,020 --> 00:05:31,040
‫そこで､ イベントグラフに戻り､ その情報をここに取り込む必要があります｡

63
00:05:31,070 --> 00:05:36,050
‫さて､ かなり長くなってしまったので､ ここで少し間隔を空けたいと思います｡

64
00:05:36,050 --> 00:05:47,720
‫そして､ この有効なピンからシーケンスノードを配置することで､ 垂直方向にも少しづつ広げていくことができます｡

65
00:05:47,720 --> 00:05:53,030
‫シーケンスノードは､ まず､ こちらのスピードと角度の設定に入りますね｡

66
00:05:53,030 --> 00:05:57,290
‫それなら､ このキャスティングに関わるものは､ シューターキャラクターに移せばいいと思うんです｡

67
00:05:57,380 --> 00:06:04,610
‫シーケンスピンとオブジェクトピンをポーンのオーナーを取得するノードに接続し､ シーケンスに別のピンを追加することで､

68
00:06:04,610 --> 00:06:09,860
‫さらに垂直方向に下げられると思います｡

69
00:06:09,860 --> 00:06:13,820
‫そして今回､ 質主から2つの情報を得たい｡

70
00:06:13,940 --> 00:06:17,330
‫まず､ 1つ目はコントロールローテーションになります｡

71
00:06:17,330 --> 00:06:20,060
‫では､ ゲットコントロールの回転をやってみましょう｡

72
00:06:20,360 --> 00:06:26,360
‫しかし､ これだけでは十分ではありません｡ 制御回転は､ ピンを分割すると､ ここにピッチがあることがわかりますので､

73
00:06:26,360 --> 00:06:29,570
‫そのピッチを設定してみることができます｡

74
00:06:29,570 --> 00:06:30,950
‫それをやってみよう｡

75
00:06:30,980 --> 00:06:38,570
‫そこで､ セットピッチを行い､ 実行ノードをシーケンスから実行ノードに接続し､ そこにちょっとしたリダイレクトを追加すると､

76
00:06:38,570 --> 00:06:46,320
‫コンパイル､ 保存､ 再生､ そして照準合わせがうまくいきます｡

77
00:06:46,340 --> 00:06:48,800
‫Aim downは振り向かない｡

78
00:06:48,800 --> 00:06:52,310
‫すると､ さらに様子がおかしくなってくる｡

79
00:06:52,400 --> 00:07:02,870
‫ここで起こっているのは､ このコントロールの回転は完全にグローバルなものなので､ プレイヤーがすでに向いている方向は考慮されないということです｡

80
00:07:02,930 --> 00:07:10,910
‫そこで､ それを考慮するために､ もう一度ポーンに行き､ アクターの回転を取得する必要があります｡

81
00:07:10,910 --> 00:07:18,560
‫そして､ 求めたいのは､ アクターの回転とコントロールの回転の間の回転です｡

82
00:07:18,560 --> 00:07:22,640
‫そして､ その方法は､ AMピッチを切り離すだけなんです｡

83
00:07:22,940 --> 00:07:28,730
‫このリンクを解除して右クリックし､ 構造体ピンを再結合すると､

84
00:07:28,730 --> 00:07:33,470
‫この2つの間にデルタができます｡

85
00:07:34,240 --> 00:07:41,280
‫また､ デルタは基本的にローテーター間の引き算を派手に表現したものです｡

86
00:07:41,290 --> 00:07:50,830
‫そこで､ コントロールの回転からベースの回転を引いて､ アクターの回転とします｡

87
00:07:50,830 --> 00:07:55,930
‫つまりBなので､ カーソルを合わせるとAからBを引いた値になる､ それがデルタローテーターの役割です｡

88
00:07:56,050 --> 00:08:03,610
‫私たちは基本的に､ 「コントロールローテーションは欲しいが､ アクティブローテーションに関する情報はすべて取り除いてくれ」と言いたいのです｡

89
00:08:03,610 --> 00:08:10,960
‫だから､ キャラクターが向いている方向に対して､ 上と下のどちらを向いているのかが分かればいいんです｡

90
00:08:11,110 --> 00:08:20,170
‫そして､ そこから戻り値のピンを分割して､ そこからピッチを使用すると､ すべてが期待通りに動作することが確認できるのです｡

91
00:08:20,170 --> 00:08:26,950
‫上を見れば名指しで､ 下を見れば下を目指す､ 世の中でどちらを向いていようが､

92
00:08:26,950 --> 00:08:29,440
‫それは変わらない｡

93
00:08:29,440 --> 00:08:33,220
‫というわけで､ 目的のローテーションはほぼこれで終了です｡

94
00:08:33,220 --> 00:08:38,350
‫ただ､ 問題は､ 今のところ私たちの目はこのように狙いを定めることができないことです｡

95
00:08:38,350 --> 00:08:49,420
‫だから､ シューターキャラクターをこっちの階段に置いて､ こっちから追いかけて行って､ こっちに来るように仕向けるんです｡

96
00:08:49,420 --> 00:08:50,500
‫来ましたね｡

97
00:08:50,500 --> 00:08:53,350
‫壁に向かってひたすら撮影しているのがわかると思います｡

98
00:08:53,350 --> 00:08:56,200
‫全然狙ってないのが､ ちょっと悲しい｡

99
00:08:56,200 --> 00:08:57,670
‫では､ どうなっているのでしょうか？

100
00:08:57,670 --> 00:09:04,120
‫アイコンとビヘイビアツリーに移動すると､ デフォルトのフォーカスをある場所に設定していることがわかります｡

101
00:09:04,120 --> 00:09:13,540
‫そしてデフォルトでは､ フォーカスをある場所に設定すると､ アンリアルはピッチと同じようにコントロールの回転を更新しないようになっているのです｡

102
00:09:13,720 --> 00:09:15,100
‫だから､ ちょっと寂しいですね｡

103
00:09:15,100 --> 00:09:23,680
‫さて､ では黒板に行って､ このプレーヤーの位置を､ 代わりにプレーヤーへの参照だけに変更する必要があります｡

104
00:09:24,060 --> 00:09:27,790
‫そして､ このベクトルをオブジェクトに変える必要があります｡

105
00:09:27,790 --> 00:09:33,430
‫これで､ プレーヤー用の黒板キーができました｡ これはオブジェクトで､ 特に重要ではありませんが､

106
00:09:33,430 --> 00:09:38,860
‫必要であればベースクラスをb actorに変更することができます｡

107
00:09:38,860 --> 00:09:49,570
‫つまり､ ビヘイビアツリーで､ プレイヤーの位置に移動するのではなく､ プレイヤーアクターに移動するように切り替えることができるのです｡

108
00:09:49,570 --> 00:09:55,330
‫フォーカスをプレイヤーアクターに設定し､ プレイヤーを更新することができます｡

109
00:09:55,330 --> 00:10:00,400
‫シーンの位置は､ プレイヤーアクターも指す必要があるようになりました｡

110
00:10:00,400 --> 00:10:08,260
‫さて､ これはまだうまくいきません｡ というのも､ update player location of sceneは現在､ このキーにロケーションを設定しようとしているところだからです｡

111
00:10:08,260 --> 00:10:11,050
‫そこで､ ちょっとしたミニ・チャレンジです！更新できるかな？

112
00:10:11,050 --> 00:10:19,720
‫そのため､ ビヘイビアツリーサービスに場所を設定する代わりに､ 実際のアクターがビデオを一時停止して移動するように設定しています｡

113
00:10:19,750 --> 00:10:20,650
‫では､ お帰りなさい｡

114
00:10:20,650 --> 00:10:25,810
‫そこで､ Visual Studioのコードに移動して､ 特にサービスを探します｡

115
00:10:25,810 --> 00:10:29,650
‫見ればサービスアンダースコアプレイヤーの位置がわかる｡

116
00:10:29,800 --> 00:10:37,090
‫そして､ これをset value as vectorではなく､ set value as objectに変更します｡

117
00:10:37,090 --> 00:10:42,190
‫黒板にタイプの選択肢が書いてあったので､ それをここで伝えるのです｡

118
00:10:42,220 --> 00:10:46,360
‫さて､ 明らかに､ 設定しようとしているものがオブジェクトではなくベクトルであると文句を言われそうです｡

119
00:10:46,360 --> 00:10:51,280
‫そこで､ アクターの位置の取得を削除して､ プレイヤーのポーンを渡すだけにしています｡

120
00:10:51,280 --> 00:10:56,860
‫その代わり､ 値をクリアすることは以前と同じです｡ ですから､ エディタに戻って､ ヒット､ コンパイルして､

121
00:10:56,890 --> 00:11:03,340
‫この新しい設定がI Kateのヒットを目指して機能しているかどうかを確認することができるのです｡

122
00:11:03,370 --> 00:11:05,800
‫行ってみてください......私は階段の上にいます｡

123
00:11:06,590 --> 00:11:13,250
‫そしてもう一つ､ 振る舞いツリーからアップデートするのを忘れていたのですが､

124
00:11:13,250 --> 00:11:36,050
‫現時点では､ プレイヤーは黒板のキーをセルフアクターにリセットするようになっていて､ 基本的にプレイヤーにしたいのです｡

125
00:11:36,050 --> 00:11:40,550
‫階段まで行って､ 階段からこっちに向かって撃ってくるかどうか見てみよう｡

126
00:11:41,030 --> 00:11:41,690
‫素晴らしい｡

127
00:11:41,690 --> 00:11:46,130
‫ローテーションを変えて､ 確かに彼は私たちのすぐそばを撃っている｡

128
00:11:46,130 --> 00:11:47,300
‫2人ともどこにいるんだ？

129
00:11:47,300 --> 00:11:49,250
‫だから､ 私は健康を失い､ もうすぐ死んでしまうのです｡

130
00:11:50,600 --> 00:11:59,150
‫さて､ 今回の講義はこれで終わりです｡ 照準オフセットを追加し､ それを使って照準もできるように目を更新しました｡

131
00:11:59,180 --> 00:12:03,410
‫次の講義では､ この空中にいる間のおかしな走りをどうにかしたいと思います｡

132
00:12:03,410 --> 00:12:04,370
‫現地でお会いしましょう｡

