﻿1
00:00:04,550 --> 00:00:05,810
‫こんにちは､ ようこそ｡

2
00:00:05,810 --> 00:00:11,330
‫この講義では､ カスタムタスクを追加することで､ ビヘイビアツリーにさらに多くの機能を追加し始めます｡

3
00:00:11,330 --> 00:00:18,200
‫この黒板クリアの値は､ C++で完全にカスタム化するつもりです｡

4
00:00:18,230 --> 00:00:20,240
‫さっそく､ 潜入してみましょう｡

5
00:00:21,280 --> 00:00:21,490
‫なるほど｡

6
00:00:21,490 --> 00:00:28,780
‫そこで､ このビヘイビアツリーのビヘイビアを広げて､ 調査に入れるようにしたいと思います｡

7
00:00:28,780 --> 00:00:33,040
‫そして､ 調査が終われば､ 家に帰るという行動に移る｡

8
00:00:33,040 --> 00:00:40,240
‫この後､ タスクに移動して､ スタート地点に戻るだけです｡

9
00:00:40,630 --> 00:00:49,150
‫そのために必要なのは､ 最後に訪れた場所が既知のプレイスポットであるかどうかをある程度把握することです｡

10
00:00:49,210 --> 00:00:54,490
‫そして､ その方法は､ 基本的には､ 現在調査しているプレイヤーの最後の既知の位置を設定することで､

11
00:00:54,490 --> 00:00:57,820
‫もし現在その方法がないのであれば､ それを行うつもりです｡

12
00:00:57,820 --> 00:01:00,910
‫でも､ まずはデコレーターを作りましょう｡

13
00:01:00,910 --> 00:01:09,190
‫Blackboardを調査するデコレーターを追加して､ 名前をhas investigatedに変更して､

14
00:01:09,190 --> 00:01:16,630
‫最終既知の場所が設定されているかどうかをチェックするようにします｡

15
00:01:16,750 --> 00:01:23,080
‫そして､ 黒板キーの設定を解除するための何らかのノードが必要ということです｡

16
00:01:23,740 --> 00:01:25,300
‫今は実際に存在しない｡

17
00:01:25,300 --> 00:01:26,650
‫そう思っていただけで､ そうではありません｡

18
00:01:26,650 --> 00:01:31,360
‫そこで今回は､ カスタムタスクの作成方法をご紹介します｡

19
00:01:31,360 --> 00:01:37,150
‫さて､ Blueprintを使えばとても簡単にできますが､ 少し難しい方法ですが､

20
00:01:37,150 --> 00:01:41,050
‫C++を使って行う方法を紹介します｡

21
00:01:41,440 --> 00:01:51,640
‫メインコンテンツブラウザの「新規追加」から「新しいC++クラス」を選択し､ 「すべてのクラスを表示する」チェックボックスをオンにします｡

22
00:01:51,640 --> 00:01:56,950
‫そして､ Beat Taskを検索するのですが､ ここにはたくさんのオプションがあります｡

23
00:01:56,950 --> 00:02:04,900
‫その多くは､ 「音を出す」「ここに移動する」「待つ」といったタスクが組み込まれていることがおわかりいただけると思います｡

24
00:02:05,110 --> 00:02:08,950
‫あとは､ C++を見て､ それらがどのように実装されているかを確認することができます｡

25
00:02:08,950 --> 00:02:13,720
‫それはそれで便利なのですが､ 私たちが興味があるのは､ 何から継承すればいいのか､ ということです｡

26
00:02:13,720 --> 00:02:17,200
‫何を基準に自分たちのノードを作っていけばいいのか｡

27
00:02:17,260 --> 00:02:19,030
‫ここで､ 2つの選択肢があります｡

28
00:02:19,030 --> 00:02:25,420
‫タスクノードをベースにすることもできますし､ 黒板をベースにすることもできます｡

29
00:02:25,420 --> 00:02:27,100
‫さて､ この2つの違いは何でしょうか？

30
00:02:27,560 --> 00:02:28,630
‫早速見てみましょう｡

31
00:02:28,630 --> 00:02:31,930
‫そこで､ 実際に黒板の台座を使うように移動します｡

32
00:02:31,930 --> 00:02:40,270
‫つまり､ この黒板キーのドロップダウンで､ 作業する黒板キーを選択できるようになっているのです｡

