﻿1
00:00:04,490 --> 00:00:05,690
‫こんにちは､ ようこそ｡

2
00:00:05,690 --> 00:00:14,300
‫この講義では､ レベル ブループリントではなく､ 特定のブループリント クラスに存在する関数について学習します｡

3
00:00:14,300 --> 00:00:20,120
‫これらはメンバ関数と呼ばれ､ オブジェクト指向プログラミングには絶対に欠かせないものです｡

4
00:00:20,120 --> 00:00:22,700
‫さっそく､ その仕組みを見てみましょう｡

5
00:00:23,150 --> 00:00:31,430
‫レベル ブループリントの投射物生成関数には､ インパルスの追加､ インパルスの方向の取得､ 静的メッシュ

6
00:00:31,430 --> 00:00:36,830
‫コンポーネントの取得に関連するノードが多数あります｡

7
00:00:36,920 --> 00:00:43,610
‫これらのノードはすべて､ 深さ方向のBP投射インスタンスを使用します｡

8
00:00:43,610 --> 00:00:50,690
‫このコードをすべてBPプロジェクタに取り込み､ データを扱うコードがデータそのものと共存できるようになれば､

9
00:00:50,690 --> 00:00:55,130
‫素晴らしいことだと思いませんか？

10
00:00:55,280 --> 00:00:59,300
‫まあ､ それがオブジェクト指向プログラミングの真骨頂なんですけどね｡

11
00:00:59,300 --> 00:01:07,040
‫つまり､ オブジェクト指向プログラミングとは､ 関数が操作するデータと同居していると定義することができる｡

12
00:01:07,400 --> 00:01:09,080
‫では､ その仕組みはどうなっているのでしょうか｡

13
00:01:09,080 --> 00:01:13,520
‫物事の特定のインスタンスについて､ どのように機能を作ることができるのか｡

14
00:01:13,940 --> 00:01:20,420
‫BP projectile クラスを開き､ open full blueprint editor をクリックします｡

15
00:01:20,420 --> 00:01:27,020
‫この full blueprint editor には my blueprint ペインと関数セクションがあり､

16
00:01:27,020 --> 00:01:35,810
‫ここでプラス矢印を押して BP project class に新しい関数を作成することができます｡

17
00:01:35,810 --> 00:01:41,960
‫そして､ この関数に名前をつけて､ print your nameとこのprint your nameとするのです｡

18
00:01:41,960 --> 00:01:44,150
‫機能は､ まさにその通りです｡

19
00:01:44,570 --> 00:01:52,460
‫この関数の実行を開始するノードがあるので､ その実行ピンを引き抜いてprint stringと入力することができるのがわかります｡

20
00:01:52,460 --> 00:01:53,810
‫それがプリントアウトされるわけです｡

21
00:01:53,810 --> 00:01:54,380
‫こんにちは｡

22
00:01:54,380 --> 00:01:57,200
‫この機能の名前とはちょっと違いますよね？

23
00:01:57,200 --> 00:01:59,390
‫しかし､ それはすぐにでも解決できることです｡

24
00:01:59,690 --> 00:02:04,130
‫そこで､ 今回ご紹介するのは､ メンバー関数と呼ばれるものです｡

25
00:02:04,130 --> 00:02:12,020
‫メンバー関数は､ クラスの特定のインスタンスで常に呼び出されるクラス上の関数です｡

26
00:02:12,020 --> 00:02:18,320
‫だから､ すべてのBP弾に名前を印字して呼びます､ とは言わないんですね｡

27
00:02:18,320 --> 00:02:26,720
‫BPプロジェクタの1番､ あるいは今スポーンしたBPプロジェクタに､ 呼び出したい､ 名前を印刷したい､ と言わなければならないのです｡

28
00:02:26,720 --> 00:02:38,780
‫レベル設計図に移動して､ BP発射体を生成する際に出てくる参照を取得する必要があります｡

