﻿1
00:00:04,350 --> 00:00:04,980
‫こんにちは､ ようこそ｡

2
00:00:04,980 --> 00:00:13,110
‫この講義では､ C++で作成したキャラクタークラスから､ 実行時にライフルをスポーンします｡

3
00:00:13,110 --> 00:00:15,270
‫さっそく潜入してみましょう｡

4
00:00:16,560 --> 00:00:16,740
‫なるほど｡

5
00:00:16,830 --> 00:00:27,390
‫そこで､ 銃をシューターキャラクターの子としてスポーンさせたいのですが､ 最初のポイントは､ 他のアクター内からそのアクターをスポーンできるようにすることです｡

6
00:00:27,870 --> 00:00:29,160
‫これを実行時に行うのです｡

7
00:00:29,160 --> 00:00:32,340
‫ビギンプレイでやるのは､ そういうやり方が必要だからです｡

8
00:00:32,340 --> 00:00:34,440
‫アクターをスポーンするときは､ ランタイムで行う必要があります｡

9
00:00:34,620 --> 00:00:38,430
‫そして､ その方法は､ まず世界を手に入れることです｡

10
00:00:38,430 --> 00:00:44,820
‫そこで､ 世界を取得し､ 世界を取得する関数を呼び出します｡ ちなみに､ 世界とレベルは同義語です｡

11
00:00:44,820 --> 00:00:48,810
‫つまり､ 私たちが実際に行っているのは､ レベルまで上がっていって､

12
00:00:48,810 --> 00:00:54,210
‫「レベル､ アクターとして作れますか？

13
00:00:54,690 --> 00:00:58,500
‫だから､ その時は､ 私のために役者を産んでくれ､ と言っているんです｡

14
00:00:58,830 --> 00:01:04,830
‫そして､ これはテンプレートを取るスポーンアクターです｡

15
00:01:04,830 --> 00:01:10,530
‫これから産み出す俳優をA型ガンにしたい､ と言ってもいいんです｡

16
00:01:10,530 --> 00:01:19,680
‫そのためには､ gun dot hのインクルードをここにハッシュインクルードする必要があります｡

17
00:01:21,240 --> 00:01:29,760
‫そして､ 引数を取ることになるのですが､ spawnの引数は､ 実はクラス型でもいいのです｡

18
00:01:29,760 --> 00:01:33,780
‫そのため､ デフォルトではそのままC++を起動します｡

19
00:01:33,780 --> 00:01:38,190
‫しかし､ ここではこの銃の設計図の子を産み出したいのです｡

20
00:01:38,190 --> 00:01:43,590
‫だから､ Blueprintでフックアップする必要があるものを見つけ出す必要があるのです｡

21
00:01:43,590 --> 00:01:46,110
‫このC++では､ 少なくとも簡単にフックアップすることはできません｡

22
00:01:46,110 --> 00:01:48,330
‫一番いいのは､ Blueprintの中です｡

23
00:01:48,330 --> 00:01:52,380
‫そこで､ alt ohをして､ issue to characterのヘッダーファイルへ移動します｡

24
00:01:52,860 --> 00:01:55,620
‫そして､ ここに新しいyouプロパティを追加していきます｡

25
00:01:56,390 --> 00:02:03,470
‫アクターを生成するために指し示すべきクラスを設定できるようにするため｡

26
00:02:03,470 --> 00:02:07,010
‫このシューターキャラクターからどのブループリント・クラスをスポーンすればいいのでしょうか？

27
00:02:07,370 --> 00:02:17,510
‫実行時にこれを編集できるようにすると､ 使用する銃の種類を実行時に変更できるという誤った印象を与えてしまうので､

28
00:02:17,510 --> 00:02:23,840
‫デフォルトの編集のみとします｡

29
00:02:23,840 --> 00:02:30,710
‫一方､ Begin Playはすでにその銃が生み出されていると呼ばれているので､ 実際には何も更新されないでしょう｡

30
00:02:30,710 --> 00:02:35,090
‫ですから､ 編集可能にして､ 何ができるかという誤った印象を与えないようにしたいのです｡

31
00:02:35,450 --> 00:02:41,810
‫そして､ ここではT subclass ofというマクロを使用します｡ これは､ 以前に出会ったことがあるかもしれませんが､

32
00:02:41,810 --> 00:02:45,230
‫DT subclass ofはテンプレートです｡

33
00:02:45,230 --> 00:02:52,520
‫そこで再び角括弧を使い､ gunのサブクラスと表示させることにします｡

34
00:02:52,790 --> 00:02:59,630
‫そして基本的にこれが意味するところは､ Blueprintが選択できるクラスをGun

35
00:02:59,630 --> 00:03:05,630
‫C++クラスのサブクラスのみに制限できるようにすることです｡

36
00:03:05,960 --> 00:03:11,000
‫これはポインタにはなりません｡ なぜなら､ 実際の銃のインスタンスを指しているわけではないからです｡

37
00:03:11,000 --> 00:03:15,590
‫この変数で取得しているのは､ クラスそのものです｡

38
00:03:15,590 --> 00:03:18,530
‫この場合､ ブループリント・クラスですが､ クラスであることに変わりはありません｡

39
00:03:18,860 --> 00:03:27,950
‫このクラスは､ 銃そのものではないということを明確にするために､ 銃クラスと呼ぶことにします｡

40
00:03:28,010 --> 00:03:36,800
‫ここでは､ 銃を格納するための別のプロパティが必要で､ それは編集のデフォルトではないことになります｡