33
00:02:40,270 --> 00:02:49,990
‫つまり､ 黒板のキーをタスクにハードコードする必要がないのです｡ そのため､ そのタスクをさまざまな場面で再利用できるのは素晴らしいことです｡

34
00:02:49,990 --> 00:02:56,710
‫ですから､ 黒板キーが必要な場合は黒板ベース､ そうでない場合は他のものを使うのがいいでしょう｡

35
00:02:56,710 --> 00:03:02,370
‫そこで､ もう一度新しいC++クラスを追加し､ すべてのクラスを表示して､ 再びビートタスクを探し､

36
00:03:02,500 --> 00:03:06,910
‫Blackboard Baseを選択して次をクリックします｡

37
00:03:06,910 --> 00:03:15,850
‫では､ これをBeat Task, Underscore Clear Blackboard Valueに改名して､

38
00:03:15,850 --> 00:03:18,400
‫ここにクラスを作成します｡

39
00:03:18,760 --> 00:03:20,470
‫さて､ 当初､ これは失敗します｡

40
00:03:20,470 --> 00:03:23,440
‫では､ 「はい」をクリックして､ ここでエラーメッセージの内容を確認してみましょう｡

41
00:03:23,710 --> 00:03:30,070
‫リンクの略だ､ 未解決の外部シンボルだ､ ボケた､ と言っているのです｡

42
00:03:30,100 --> 00:03:35,590
‫通常､ リンカーからこのようなエラーが出た場合､ C++にないものがヘッダーファイルに含まれているか､

43
00:03:35,590 --> 00:03:44,860
‫この場合､ 依存しているモジュールが含まれていないことを意味します｡

44
00:03:44,860 --> 00:03:52,750
‫そして､ 探しているシンボルの種類から､ AIゲームプレイのタスクオーナーインターフェイスであることが分かります｡

45
00:03:53,020 --> 00:03:58,930
‫ゲームプレイのタスクに関わるものを探しているようで､ 実際のところモジュールなんです｡

46
00:03:58,930 --> 00:04:07,300
‫Visual Studioのコードに移動してファイルブラウザを開くと､ 私のプロジェクトまでスクロールします｡

47
00:04:07,300 --> 00:04:09,850
‫そして､ ソースシンプルシューターの下｡

48
00:04:09,850 --> 00:04:14,230
‫単純なシューターのビルドXや､ プロジェクト名が何であれ､ ビルドがあるはずです｡

49
00:04:15,040 --> 00:04:21,190
‫この中に､ もう少しスペースを空けると､ このパブリックな依存関係､ モジュール名､

50
00:04:21,190 --> 00:04:29,740
‫そしてこのリストに追加したいモジュール名があるのがわかると思いますが､ これはゲームプレイです｡

51
00:04:30,890 --> 00:04:40,070
‫タスクにSを追加して､ コンパイルに戻ると､ 何らかの理由ですべてが正常にコンパイルされることを期待します｡

52
00:04:40,070 --> 00:04:44,680
‫ブートタスクのためにオーバーライドしても､ これは自動的に追加されません｡

53
00:04:44,690 --> 00:04:48,740
‫さて､ これが終わったら､ ここで作成されたものを見てみましょう｡

54
00:04:49,040 --> 00:04:59,210
‫私たちのベータタスクであるアンダースコア・クリア・ブラックボード・バリューという新しいクラスがあるはずですが､ 今のところかなり空っぽです｡

55
00:04:59,270 --> 00:05:06,320
‫さて､ ここでやりたいことは､ もしこれを今の動作ツリーに追加するとしたら､ 醜い名前になってしまうということです｡

56
00:05:06,320 --> 00:05:10,160
‫そこで､ このタスクには人間が読める素敵な名前を付けたい｡

57
00:05:10,160 --> 00:05:14,720
‫そして､ その方法は､ コンストラクタを追加し､ プロパティを設定することです｡

58
00:05:14,720 --> 00:05:17,570
‫では､ ここにパブリックなコンストラクタを作りましょう｡

59
00:05:17,900 --> 00:05:21,620
‫コンストラクタは常にクラスと同じ名前なので､ それをコピーすればいいのです｡

60
00:05:21,750 --> 00:05:28,190
‫最後にセミコロンをつけて､ C++で実装を作成しましょう｡

61
00:05:28,520 --> 00:05:34,160
‫そして､ 実装はノード名という変数を設定するだけでよい｡

