﻿1
00:00:03,990 --> 00:00:10,110
‫そこで､ fire関数を作成し､ この関数をマウスの左ボタンに関連付けることにします｡

2
00:00:10,110 --> 00:00:18,210
‫そして､ このアクションマッピングが機能していることを証明するために､ タレットバレルの先端にデバッグ用の球体を描いているのがおわかりいただけると思います｡

3
00:00:18,210 --> 00:00:21,360
‫マウスの左ボタンをクリックするたびに､ 何かが起こっている｡

4
00:00:21,720 --> 00:00:23,090
‫やあ､ お帰りなさい｡

5
00:00:23,100 --> 00:00:31,020
‫このビデオでは､ fire関数や投射物を生成するときに使用する関数を作成する方法について説明します｡

6
00:00:31,020 --> 00:00:36,090
‫そこで､ fire関数を作成し､ アクションマッピングにバインドすることにします｡

7
00:00:36,090 --> 00:00:38,370
‫さて､ これまで軸マッピングを使用してきました｡

8
00:00:38,370 --> 00:00:40,260
‫アクションマッピングも同様です｡

9
00:00:40,260 --> 00:00:41,550
‫今､ 話そう｡

10
00:00:41,550 --> 00:00:47,280
‫プロジェクト設定にあるファイアーアクションマッピングのスクリーンショットの一部です｡

11
00:00:47,280 --> 00:00:51,690
‫マウスの左ボタンがFireアクションのマッピングに割り当てられていることがわかります｡

12
00:00:51,690 --> 00:00:55,290
‫アクションマッピングは､ 軸マッピングと非常によく似ています｡

13
00:00:55,290 --> 00:00:57,720
‫キーやボタンを割り当てることができます｡

14
00:00:57,720 --> 00:01:03,420
‫そして､ 軸マッピングと同様に､ アクションマッピングにバインドできる関数が必要です｡

15
00:01:03,420 --> 00:01:07,440
‫さて､ 軸マッピングはゲームの1フレームごとに発射されます｡

16
00:01:07,440 --> 00:01:13,590
‫チック関数のようなもので､ どのボタンが押されているかで渡されるフロート値が変わる｡

17
00:01:13,590 --> 00:01:15,930
‫アクションのマッピングは若干異なります｡

18
00:01:15,960 --> 00:01:25,200
‫アクションマッピングにバインドされたコールバック関数は､ 入力パラメータを取らず､ ボタンを押すとその関数が呼び出されるだけです｡

19
00:01:25,200 --> 00:01:29,430
‫関数の内部で何が行われるかは､ 開発者である私たち次第です｡

20
00:01:29,430 --> 00:01:31,590
‫さて､ アクションマッピングはワンオフです｡

21
00:01:31,590 --> 00:01:33,030
‫毎フレーム起こるわけではありません｡

22
00:01:33,030 --> 00:01:35,790
‫ボタンを押したときに一度だけ発生します｡

23
00:01:35,790 --> 00:01:40,950
‫そのため､ ボタンを離した後にもう一度押すと､ もう一回関数が呼び出されます｡

24
00:01:40,980 --> 00:01:47,280
‫さて､ 軸のマッピングに関数を結合するとき､ アクションのマッピングにはbind axisを使い､ bind actionという関数を使いますが､

25
00:01:47,280 --> 00:01:52,650
‫これはbind axisと同じような入力を受け取ります｡

26
00:01:52,650 --> 00:01:56,400
‫アクションマッピングの名前を文字列リテラルとして受け取ります｡

27
00:01:56,430 --> 00:01:58,710
‫また､ クラスへのポインタが必要です｡

28
00:01:58,710 --> 00:02:04,470
‫この関数を使うために関数をバインドしているのですが､ もちろんコールバック関数を受け取ります｡

29
00:02:04,470 --> 00:02:17,640
‫bind axisが必要としない追加のパラメータとして､ ボタンを押したときと離したときのどちらでこの関数を呼び出すかを指定するenum定数が必要です｡

30
00:02:17,640 --> 00:02:25,350
‫そこで､ この入力パラメータには､ enum定数であるiの2つのオプションがあります｡  e. が押され､ enum定数であるi.

31
00:02:25,350 --> 00:02:25,350
‫e. をリリースしました｡

32
00:02:25,350 --> 00:02:31,110
‫つまり､ i を渡して bind アクションを呼び出すことができる｡  e. ボタンを押したときのコールバック関数をバインドしたい場合は､ i.Pressを使用し､

33
00:02:31,110 --> 00:02:36,960
‫その代わりにi.Pressを使用した場合は､ i.Pressを使用しました｡ e. ボタンを離すと､ コールバック関数が呼び出され､

