﻿1
00:00:04,610 --> 00:00:05,450
‫こんにちは､ ようこそ｡

2
00:00:05,450 --> 00:00:13,730
‫この講義では､ 健康システムをアニメーション設計図に接続し､ このキャラクターが死ぬまで撮影できるようにします｡

3
00:00:13,730 --> 00:00:15,680
‫では､ その仕組みに飛び込んでみましょう｡

4
00:00:16,520 --> 00:00:22,820
‫そこで､ アニメーション ブループリントのこのブール値を､ ゲームプレイから自動的に設定するようにします｡

5
00:00:23,090 --> 00:00:29,300
‫イベントグラフを表示して､ これが現在どのように動作しているかを見てみると､ このような他のプロパティ､

6
00:00:29,300 --> 00:00:38,480
‫たとえば､ 速度の取得､ アクティブの取得､ 変形､ ポーンに移動して､ アニメーションを更新するたびに取得関数を実行していることがわかります｡

7
00:00:38,750 --> 00:00:45,180
‫そこで､ このモデルに沿って､ プレーヤーが死んだかどうかを取得することにします｡

8
00:00:45,200 --> 00:00:52,400
‫そのためには､ C++から何らかの機能､ 呼び出し可能な関数を公開する必要があります｡

9
00:00:52,520 --> 00:00:57,140
‫では､ C++に移動して､ 何があるか見てみましょう｡

10
00:00:57,140 --> 00:01:02,540
‫だから､ パブリックな関数を作ることもできるのですが､ それでは必ずしもアクセスできるようにはならないのです｡

11
00:01:03,050 --> 00:01:11,030
‫アクセシビリティを実現するためには､ ブループリントを可視化し､ ヘッダツールシステムを展開するU関数が必要です｡

12
00:01:11,030 --> 00:01:15,080
‫ただ､ you機能として持つだけでなく､ もう一歩踏み込まなければならない｡

13
00:01:15,080 --> 00:01:20,150
‫そこで､ まずyou関数マクロから始めますが､ これをブループリントで呼び出せるようにします｡

14
00:01:20,150 --> 00:01:23,180
‫ということで､ ブループリントのcallableを使うという選択肢です｡

15
00:01:23,990 --> 00:01:30,170
‫しかし､ Blueprintをオーバーライドするというか､ Blueprint callableであることを示唆する別のオプションがあり､

16
00:01:30,170 --> 00:01:32,460
‫それはblueprint pureです｡

17
00:01:32,480 --> 00:01:36,830
‫さて､ blueprint pureとBlueprint callableの違いをちょっとだけ見てみましょう｡

18
00:01:36,830 --> 00:01:43,430
‫しかし､ Blueprint Pureを使用する場合は､ Blueprint Callableと同じことを行っていること､ そしてそれ以上のことを行っていることを知っておいてください｡

19
00:01:43,430 --> 00:01:45,650
‫つまり､ Blueprint callableより少し多くのことをやっているわけです｡

20
00:01:46,070 --> 00:01:51,410
‫そして､ このキャラクターが死んでいるかどうかをブール値で返す関数が欲しいのです｡

21
00:01:52,290 --> 00:01:54,440
‫それは私たちが知っておくと便利そうですね｡

22
00:01:54,450 --> 00:01:58,740
‫そして最後に､ これをコンサートメンバー関数にしたいのです｡

23
00:01:58,770 --> 00:02:00,810
‫さて､ なぜコンサートにしたいのでしょうか？

24
00:02:00,810 --> 00:02:08,040
‫なぜなら､ この関数を呼び出しても､ シューターの状態を文字に変えることは期待できないからです｡

25
00:02:08,040 --> 00:02:12,030
‫だから､ これはコンサート機能であるべきだと断言できる｡

26
00:02:12,150 --> 00:02:19,800
‫実際､ コンサートとブループリント ピュアはよく一緒に行われます｡ ブループリント ピュアは､ 任意のブループリントに移動して､

27
00:02:19,800 --> 00:02:24,330
‫いくつかのピュアノードを見ることができることを意味します｡

28
00:02:24,330 --> 00:02:26,130
‫こいつが変身するんだ

29
00:02:26,130 --> 00:02:27,030
‫それは､ ピュアノードです｡

30
00:02:27,030 --> 00:02:30,720
‫Get velocityはpure node set speedはpure nodeではありません｡

31
00:02:30,720 --> 00:02:33,330
‫これらを結びつけているのは何か､ おわかりになりますか？

32
00:02:33,330 --> 00:02:37,380
‫これのどこがピュアでなくて､ こっちがピュアなのか｡

33
00:02:37,410 --> 00:02:40,800
‫まあ､ 一般的に言えば､ 処刑台があるということですね｡

34
00:02:40,800 --> 00:02:44,970
‫ピュアノードとは､ 実行ピンを持たないノードのことです｡

35
00:02:44,970 --> 00:02:54,210
‫また､ 通常､ 呼び出したものの結果のみに影響を与えるようなものは､ 実行ピンがないと言ってよいでしょう｡

36
00:02:54,270 --> 00:03:01,620
‫基本的には､ この関数を何度呼び出しても､ 常に同じ結果が出力されることを意味します｡

37
00:03:01,620 --> 00:03:05,160
‫プログラムには必ず同じ効果があるんです｡

38
00:03:05,160 --> 00:03:06,720
‫純粋な機能としてです｡

39
00:03:06,720 --> 00:03:09,240
‫呼び出されても何も変わりません｡

