﻿1
00:00:04,770 --> 00:00:05,940
‫こんにちは､ ようこそ｡

2
00:00:05,940 --> 00:00:11,610
‫この講義では､ Aを取得するために I. を巡回しています｡

3
00:00:11,610 --> 00:00:18,600
‫だから､ 私の元のスタート地点に行き､ 彼のスタート地点に戻って少し待ってから､ もう一度行くことにします｡

4
00:00:18,600 --> 00:00:21,570
‫これをビヘイビアツリーで実現するのです｡

5
00:00:21,570 --> 00:00:23,760
‫では､ さっそく潜入してみましょう｡

6
00:00:24,720 --> 00:00:27,750
‫だから今は､ ビヘイビアツリーをあまり活用していないんです｡

7
00:00:27,750 --> 00:00:28,890
‫それを解決しよう｡

8
00:00:28,890 --> 00:00:36,570
‫これから､ スタート地点からプレイヤーのいる場所まで行って､

9
00:00:36,570 --> 00:00:42,570
‫元のスタート地点に戻るという動作を作ります｡

10
00:00:42,930 --> 00:00:46,140
‫さて､ その方法ですが､ 次のようなものを使います｡

11
00:00:46,140 --> 00:00:53,190
‫つまり､ ビヘイビアツリーにはタスクと呼ばれるものと複合ノードと呼ばれるものがあり､

12
00:00:53,190 --> 00:00:57,120
‫この場合､ 複合ノードの例はシーケンスである｡

13
00:00:57,120 --> 00:01:01,320
‫そこで､ シーケンスとタスクについて､ なんとなくのイメージで理解しておきましょう｡

14
00:01:01,530 --> 00:01:03,330
‫タスクとは､ あなたが行うことです｡

15
00:01:03,450 --> 00:01:09,030
‫シーケンスはそのようなタスクの連続であり､ すべてのタスクを順番に実行する｡

16
00:01:09,660 --> 00:01:16,320
‫そこで､ ここで右クリックしてタスクを展開すると､ タスクとして使用できるものの例が表示されます｡

17
00:01:16,470 --> 00:01:21,630
‫例えば､ 同じく直接移動した場所に移動するムーブ2を用意することができます｡

18
00:01:21,630 --> 00:01:23,700
‫これから使う区別がまったくわからない｡

19
00:01:23,700 --> 00:01:24,390
‫2手目

20
00:01:24,420 --> 00:01:27,660
‫鼻を掻くアニメーションなどを再生させることができます｡

21
00:01:27,660 --> 00:01:30,990
‫ヘイユー､ みたいな音を出してもらえばいいんですよ､ そういうの｡

22
00:01:30,990 --> 00:01:34,770
‫その気になれば､ 別の動物の行動を実行させることも可能です｡

23
00:01:35,130 --> 00:01:39,690
‫また､ ここにはウェイトがあり､ 動作に間を持たせるのに非常に有効です｡

24
00:01:39,930 --> 00:01:46,080
‫さて､ これらのタスクの面白いところは､ 複数のフレーム､ 複数のティックに渡って実行できることです｡

25
00:01:46,080 --> 00:01:54,540
‫つまり､ 移動2は移動している間ずっと実行されており､ 終了するのは移動先に着いてからということです｡

26
00:01:54,930 --> 00:02:03,690
‫このように､ 移動も行い､ シーケンスノードから下にドラッグすることで､ このシーケンスに貼り付けることができます｡

27
00:02:03,930 --> 00:02:08,880
‫するとどうなるかというと､ まず､ 目的地に移動しようとするんです｡

28
00:02:09,000 --> 00:02:16,530
‫そして､ 待つことを指示する2番目のタスク・ノードを追加し､ 3番目のタスク・ノードを追加することができます｡

29
00:02:16,530 --> 00:02:23,340
‫シーケンスからプルダウンしてリリースすることで､ シーケンスノードの下に素早くタスクを追加できることに注目してください｡

30
00:02:23,340 --> 00:02:24,060
‫そして､ それを伝えることができる｡

31
00:02:24,060 --> 00:02:26,580
‫別の場所に移ってから伝えたい｡

32
00:02:26,580 --> 00:02:29,880
‫また一定時間待ちたい｡

33
00:02:29,880 --> 00:02:35,850
‫これは､ プレーヤーに移動して､ 元の場所に戻るという基本的なことです｡

34
00:02:35,850 --> 00:02:38,460
‫そして､ ここでシーケンスノードがどのように動作しているかがわかります｡

35
00:02:38,460 --> 00:02:40,080
‫今度はルートノードもあります｡

36
00:02:40,080 --> 00:02:44,460
‫ルートノードが持つ子ノードは1つだけなので､ その下にいろいろと追加しようとしないでください｡

37
00:02:44,460 --> 00:02:49,800
‫これは基本的に､ これらのタスクを順番に実行し､ どれかが失敗するまで実行し､