34
00:02:36,960 --> 00:02:40,380
‫fire関数が実行されます｡

35
00:02:40,380 --> 00:02:42,900
‫ボタンを押すタイミングにこだわっています｡

36
00:02:42,900 --> 00:02:46,890
‫そこで､ fire関数を作って､ fireアクションのマッピングにバインドしてみましょう｡

37
00:02:46,890 --> 00:02:57,270
‫今､ 私はベーススポーンにいますが､ なぜベースポンドにいるかというと､ このファイヤー機能はタンククラスやタワークラスで使えるものだからです｡

38
00:02:57,270 --> 00:03:03,030
‫つまり､ この機能を池の底に置くと､ Tankもtowerもこの機能を受け継ぐことになります｡

39
00:03:03,030 --> 00:03:10,230
‫そして､ 戦車も塔も弾丸を発射するのですから､ その機能を継承して使えばいいのです｡

40
00:03:10,260 --> 00:03:19,500
‫さて､ 両方の子クラスでこの関数にアクセスしたいので､ rotate turretと同じように､ この関数をprotectedセクションに配置することができます｡

41
00:03:19,500 --> 00:03:26,220
‫そこで､ rotate turretの下にfireという何も入力されない関数を作り､

42
00:03:26,220 --> 00:03:30,780
‫CPPをベースにfire関数を定義していきます｡

43
00:03:30,780 --> 00:03:36,990
‫ここではCPPをベースに､ タレットの回転のすぐ下に､ fire関数を配置します｡ この関数名を完全に修飾して､

44
00:03:36,990 --> 00:03:41,430
‫関数本体を与える必要があります｡

45
00:03:41,430 --> 00:03:43,680
‫これでファイヤー機能ができたわけです｡

46
00:03:43,680 --> 00:03:47,040
‫さて､ 次のステップは､ これをアクションマッピングにバインドすることです｡

47
00:03:47,040 --> 00:03:54,720
‫ここで､ この関数をtankクラスにのみバインドします｡ なぜなら､ tankはユーザー入力を受け取る唯一のクラスだからです｡

48
00:03:54,720 --> 00:03:59,610
‫後でタワークラスのfire関数を呼び出すことになるが､ それはユーザー入力の結果ではなく､

49
00:03:59,610 --> 00:04:02,820
‫自分たちが作ったコードの結果である｡

50
00:04:02,820 --> 00:04:10,290
‫Tank CPで､ これをバインドして､ bind axisを使ったのと同じように､ プレイヤー入力コンポーネントをセットアップします｡

51
00:04:10,290 --> 00:04:12,900
‫そこで､ プレーヤー入力コンポーネントを使用することにします｡

52
00:04:12,900 --> 00:04:18,720
‫プレイヤー入力コンポーネントと関数は､ バインドアクションになりますね｡

53
00:04:18,720 --> 00:04:24,780
‫さて､ 最初の入力は文字列リテラルになります｡ これをいつものようにテキストマクロでラップします｡

54
00:04:24,780 --> 00:04:27,810
‫そして､ このアクションマッピングをファイアーと呼びます｡

55
00:04:27,960 --> 00:04:39,000
‫次のパラメータは､ ボタンを押したときと離したときのどちらでこの関数を呼び出すかを指定するenum定数です｡

56
00:04:39,000 --> 00:04:42,150
‫そして､ 私たちは､ アンダースコアを押して使用することにしています｡

57
00:04:43,170 --> 00:04:46,260
‫ボタンを押したときに関数が呼ばれるようにしたいので｡

58
00:04:46,260 --> 00:04:49,520
‫さて､ 次はユーザークラスのオブジェクトですが､ これはこうなります｡

59
00:04:49,530 --> 00:04:55,620
‫最後にコールバック関数を用意し､ 戦車の発火を表現できるようにしました｡

60
00:04:55,770 --> 00:05:00,690
‫そして､ fire関数がfireアクションのマッピングにバインドされています｡

61
00:05:00,690 --> 00:05:07,200
‫このように､ fire関数がfireアクションマッピングにバインドされていることは分かっているのですが､

62
00:05:07,200 --> 00:05:09,900
‫視覚的に確認したいことがあります｡

63
00:05:09,900 --> 00:05:14,130
‫そこでfire機能では､ デバッグ用の球体を描いてほしい｡

64
00:05:14,130 --> 00:05:20,640
‫この方法はすでに見たので､ 先に進み､ 適切と思われる値をパラメータに記入してください｡

65
00:05:20,670 --> 00:05:24,030
‫投射物のスポーンポイントの位置を使用します｡

66
00:05:24,270 --> 00:05:32,100
‫コンポーネントには､ コンポーネントの位置を取得する関数があるのをご存知でしょう｡