29
00:02:39,020 --> 00:02:51,920
‫そして､ この参照から名前を印刷すると､ 自動的にターゲットという特別な入力ノードに接続されるのがわかります｡

30
00:02:51,920 --> 00:02:54,410
‫そして､ 当然ながら､ 実行ピンも接続する必要があります｡

31
00:02:54,410 --> 00:02:58,580
‫広告インパルスの後に起こるようにフックするつもりです｡

32
00:02:58,580 --> 00:03:08,750
‫しかし､ この特殊なターゲット入力ノードが面白いのは､ BP弾のところに行くと､ その印字が見えることです｡

33
00:03:08,750 --> 00:03:12,830
‫あなたの名前には､ そのような入力ノードがありません｡

34
00:03:12,830 --> 00:03:14,750
‫それで､ どうしたんですか？

35
00:03:14,990 --> 00:03:24,230
‫さて､ 暗黙のうちに､ どんなメンバ関数も現在のターゲットまたは現在のインスタンスであるパラメータを持っています｡

36
00:03:24,560 --> 00:03:32,030
‫そして､ ブループリントのイベントグラフで右クリックし､ selfと入力すると､ これを手に入れることができます｡

37
00:03:32,390 --> 00:03:38,540
‫そして､ get a reference to selfというノードがあり､ このようにselfノードを作成するだけであることがわかります｡

38
00:03:38,540 --> 00:03:46,370
‫そして､ この自己のオブジェクトの参照を使って､ この特定のオブジェクトのプロパティを手に入れることができるのです｡

39
00:03:46,370 --> 00:03:53,270
‫ですから､ もしBP弾の名前を知りたければ､ 自己参照を解除して､ get display

40
00:03:53,270 --> 00:03:57,110
‫nameと入力すればいいのです｡

41
00:03:57,110 --> 00:04:01,250
‫そして､ 表示名をprint文字列にフックすることができます｡

42
00:04:01,250 --> 00:04:09,890
‫新しい弾を発射すると､ 弾の名前が表示されます｡ 新しい弾を作るたびに､

43
00:04:10,310 --> 00:04:17,210
‫メンバ関数から参照される self が異なるため､

44
00:04:17,210 --> 00:04:23,750
‫名前も異なる弾になります｡

45
00:04:23,750 --> 00:04:35,270
‫つまり､ selfはメンバー関数内で利用可能なノードであり､ 常に使用している特定の現在のインスタンスを指すということを学んだのである｡

46
00:04:35,270 --> 00:04:40,190
‫そもそもメンバー関数に注目したのは､ レベル ブループリントのこれらのノードに起因しています｡

47
00:04:40,190 --> 00:04:48,260
‫静的メッシュを取得し､ 前方ベクトルを取得し､ これらにインパルスを追加します｡

48
00:04:48,560 --> 00:04:51,860
‫これらは､ BP投影機に住み分けをした方が良いように感じます｡

49
00:04:51,860 --> 00:04:55,310
‫ということにチャレンジしたいのです｡

50
00:04:55,310 --> 00:04:58,730
‫というわけで､ ちょっと進化したチャレンジですが､ セクションの終わりに向かっています｡

51
00:04:58,730 --> 00:05:01,730
‫そこで､ 順を追って説明します｡

52
00:05:02,120 --> 00:05:03,950
‫そこで､ 打ち上げ機能を作ることにします｡

53
00:05:04,060 --> 00:05:05,800
‫BPプロジェクターにシン

54
00:05:05,800 --> 00:05:07,810
‫そこで､ BP投影機で作成します｡

55
00:05:07,810 --> 00:05:08,890
‫そのプラスボタンに移動してください｡

56
00:05:08,890 --> 00:05:11,080
‫新しいものを追加し､ 名前をつけて､ 起動する｡

57
00:05:11,440 --> 00:05:22,090
‫次に､ レベル設計図から新しく作成した関数にノードをカットアンドペーストし､ 実行ピンとその他を接続することを確認します｡