40
00:03:09,240 --> 00:03:14,670
‫つまり､ constantと同じようなものですが､ より強力なのは､ シューターキャラクターのここだけは何も変えないということだけでなく､

41
00:03:14,670 --> 00:03:22,020
‫グローバルな状態､ どこも変えないということだからです｡

42
00:03:22,020 --> 00:03:22,890
‫フルストップ

43
00:03:22,890 --> 00:03:28,980
‫唯一のインプット､ 唯一の効果は､ それが生み出すアウトプットにあるのです｡

44
00:03:29,580 --> 00:03:32,340
‫だから､ この設計図をピュアにすることにしたんです｡

45
00:03:32,340 --> 00:03:37,170
‫実行ピンの必要性がなくなるので､ ブループリントではよりすっきりします｡

46
00:03:37,170 --> 00:03:44,340
‫また､ この関数を呼び出すときに､ ゲームの状態に何の変化も与えていないことを表現しているだけです｡

47
00:03:44,520 --> 00:03:48,660
‫では､ さっそくこのための実装を作成してみましょう｡

48
00:03:48,660 --> 00:03:54,180
‫実は､ 実装はチャレンジとして皆さんにお任せすることにして､ アニメーションのブループリントのアニメグラフ､

49
00:03:54,180 --> 00:04:00,060
‫すみません､ イベントグラフにこれをフックアップして行きます｡

50
00:04:00,210 --> 00:04:03,810
‫そこで､ ここに新しいセットを用意することで､ これを実現します｡

51
00:04:03,810 --> 00:04:12,720
‫最後に is dead というブーリアン変数をセットして､

52
00:04:12,720 --> 00:04:18,660
‫ポーンの持ち主を取得します｡

53
00:04:18,660 --> 00:04:31,650
‫なぜなら､ この新しい関数は実際にC++レベルに存在するからです｡

54
00:04:31,650 --> 00:04:33,510
‫というわけで､ キャストを進めていきます｡

55
00:04:33,510 --> 00:04:36,930
‫キャストに成功すれば､ is deadプロパティを設定することになる｡

56
00:04:37,110 --> 00:04:43,650
‫また､ リダイレクトノードをいくつか追加して､ ブループリントの見た目を少し良くしてみましょう｡

57
00:04:44,070 --> 00:04:47,610
‫そして､ このシューターキャラクターのリファレンスを使って､ 何をしたいかというと｡

58
00:04:47,610 --> 00:04:52,980
‫シューターキャラクターにキャストしたので､ this is deadプロパティを持つべきことがわかります｡

59
00:04:52,980 --> 00:04:54,900
‫だから､ それができるはずなんです｡

60
00:04:55,080 --> 00:05:00,180
‫コンパイルして動作するようになったら､ このis deadプロパティを取得してここに設定します｡

61
00:05:01,080 --> 00:05:04,860
‫これは､ 私たちが死んでいるかどうかを計算するあなたの挑戦の時です｡

62
00:05:04,860 --> 00:05:08,220
‫そのため､ is dead関数から正しいブール値を返します｡

63
00:05:08,220 --> 00:05:09,180
‫それが最初の一歩です｡

64
00:05:09,180 --> 00:05:15,750
‫そのために､ health変数で不等式を使い､ 我々の変数をフックアップするとよいでしょう｡

65
00:05:15,750 --> 00:05:20,310
‫アニメーションの設計図でdead is deadという変数があるのですが､ それをやるにはギリギリでした｡

66
00:05:20,310 --> 00:05:23,490
‫ただ､ それを実現するためには､ 基本的にコンパイルが必要だったんです｡

67
00:05:23,490 --> 00:05:26,280
‫ビデオを一時停止して､ それを解決してください｡

68
00:05:27,520 --> 00:05:27,790
‫なるほど｡

69
00:05:27,790 --> 00:05:28,340
‫お帰りなさい｡

70
00:05:28,360 --> 00:05:31,840
‫では､ まずコードに目を向けてみましょう｡

71
00:05:31,840 --> 00:05:36,730
‫つまり､ これはかなり単純に､ ブーリアンを返す式を返すということです｡

72
00:05:36,730 --> 00:05:43,450
‫つまり､ 健康状態が0以下であれば､ 私たちは本当に死んでいるのでしょうか？

73
00:05:43,510 --> 00:05:47,710
‫それくらいシンプルな機能表現なのです｡

74
00:05:47,710 --> 00:05:49,990
‫では､ さっそくそれを作ってみましょう｡

75
00:05:50,680 --> 00:05:55,600
‫そして､ それがコンパイルされたら､ Unrealに移動して､ それを接続することができます｡

76
00:05:55,600 --> 00:06:02,020
‫シューターとしてキャラクターをドラッグすると､ ノードができ､ シューターキャラクターの参照ができるので､

77
00:06:02,020 --> 00:06:09,550
‫is deadを実行すると､ このis dead関数ができ､ 純粋なので実行ピンがないことがわかります｡

78
00:06:09,580 --> 00:06:15,010
‫そして､ このブール値を変数 "is dead "に結びつけます｡

79
00:06:15,130 --> 00:06:21,340
‫そして今､ プレイを進めると､ 実はそのキャラクターを世界で殺せるはずなんです｡

80
00:06:21,340 --> 00:06:24,190
‫体力がゼロになるまで撃ちまくる｡

81
00:06:24,190 --> 00:06:25,300
‫そして､ そこにあるのは

82
00:06:25,300 --> 00:06:28,780
‫アニメで見事に抹殺されましたね｡

