﻿1
00:00:04,260 --> 00:00:05,070
‫こんにちは､ ようこそ｡

2
00:00:05,070 --> 00:00:08,490
‫この講義では､ AI Focusに取り組みます｡

3
00:00:08,490 --> 00:00:14,850
‫このように､ Unrealに組み込まれた機能を利用することで､ 私たちの後をついてくるAIキャラクターが､

4
00:00:14,850 --> 00:00:19,560
‫どこに行っても私たちを狙えるようにすることができます｡

5
00:00:19,560 --> 00:00:22,080
‫それでは､ フォーカスの仕組みを見てみましょう｡

6
00:00:23,190 --> 00:00:26,220
‫だから､ 私は現在､ あまりやっていないんです｡

7
00:00:26,220 --> 00:00:33,690
‫そして､ それが何かをするためには､ まずプレイヤーのほうを向くことが出発点になると思います｡

8
00:00:33,990 --> 00:00:40,640
‫そのためには､ AIに備わっている機能､ つまりフォーカルポイントを設定することが有効です｡

9
00:00:40,650 --> 00:00:47,120
‫そこで､ AIコントロールを見て､ セットフォーカスを探すと､ ここにいくつかの関連メソッドがあります｡

10
00:00:47,130 --> 00:00:52,380
‫ひとつはセットフォーカス､ もうひとつはセットフォーカス､ そのすぐ下はクリアフォーカスです｡

11
00:00:52,770 --> 00:01:03,830
‫つまり､ AIコントローラーに､ 特定のポイントにフォーカスするように､ あるいは特定のアクターにフォーカスするように指示することができるのです｡

12
00:01:03,840 --> 00:01:08,910
‫もし後者を選んだ場合､ もし俳優に焦点を当てることを選んだ場合､ その俳優が動けば､

13
00:01:08,910 --> 00:01:12,540
‫その俳優に焦点を当て続けることになります｡

14
00:01:12,540 --> 00:01:17,310
‫一方､ ある一点に集中することを選択した場合は､ その一点に集中し続けることになります｡

15
00:01:17,310 --> 00:01:23,600
‫しかし､ その点がアクターの位置だった場合､ そのアクターが移動しても､ その点は更新されない｡

16
00:01:23,610 --> 00:01:29,700
‫ですから､ 一般的にフォーカルポイントは､ 世界に固定されたものに対して使われ､ 動き回るものに対しては､ ある種の理にかなった役者が使われます｡

17
00:01:29,700 --> 00:01:36,360
‫そして､ この下にあるクリアフォーカス機能は､ 何かに集中するのをやめようということを教えてくれるものです｡

18
00:01:36,360 --> 00:01:37,110
‫そういうことなんですね｡

19
00:01:37,110 --> 00:01:39,030
‫フォーカスを定め､ フォーカスをクリアする｡

20
00:01:39,120 --> 00:01:45,090
‫ここで､ この優先順位という変数がありますが､ これはこれから少し説明します｡

21
00:01:45,090 --> 00:01:48,360
‫しかし､ ここでの考え方は､ 優先順位のレベルが違うということです｡

22
00:01:48,360 --> 00:01:55,470
‫この列挙型は､ デフォルトでゲームプレイに設定されています｡

23
00:01:55,470 --> 00:02:05,340
‫enumの定義を見てみると､ デフォルトの動きとゲームプレイがあり､ 基本的に優先順位の高い順に並んでいることがわかります｡

24
00:02:05,340 --> 00:02:07,500
‫ですから､ ゲームプレイが最も優先されます｡

25
00:02:07,500 --> 00:02:09,960
‫ゲームプレイとして何かを設定すると､ それを見ることになります｡

26
00:02:09,960 --> 00:02:15,690
‫ゲームプレイ優先をクリアしたためにゲームプレイが設定されていない場合は､ どこに行くのか､

27
00:02:15,690 --> 00:02:24,210
‫どこにも移動していない場合は､ デフォルトの優先順位を見るだけで､ どこか遠くの場所にいるだけかもしれません｡

28
00:02:24,210 --> 00:02:31,290
‫ですから､ 警備員が巡回する行動をとっている場合､ 警備員が次に移動する場所を確認するのがデフォルトになります｡

29
00:02:31,290 --> 00:02:34,140
‫デフォルトで見るポイントを設定するとか｡

30
00:02:34,140 --> 00:02:40,260
‫だから､ 自分のこだわりのゾーンへの入り口を見ているとか､ そういうことかもしれませんね｡

31
00:02:40,260 --> 00:02:43,020
‫とにかく､ 優先順位はこんなものです｡

32
00:02:43,020 --> 00:02:51,840
‫というのも､ このゲームプレイ機能は､ 「あそこで何か面白いことが起こっているよ」ということを伝えるために使うことがほとんどだからです｡

33
00:02:51,840 --> 00:02:54,690
‫プレーヤーがいるから､ 先に見ておこう｡

34
00:02:54,960 --> 00:03:02,820
‫そこでまず､ AIコントローラーにbegin playを実装し､ begin playにフォーカスを設定できるようにします｡

35
00:03:02,820 --> 00:03:05,880
‫これは､ この関数がどのように動作するかを示すためのものです｡

36
00:03:05,880 --> 00:03:09,810
‫だからBegin Playは､ 前にも見たことがあると思いますが､ プロテクトされた機能なんです｡

37
00:03:09,810 --> 00:03:15,150
‫そこで､ 保護されたセクションを作成し､ 仮想空洞の再生を開始させる必要があります｡