62
00:05:34,160 --> 00:05:40,820
‫つまり､ ノード名を設定してから文字列を使用すると､ 設定した文字列がノード名となるわけです｡

63
00:05:40,820 --> 00:05:43,220
‫だから､ 透明な黒板になるんです｡

64
00:05:44,210 --> 00:05:48,730
‫バリューはスペースと正しい大文字を使うだけでいいし､ 簡単でいい｡

65
00:05:48,740 --> 00:05:54,240
‫さて､ 収録時にやり忘れたことですが､ これをテキストマクロで囲むことです｡

66
00:05:54,260 --> 00:05:58,880
‫さて､ あなたは自分のコードでそれを行う必要がありますが､ 私のコードでそれを見ることができます｡

67
00:05:58,880 --> 00:06:05,180
‫このままでは持続してしまうので､ 今すぐコンパイルしてきましょう｡

68
00:06:06,680 --> 00:06:09,170
‫コンパイルに成功したのはすごい｡

69
00:06:09,350 --> 00:06:12,170
‫そこで､ この新しいノードを追加することに挑戦します｡

70
00:06:12,170 --> 00:06:17,050
‫そこで､ 調査動作の最後に追加して､ それが完了するのを確認するだけです｡

71
00:06:17,060 --> 00:06:21,470
‫基本的には､ 何もしなくても自動的に完了するはずです｡

72
00:06:21,470 --> 00:06:22,790
‫ただし､ 名前が正しいかどうかは確認してください｡

73
00:06:22,790 --> 00:06:26,270
‫追加できていることを確認し､ 次回の講義でビヘイビアを追加して見ましょう｡

74
00:06:26,270 --> 00:06:27,560
‫だから､ ビデオを一時停止して､ やってみてください｡

75
00:06:28,730 --> 00:06:29,120
‫なるほど｡

76
00:06:29,120 --> 00:06:29,680
‫お帰りなさい｡

77
00:06:29,690 --> 00:06:35,660
‫では､ 敵のAさんに行きましょう｡  I. を調査する動作の最後に追加してください｡

78
00:06:35,660 --> 00:06:39,440
‫黒板クリアの値を入れていきます｡

79
00:06:39,440 --> 00:06:41,450
‫素敵な名前がついているのがわかると思います｡

80
00:06:41,450 --> 00:06:45,620
‫また､ 詳細ペインに移動すると､ 黒板キーが選択できるようになっているのがわかります｡

81
00:06:45,620 --> 00:06:47,990
‫最後に知られているプレーヤーの位置を選択することになります｡

82
00:06:47,990 --> 00:06:53,240
‫まだ何もしていませんが､ Blackboard Baseから受け継いだ機能なので､

83
00:06:53,240 --> 00:06:58,260
‫自動的に完了することを確認しましょう｡

84
00:06:58,260 --> 00:07:00,830
‫そうして､ 次に進むべきなのです｡

85
00:07:00,830 --> 00:07:08,000
‫この後､ ウェイトタスクに移動させて､ そのまま自動で完了することを確認しましょう｡

86
00:07:08,090 --> 00:07:17,480
‫だから､ 私は､ できるだけ隅の方に身を隠して､ 調査が通ったところを見に行き､ 実は見られていた､

87
00:07:17,480 --> 00:07:23,090
‫という遊びをしようと思っています｡

88
00:07:23,090 --> 00:07:25,190
‫だから､ もう一度､ 隠れに行こう｡

89
00:07:25,220 --> 00:07:27,170
‫できれば角のあたりに隠れていてください｡

90
00:07:28,610 --> 00:07:31,060
‫に行ってしまう｡

91
00:07:31,070 --> 00:07:31,560
‫これでよしとする｡

92
00:07:31,580 --> 00:07:35,690
‫黒板の値をクリアーしているので､

93
00:07:35,690 --> 00:07:41,000
‫成功したことになります｡

94
00:07:41,000 --> 00:07:42,950
‫それで正しく動作しているのですね｡

95
00:07:42,950 --> 00:07:51,920
‫クリアブラックな世界の価値は､ そのまま成功を返すだけで､ 次の講義を待つために､ 実際にどのように機能を追加していけばいいのかを見ていきます｡

96
00:07:51,920 --> 00:07:52,760
‫現地でお会いしましょう｡