38
00:02:49,800 --> 00:02:56,310
‫終了したらまたプロセスを開始するというものです｡

39
00:02:57,090 --> 00:03:05,580
‫もうひとつは､ これらのノードをクリックすると､ そのノードの動作に影響を与える詳細が表示される点です｡

40
00:03:05,700 --> 00:03:13,440
‫例えば､ 「move too」は､ 現在､ 自己の詳細ペインの黒板セクションの黒板キーをアクティブにしていますが､

41
00:03:13,440 --> 00:03:17,340
‫これをプレイヤーの位置に変更することができます｡

42
00:03:17,340 --> 00:03:22,380
‫つまり､ このNodeへの移動が､ 今度は私たちのプレイヤーの場所に移動するということです｡

43
00:03:22,380 --> 00:03:27,480
‫デフォルトでは5秒待ちますが､ 2秒待ちにしたり､ ランダム偏差を1/2にしたりして､

44
00:03:27,480 --> 00:03:36,450
‫基本的に1/2から3秒の間のどこかで待つように変更することも可能です｡

45
00:03:36,690 --> 00:03:43,290
‫そして､ 別の場所に移動したいのですが､ それは現在持っていない場所､ つまりスタート地点になります｡

46
00:03:43,380 --> 00:03:44,760
‫だから､ それを追加して行けばいいんです｡

47
00:03:44,760 --> 00:03:51,780
‫黒板に移動して､ 新しいキーを追加し､ ベクトルを追加して､ それを開始位置として設定しましょう｡

48
00:03:52,110 --> 00:03:56,820
‫そして､ ビヘイビアツリーに戻り､ ノードへの移動の詳細ペインでは､ オプションとして開始位置が設定されていることを確認します｡

49
00:03:56,820 --> 00:04:07,320
‫そして､ 5秒待つと､ シーケンスノードが正常に完了したため､ プロセスが再び開始されます｡

50
00:04:07,320 --> 00:04:08,430
‫というわけで､ こんな感じです｡

51
00:04:08,430 --> 00:04:13,560
‫シーケンスノードに降りると､ シーケンスノードが「ここはどこだ？

52
00:04:13,560 --> 00:04:15,570
‫最初からやりたいと思います｡

53
00:04:15,570 --> 00:04:16,860
‫そして､ この数字を見てください｡

54
00:04:16,860 --> 00:04:22,650
‫ここでは実行順序を説明しています｡ ゼロから始まり､ シーケンスノード1が移動し､

55
00:04:22,650 --> 00:04:30,780
‫2は重み付け､ 3は4へ移動､ などです｡ だから､ 一つひとつの作業を完了するか失敗するかまで､ ステップを踏んで行うのです｡

56
00:04:30,780 --> 00:04:34,050
‫もし失敗したら､ シーケンスノード全体が失敗することになる｡

57
00:04:34,050 --> 00:04:40,020
‫しかし､ いずれも失敗することはないだろうから､ 一通りやってからシーケンスノードが完了し､

58
00:04:40,020 --> 00:04:42,660
‫ルートが再びそれを開始することになる｡

59
00:04:42,660 --> 00:04:49,860
‫そこで､ プレーヤー位置のウェイト付けに行き､ スタート位置に戻り､ 少し待つというループで進めていくことになります｡

60
00:04:49,980 --> 00:04:54,000
‫これがビヘイビアツリーの力であり､ これをより深くネスト化することができるわけです｡

61
00:04:54,000 --> 00:04:58,920
‫ここで選択肢を作ったり､ デコレーターを使ったり､ これからの講義で出てくるようなことができるんです｡

62
00:04:58,920 --> 00:05:00,810
‫でも､ これが基本なんです｡

63
00:05:00,810 --> 00:05:07,530
‫AIが実行できる一連の命令で､ 完了するまでに1フレーム以上かかることがあります｡

64
00:05:07,530 --> 00:05:13,380
‫では､ 実際にこの開始位置を何か意味のあるものに設定したいと思います｡

65
00:05:13,620 --> 00:05:16,650
‫これで､ それなりにわかりやすくなったはずです｡

66
00:05:16,650 --> 00:05:23,460
‫私が唯一お伝えしたいのは､ どうやって......私たちがコントロールしているものを手に入れるか､ ということです｡

67
00:05:23,460 --> 00:05:24,060
‫だから､ ただ｡

68
00:05:24,140 --> 00:05:32,960
‫コントローラhに移動して､ get -- プレイヤーコントローラとエアコントローラの両方のget -- メソッドを見れば､

69
00:05:32,960 --> 00:05:41,240
‫コントロールされているものを手に入れることができることを思い出してください｡

70
00:05:41,240 --> 00:05:51,700
‫これを利用して､ 再生開始時の位置を取得し､ 再生開始位置を設定することができます｡

71
00:05:51,710 --> 00:05:53,240
‫そこで､ あなたへの挑戦状です｡