38
00:03:15,150 --> 00:03:23,130
‫ここでは安全のためにoverrideキーワードを置き､ C++で実装を作成します｡

39
00:03:23,250 --> 00:03:30,030
‫また､ スーパープレーの開始を呼び出したいと思います｡ そうしないと､ 設計図がうまくいかないからです｡

40
00:03:30,030 --> 00:03:37,380
‫これを忘れると､ もしbegin playを作成した後にblueprintがうまくいかないことがあったら､ superに呼び出しているかどうか確認してください｡

41
00:03:37,710 --> 00:03:44,730
‫そして､ この時点で､ ポーンアクタを手に入れ､ それにフォーカスを合わせることです｡

42
00:03:45,930 --> 00:03:52,710
‫ポーンアクターを取得するには､ ゲームプレイ統計ヘッダの関数を使用します｡ このヘッダにカーソルを合わせるか､ control p

43
00:03:52,710 --> 00:03:58,170
‫でゲームプレイ統計を検索すると､ kismet forward slash gameplay statics

44
00:03:58,170 --> 00:03:59,940
‫の下にあることが分かります｡

45
00:03:59,940 --> 00:04:04,530
‫そこで､ シューターIのコントローラーCPに戻り､ それを搭載することにします｡

46
00:04:04,530 --> 00:04:11,730
‫ハッシュインクルードして､ kismet forward slash gameplay staticsとし､ U gameplay

47
00:04:11,730 --> 00:04:19,530
‫staticsを行うことができるようにします｡ この中で､ 私が非常に便利だと思う関数は､ get player pawnで､

48
00:04:19,530 --> 00:04:24,270
‫これはプレーヤーポーンへのポインタとして返します｡

49
00:04:24,270 --> 00:04:29,190
‫そして､ ワールドコンテキストオブジェクトとプレイヤーインデックスを取り込むことでそれを実現します｡

50
00:04:29,190 --> 00:04:31,560
‫この場合は､ ゼロのプレーヤーを探します｡

51
00:04:31,650 --> 00:04:36,150
‫だから､ ポーンをプレイしてゲットワールドをやろう｡

52
00:04:36,150 --> 00:04:42,060
‫そして､ インデックス・ゼロを探し､ これを変数､ ポーンに保存するのです｡

53
00:04:42,890 --> 00:04:46,040
‫どのプレーヤーになるんだろう......みたいな｡

54
00:04:46,040 --> 00:04:48,050
‫だから､ そこに注目したいのです｡

55
00:04:49,990 --> 00:04:53,250
‫だから､ フォーカスを定めてのチャレンジタイムなのです｡

56
00:04:53,260 --> 00:04:58,930
‫ゲームプレイ静的関数の呼び出し､ 設定､ フォーカスを使用して取得したプレイヤーを使って､ さまざまなキャラクターの周りを移動できるかどうか､

57
00:04:58,930 --> 00:05:03,370
‫世界でテストしてみましょう｡

58
00:05:03,370 --> 00:05:04,870
‫彼らはあなたについてくるのでしょうか？

59
00:05:04,870 --> 00:05:06,150
‫彼らの視線はあなたの後を追うだろうか？

60
00:05:06,160 --> 00:05:07,840
‫ビデオを一時停止してご覧ください｡

61
00:05:08,900 --> 00:05:09,200
‫なるほど｡

62
00:05:09,200 --> 00:05:09,880
‫お帰りなさい｡

63
00:05:09,890 --> 00:05:11,990
‫だから､ あまり難しくないといいのですが｡

64
00:05:11,990 --> 00:05:16,850
‫セットフォーカスは親にあるので､ セットフォーカスを呼び出す必要があります｡

65
00:05:16,850 --> 00:05:19,310
‫ここでポインターを探す必要はない｡

66
00:05:19,310 --> 00:05:22,640
‫私たちはフォーカスを定めていますが､ その結果どうなったのでしょうか？

67
00:05:22,640 --> 00:05:28,040
‫優先順位はすでにデフォルトでゲームプレイに設定されているので､

68
00:05:28,040 --> 00:05:34,940
‫基本的にアクターを入れるだけでよく､ いずれにせよ私たちが望んでいたことです｡

69
00:05:34,940 --> 00:05:36,170
‫では､ さっそく構築してみましょう｡

70
00:05:37,440 --> 00:05:42,750
‫そして､ それが終わったら､ Unreal に飛び乗って遊んでみましょう｡

71
00:05:43,970 --> 00:05:46,490
‫なぜかまだこの厄介なスポーンポイントがあるんです｡

72
00:05:46,520 --> 00:05:52,700
‫これを削除して､ 目のキャラクターの近くにスポーンするようにしましょう｡

73
00:05:52,970 --> 00:05:53,840
‫さあ､ どうぞ｡

74
00:05:53,870 --> 00:05:59,030
‫見てみよう､ このキャラクターの周りを少し歩いてみよう､ すると瞬時に､ 私のポーンがどこに導こうと､

75
00:05:59,030 --> 00:06:02,780
‫彼が私のポーンに顔を向けているのがわかるのです｡

76
00:06:02,780 --> 00:06:06,590
‫それが､ いくつかのAIの導入の始まりなんですね｡

77
00:06:06,590 --> 00:06:11,280
‫少ないですが､ 次回の講義ではこれをさらに深くできるように努力します｡

78
00:06:11,300 --> 00:06:12,200
‫現地でお会いしましょう｡