58
00:05:22,510 --> 00:05:28,000
‫コンパイルは､ コードのスペルチェックと､ Blueprint

59
00:05:28,000 --> 00:05:36,850
‫コンパイラが予測できるエラーがないことを確認するためのものです｡

60
00:05:36,850 --> 00:05:48,580
‫左上のボタンからコンパイルを実行し､ エラーがあれば下の方にあるコンパイラ結果という小さなペインに表示されます｡

61
00:05:48,580 --> 00:05:57,250
‫コンパイルに成功しているのがわかりますが､ エラーがあればここに表示されます｡ また､ エラー箇所を示すためにノードが少し赤く表示されることもあります｡

62
00:05:57,790 --> 00:06:07,480
‫そして､ そのエラーの内容を理解し､ 学習した新しいselfノードを使ってエラーを修正してみてほしい｡

63
00:06:07,930 --> 00:06:18,130
‫そして､ プリントで行ったように､ インスタンスからドラッグして､ レベル ブループリントからその関数を呼び出す必要があります｡

64
00:06:18,130 --> 00:06:25,960
‫spawnノードから生成された新しい発射体のインスタンスをselfノードがドラッグオフして､ 発射関数を呼び出します｡

65
00:06:26,200 --> 00:06:28,360
‫ビデオを一時停止して､ 試してみてください｡

66
00:06:31,400 --> 00:06:32,000
‫なるほど｡

67
00:06:32,000 --> 00:06:32,890
‫お帰りなさい｡

68
00:06:32,900 --> 00:06:39,320
‫BP projectileに移動して､ my blueprintペインのfunctionsの横にあるプラスボタンを押し､

69
00:06:39,320 --> 00:06:51,740
‫launchと入力して関数名を付けます｡ レベル設計図に戻り､ ノードを切り出してBP projectileに移動して貼り付けます｡

70
00:06:52,010 --> 00:07:04,850
‫打ち上げからインパルスを追加するまでの実行をフックして､ コンパイルを実行すると､ スタティックメッシュまたはスタティックメッシュノードの取得でエラーが発生します｡

71
00:07:05,060 --> 00:07:10,550
‫そして､ コンパイラの結果を見ると､ 無効なターゲットを使っていると書いてある｡

72
00:07:10,700 --> 00:07:15,290
‫だから､ この入力をターゲットにするのは正しくない｡

73
00:07:15,290 --> 00:07:28,460
‫右クリックでselfと入力し､ selfへの参照を取得し､ そのselfをターゲットに取り込むことをお勧めします｡

74
00:07:28,730 --> 00:07:34,490
‫もう一度コンパイルすると､ エラーが消えて正常にコンパイルされているのがわかります｡

75
00:07:34,490 --> 00:07:46,010
‫これは､ この発射関数が呼び出されている現在の発射体から､ 静的メッシュコンポーネントを取得できるようになったからです｡

76
00:07:46,490 --> 00:07:59,930
‫レベル設計図に戻ると､ スポーンアクターから出力ピンを受け取り､ launch と入力して発射関数を呼び出すことができます｡

77
00:07:59,930 --> 00:08:06,080
‫実行ピンは自動的に接続され､ 起動関数の後には､

78
00:08:06,080 --> 00:08:18,560
‫デバッグとデモンストレーションのために､ 名前の印刷関数を接続することができます｡

79
00:08:18,590 --> 00:08:24,620
‫ただし､ 今は発射を処理するコードが発射体自体に生きています｡

80
00:08:24,620 --> 00:08:25,250
‫素晴らしい内容です｡

81
00:08:25,250 --> 00:08:30,980
‫この講義では､ オブジェクト指向プログラミングの中核となる概念の1つであるメンバ関数について学びました｡

82
00:08:30,980 --> 00:08:32,780
‫次回作でお会いしましょう｡