72
00:05:53,240 --> 00:05:59,060
‫開始位置を設定し､ 先ほど少し話したように -- の位置を取得し､ 正しい黒板キーを設定し､

73
00:05:59,060 --> 00:06:04,250
‫そのテンプレートとしてすでに使用したプレーヤーの位置を使用します｡

74
00:06:04,610 --> 00:06:09,680
‫講義で説明した方法でビヘイビアツリーを設定し､ テストしてみましょう｡

75
00:06:09,680 --> 00:06:19,910
‫その動作で､ プレイヤーや敵がプレイヤーの--まで移動して､ 元のスタート地点に戻るという望ましい動作が得られるかどうかを確認してください｡

76
00:06:19,910 --> 00:06:21,860
‫ビデオを一時停止して､ 試してみてください｡

77
00:06:23,000 --> 00:06:23,270
‫なるほど｡

78
00:06:23,270 --> 00:06:23,900
‫お帰りなさい｡

79
00:06:23,900 --> 00:06:25,310
‫それでうまくいくといいのですが｡

80
00:06:25,310 --> 00:06:27,050
‫これに挑戦してみよう｡

81
00:06:27,050 --> 00:06:31,190
‫そこで､ プレーヤーの位置の行をコピーしてみます｡

82
00:06:31,250 --> 00:06:36,290
‫プレイヤーの位置を設定する代わりに､ 黒板に移動して､ 開始位置を確認します｡

83
00:06:36,290 --> 00:06:39,770
‫そのキー値をここにコピーするのです｡

84
00:06:40,100 --> 00:06:45,530
‫それから､ プレイヤーの位置を取得する代わりに､ get -- を行ってから､

85
00:06:45,530 --> 00:06:52,640
‫get actor location で､ 現在操作しているプレイヤーの世界での位置を取得して､

86
00:06:52,640 --> 00:06:58,370
‫エディターに戻ってこれをコンパイルします｡

87
00:06:58,370 --> 00:07:03,170
‫そして､ それが終わったら､ 再生ボタンを押して､ 私たちの--を見てみてください｡

88
00:07:03,170 --> 00:07:05,390
‫彼がやってきて､ 私たちのほうに近づいてくる｡

89
00:07:05,390 --> 00:07:10,780
‫3秒か2秒か1/2か待って､ 元のスタート地点に戻るんです｡

90
00:07:10,830 --> 00:07:16,880
‫そして､ 5秒待って､ 元のプレイヤーの場所に戻ってくる--｡

91
00:07:16,880 --> 00:07:18,530
‫だから､ 毎フレーム更新しているわけではないんです｡

92
00:07:18,560 --> 00:07:19,040
‫それでいいんです｡

93
00:07:19,070 --> 00:07:20,960
‫今のところ､ そういう設計になっています｡

94
00:07:20,960 --> 00:07:23,360
‫でも､ その行動が起こっているのがわかる｡

95
00:07:23,360 --> 00:07:25,520
‫前後をパトロールしている｡

96
00:07:25,520 --> 00:07:29,240
‫では､ そのすべてを実際に見てみましょう｡

97
00:07:29,240 --> 00:07:30,680
‫ビヘイビアツリーをご覧ください｡

98
00:07:30,860 --> 00:07:34,940
‫ビヘイビアツリーに移動して､ 問題のIを選択すると､ 彼がどこにいるかがわかります｡

99
00:07:34,970 --> 00:07:37,610
‫彼は何秒も待っているのに動いている｡

100
00:07:37,610 --> 00:07:39,470
‫そして､ スタート地点に移動している｡

101
00:07:39,470 --> 00:07:47,000
‫彼はまた待っているので､ これをアンドックして､ 私たちのゲームでこの2つが同時に起こるのを見ることができるのです｡

102
00:07:47,000 --> 00:07:49,040
‫その場所に移動しているのがわかる｡

103
00:07:49,040 --> 00:07:52,880
‫彼は今､ 再びスタート地点に移動して待っている｡

104
00:07:52,880 --> 00:07:59,690
‫これは､ 特に動作が少し複雑になったときに､ デバッグするのにとても便利なんです｡

105
00:07:59,690 --> 00:08:09,530
‫また､ アンリアルがどのようにビヘイビアツリーを計算しているのか､ その実行フローがビヘイビアツリーの中でどのように機能しているのかを知ることができるのです｡

106
00:08:09,710 --> 00:08:10,340
‫素晴らしい内容です｡

107
00:08:10,340 --> 00:08:15,050
‫次回の講義では､ これらの動作をさらに複雑にし､ プレイヤーについていくことを選択するか､

108
00:08:15,050 --> 00:08:21,620
‫それとも今いる場所でじっとしていることを選択するか､ 何らかの判断の要素を加えていきます｡

109
00:08:21,770 --> 00:08:23,330
‫その講義でお会いしましょう｡