67
00:05:32,100 --> 00:05:33,780
‫Fベクトルを返す｡

68
00:05:33,810 --> 00:05:38,220
‫これは､ 投射物のスポーンポイントの位置を取得するために使用できるものです｡

69
00:05:38,220 --> 00:05:47,760
‫デバッグ球の描画を呼び出すときは､ 約3秒間の継続時間を使用します｡

70
00:05:47,760 --> 00:05:50,460
‫ビデオを一時停止して､ 今すぐ実行します｡

71
00:05:53,360 --> 00:05:53,550
‫なるほど｡

72
00:05:53,660 --> 00:05:56,810
‫それで､ ここバスポンドに戻ってきて､ ここバスポンドにいる｡

73
00:05:57,110 --> 00:06:00,770
‫CP ドローデバッグヘルパーを入れる｡

74
00:06:00,770 --> 00:06:03,500
‫そこで､ デバッグ球の描画にアクセスできるようにしました｡

75
00:06:03,500 --> 00:06:07,010
‫だから､ ドローデバッグヘルパーを入れろということになる｡

76
00:06:08,240 --> 00:06:12,320
‫そして､ この下のfire関数で､ デバッグ用の球を描画します｡

77
00:06:12,350 --> 00:06:18,050
‫さて､ まず最初にやりたいことは､ 弾の発射位置の取得です｡

78
00:06:18,080 --> 00:06:29,870
‫ここで､ ローカルfベクトルを作成し､ これを発射点位置と呼び､ 発射点を使って初期化することができます｡

79
00:06:32,030 --> 00:06:35,780
‫そして､ コンポーネントの位置取得を呼び出します｡

80
00:06:35,780 --> 00:06:43,850
‫これで､ 投射物のスポーンポイントの位置がわかり､ デバッグ球の描画を呼び出すときに使用できるようになりました｡

81
00:06:43,850 --> 00:06:46,130
‫そこで､ ドローデバッグスフィアを呼び出すことにする｡

82
00:06:47,450 --> 00:06:53,720
‫そして､ 最初の入力にはworldが必要で､ get world nextを使ってworldを取得できることが分かっている｡

83
00:06:53,720 --> 00:06:59,810
‫投射物のスポーンポイントとなる球体の中心が必要です｡

84
00:06:59,810 --> 00:07:04,190
‫そのため､ 2番目のパラメータとして渡すのは､ この値になります｡

85
00:07:04,190 --> 00:07:06,190
‫そして次に球体の半径が必要です｡

86
00:07:06,200 --> 00:07:08,330
‫今度は小さな球体を用意します｡

87
00:07:08,480 --> 00:07:17,690
‫半径は25F､ 分割数は12､ 色はFカラーとします｡

88
00:07:18,680 --> 00:07:21,380
‫Read Now 4つのしつこい線を描く｡

89
00:07:21,380 --> 00:07:28,910
‫セリフがいつまでも続くと困るので､ 3秒間ぶら下がるようにして､ これをfalseにします｡

90
00:07:28,940 --> 00:07:36,380
‫では､ このデバッグ球の有効期限を3秒とします｡ では､ コンパイルして､

91
00:07:36,380 --> 00:07:43,310
‫再生ボタンを押してクリックすると､ デバッグ球が表示されます｡

92
00:07:43,640 --> 00:07:53,450
‫これで､ アクションマッピングが機能していることが確認できました｡ また､ 投射物のスポーンポイントの位置も確認できました｡

93
00:07:53,450 --> 00:08:02,420
‫そのため､ 実際に投射物を生成し始めると､ デバッグ球が示すように､ 正しい位置に生成されることが分かります｡

94
00:08:02,420 --> 00:08:03,500
‫だから､ これはすごいことなんです｡

95
00:08:03,650 --> 00:08:09,470
‫このビデオでは､ fire関数を作成し､ それをfireアクションマッピングにバインドしました｡

96
00:08:09,740 --> 00:08:15,800
‫そして､ それが機能していることを証明するために､ マウスの左ボタンをクリックするたびに､ 発射体のスポーンポイントにデバッグ球を描きました｡

97
00:08:15,830 --> 00:08:21,710
‫したがって､ 発射関数があり､ 発射体のスポーンを開始する準備がほぼ整いました｡

98
00:08:21,710 --> 00:08:25,250
‫そして､ この関数もベースとなるポンクラスに配置しました｡

99
00:08:25,250 --> 00:08:27,980
‫そうすれば､ 私たちのタワーも使えるようになります｡

100
00:08:27,980 --> 00:08:32,990
‫そこで､ 次のビデオでは､ 私たちのタワーがこの機能をどのように使うかについて説明します｡

101
00:08:33,530 --> 00:08:34,460
‫また､ お会いしましょう｡