41
00:03:36,800 --> 00:03:43,130
‫ですから､ 基本的には､ これを可視のプロパティには一切せず､ A銃のポインタにするのです｡

42
00:03:43,130 --> 00:03:43,880
‫違いがわかりますか？

43
00:03:43,880 --> 00:03:50,780
‫ひとつは銃のサブクラス､ もうひとつは銃のポインター､ そしてこのひとつが実際の銃である｡

44
00:03:50,780 --> 00:03:54,710
‫それは､ 一度クラスのインスタンスを作成したら､ そこに格納することです｡

45
00:03:54,920 --> 00:04:08,030
‫では､ シューターCPに移動して､ このプレイ開始を終了させましょう｡

46
00:04:08,030 --> 00:04:14,930
‫そして､ ここで通す議論は､ Blueprintの上に設定する銃のクラスです｡

47
00:04:14,930 --> 00:04:17,810
‫では､ これをコンパイルしてみましょう｡

48
00:04:17,810 --> 00:04:18,890
‫エラーが出る場合があります｡

49
00:04:18,890 --> 00:04:25,850
‫メッセージログをコンパイルログと一緒に開いてみると､ 案の定､ headファイルにundeclared

50
00:04:25,850 --> 00:04:31,250
‫identifierというエラーが発生しています｡

51
00:04:31,250 --> 00:04:35,690
‫ということで､ 2か所あるので一番上にクラスと言うことでやってみます｡

52
00:04:36,580 --> 00:04:39,460
‫こんな感じの銃です｡

53
00:04:39,760 --> 00:04:45,070
‫また､ 注意点として､ このように前方宣言をすることで､ 重いヘッダーファイルをあまり含めないようにして､

54
00:04:45,070 --> 00:04:47,650
‫コンパイル時間を短くすることができます｡

55
00:04:48,010 --> 00:04:49,570
‫リコンパイルして見てみましょう｡

56
00:04:49,820 --> 00:04:51,250
‫エラーはこれだけだったようだ｡

57
00:04:51,250 --> 00:04:52,730
‫これで正常にコンパイルされました｡

58
00:04:52,750 --> 00:04:55,930
‫さっそく再生を押して､ 何が起こるか見てみましょう｡

59
00:04:55,960 --> 00:04:56,410
‫退出する｡

60
00:04:56,440 --> 00:04:57,860
‫ご覧ください｡

61
00:04:57,880 --> 00:05:00,760
‫基本的にメッセージログを見たいのですが､ 開いていないんです｡

62
00:05:00,760 --> 00:05:07,770
‫では､ ウィンドウとデベロッパーツールで出力ログを見て､ ここにエラーがあるかどうかを確認してみましょう｡

63
00:05:07,780 --> 00:05:10,810
‫はい､ クラスが指定されていないため､ スポーンアクターは失敗しました｡

64
00:05:10,810 --> 00:05:14,920
‫確かに､ まだblueprintで設定してないので､ クラスは指定されてませんでした｡

65
00:05:14,920 --> 00:05:21,190
‫そこで今回は､ 銃を接続し､ キャラクター設計図のプロパティを見つけ､ 正しい銃に設定して､ それがスポーンするかどうかをテストする､

66
00:05:21,190 --> 00:05:25,660
‫という課題を出します｡

67
00:05:25,660 --> 00:05:26,740
‫動画を一時停止して､ 再生してみる｡

68
00:05:26,770 --> 00:05:27,580
‫K おかえりなさい｡

69
00:05:27,580 --> 00:05:37,210
‫では､ シューターキャラクターのBPに移動して､ ルートまたはクラスにあるべきプロパティを見つけましょう｡

70
00:05:37,210 --> 00:05:40,810
‫デフォルトは細部にまで入り込み､ 文字をアンダーシュートしています｡

71
00:05:40,810 --> 00:05:52,150
‫回転数を設定し､ 銃のクラスはドロップダウンで､ 銃をC++銃にするかどうかを選択できます｡

72
00:05:52,150 --> 00:05:54,460
‫そして､ ここで役に立つのが､ 私たちの命名規則です｡

73
00:05:54,460 --> 00:05:57,790
‫BPのアンダースコアがついているものが設計図です｡

74
00:05:57,790 --> 00:06:05,830
‫BPアンダースコアのライフルが欲しいので､ コンパイル保存を選択し､ シーンに移動して再生をクリックします｡

75
00:06:06,190 --> 00:06:11,950
‫さて､ これで銃のスポーンについてのエラーが出なくなったことを祈ります｡

76
00:06:11,980 --> 00:06:13,480
‫銃がスポーンしたはずです｡

77
00:06:13,480 --> 00:06:14,410
‫なるほど｡

78
00:06:14,410 --> 00:06:20,620
‫そして､ それを知るために､ F8と世界のアウトラインを見ることができるのです｡

79
00:06:20,710 --> 00:06:26,200
‫世界のアウトラインをもう少し大きくすると､ BPアンダースコアのライフルも検索できるようになる｡

80
00:06:26,350 --> 00:06:26,910
‫ばんざーい｡

81
00:06:26,920 --> 00:06:32,470
‫BPのアンダースコアライフルがあるのですが､ 今のところ何もないところで､ 正しく子機IDになっていません｡

82
00:06:32,470 --> 00:06:34,780
‫それは次回の講義のテーマにするつもりです｡

83
00:06:34,780 --> 00:06:36,760
‫では､ 現地でお会いしましょう｡

