‫ねえ｡
‫お帰りなさい｡
‫これで､ ダメージを受けたときのコールバック関数がデリゲートにバインドされるように設定されました｡
‫そして最後のステップは､ 実際にそのダメージイベントを発生させることです｡
‫そして､ 弾丸が何かにぶつかったときに､ これを実行したいのです｡
‫このデリゲートをブロードキャストすれば､ ヒットしたものにダメージを与えることができるのです｡
‫そして､ ゲームプレイの静止画クラスに属する適用ダメージを使用して､ このイベントを放送するつもりです｡
‫では､ 応用ダメージ機能を見てみましょう｡
‫ダメージの適用に関するドキュメントです｡
‫つまり､ これはダメージを与えるための汎用的な機能なのです｡
‫そして､ この代表のための放送に対して何をするかは､ 私たち次第です｡
‫ここで､ ゲームプレイの静止画を含める必要があることがわかります｡ また､ 構文にはいくつかの入力パラメータがあります｡
‫これで､ 実際にパラメータの説明ができるようになりました｡
‫下にスクロールしていくと､ damaged actorは､ damaged base damageは､ ここで本当に説明的な文書を適用するための基本的なダメージであることがわかります｡
‫ありがとうございます｡
‫Epicイベントインスティゲーターは､ この損害を引き起こす原因となったコントローラーです｡
‫そして､ 例えば武器を撃ったプレイヤーも書いてある｡
‫プレーヤーと書いてあるのは､ そのコントローラーのことです｡
‫そして､ 実際に損害を与えた行為者である損害原因者がいます｡
‫爆発した手榴弾のことが書いてある｡
‫私たちの場合は､ 爆発した弾丸になります｡
‫そして最後に､ ダメージの種類を記述するクラスであるダメージタイプクラスです｡
‫さて､ 構文セクションに戻って､ これらの入力の型を見ると､ damage type classはofのサブクラスであり､
‫TW subclass ofがU class型の入力パラメータを満たすことは前に見たとおりである｡
‫さて､ apply damageを呼び出すとき､ 使用したいダメージタイプを表すUクラスを渡すことができます｡
‫では､ この入力パラメータをどのように満たすかについて､ これから説明します｡
‫つまり､ 色相ゲームプレイ静的関数､ 適用されたダメージは､ いくつかの入力パラメータを取ることになるのです｡
‫この関数を呼び出すときに､ どのように適切な値を渡すか戦略を練りましょう｡ まず､ 破損したアクターが必要なことがわかりました｡
‫さて､ ダメージを与えるといいたいところですが､ 投射型CPに戻りましょう｡
‫ここはオンヒットでやりたいので､ このログはもう必要ない｡
‫このコールバックが呼び出されると､ いくつかの入力が渡されることに注意してください｡
‫on component hit delegateがブロードキャストされると､ 他のアクターがいることがわかります｡
‫つまり､ 弾丸が当たったアクタにアクセスすることができ､ これがダメージを与えたいアクタです｡
‫これで､ 最初の入力パラメータは解決です｡
‫そのほかの俳優になるんです｡
‫次に､ ダメージ量が必要です｡ つまり､ 発射物にはダメージ変数が必要で､ これにより適用するダメージ量を知ることができます｡
‫そこで､ プロジェクタイルFXにダメージ変数を追加し､ これをfloatにするのはどうでしょう｡
‫このdamageを単純に呼び出して､ 値を初期化することができます｡ 例えば50Fのような値です｡
‫これはおそらく実験したいことなので､ Uプロパティを与えて公開し､ どこでも編集できるようにします｡
‫これで､ take damageを呼び出すときに､ ダメージ量を渡すことができるようになったわけです｡
‫次のパラメータはインスティゲータで､ これはタイプAのコントローラであることを確認しました｡
‫では､ どうやってコントローラーを手に入れるのか？
‫さて､ get owner関数で特定のコンポーネントのオーナーを取得できることを確認しました｡
‫そしてこれは､ 特定のコンポーネントを所有するアクターを返します｡ これらの投射物は動的に生成されます｡
‫つまり､ get ownerを呼び出す場合は､ ownerがセットされていることを確認する必要があります｡
‫だから､ ベースポーンに入れば｡
‫CP ここでアクターをスポーンしていますが､ Spawn Actor はスポーンされたアクターへのポインターも返すので､
‫これをローカル変数に格納することができます｡
‫例えば､ auto projectile と言って､ spawn actor から返される値を代入することができます｡
‫autoをよく知らない人は､ コンパイラがこの新しい変数に割り当てるべき型を判断できるようにするものです｡
‫その上にカーソルを置くと､ タイプAの発射体ポインタが表示されます｡ これは､ アクターのスポーン関数からサインしているものだからです｡
‫つまり､ ここに投射物ポインタを置くと､ 新たに生成された投射物にアクセスできるのと同じことです｡
‫その理由は､ そのオーナーを設定したいからです｡
‫そのオーナーが､ それを生み出したポーンに設定されていることを確認したいと思います｡
‫だから射影機と言えるのです｡
‫そして､ そのための機能として､ セットオーナーというものがあります｡
‫ポーンが弾丸を発射するたびに､ その弾丸のオーナーが設定されるようにします｡
‫そうすれば､ この先､ get owner を呼び出したときに､ その発射体を所有しているクラスのインスタンスを取得することができます｡
‫このように､ projectile DHCPでは､ get owner関数が呼び出され､ これをローカル変数に格納することができます｡
‫もう一度autoを使って､ これをmy ownerと呼び､ get ownerが返す結果に設定します｡
‫これで､ オーナーの値を格納するローカルアクターポインタができました｡
‫これで､ このアクターからインスティゲーターコントローラーにアクセスできるようになりました｡
‫さて､ その前に､ 私のオーナーがNULLでないことを確認しておくとよいでしょう｡
‫だから､ 私は私の所有者がNULLイコールNULLポインタである場合､ 私は単に返すつもりだと言うつもりです｡
‫さて､ このようにifボディに1つのステートメントがある場合､ ご存じない方のために中括弧を付けずに同じ行に配置することができます｡
‫そして､ ヌルポインターとは､ C++のキーワードで､ ポインターがヌルポインターであるかどうかを確認することができる｡
‫ですから､ もし私のオーナーがNULLであれば､ 早めに関数から戻り､ それ以上何もしないことになります｡
‫さて､ 先ほど申し上げたように､ 私のオーナーからインスティゲータ・コントローラを取得することができます｡
‫そして､ この上にカーソルを置くと､ Aコントローラのポインタが返されることがわかります｡
‫単純にautoを使い､ これをオーナーインスティゲーターと呼ぶローカル変数に格納することにします｡
‫これで､ 扇動者として何を通せばいいのかがわかったわけです｡
‫次の入力は､ damage causerで､ これは投射物にダメージを与えるアクターです｡
‫単純にこれだけになりそうです｡
‫そして､ 最後の入力パラメータであるダメージタイプが残ります｡
‫のサブクラスであることがわかりましたが､ これはつまり､ 適切な使用クラスを渡す必要があるということです｡
‫N さて､ ここからはアンリアル・エンジンのドキュメントで､ あなたのダメージタイプについて説明します｡
‫ダメージタイプは､ 特定の形態のダメージを定義して記述し､ さまざまなソースからのダメージへの対応をカスタマイズするための手段を提供することを目的としているという｡
‫さて､ ダメージのカスタマイズはしない｡
‫入力パラメータを満たすだけで良いので､ このyou damage type classを表すU classの値が必要です｡
‫さて､ C++では､ ダメージタイプのような特定のクラスのYOUクラスを取得したい場合､ static classと呼ばれる関数を呼び出すことができます｡
‫you オブジェクトクラスから継承されます｡
‫もちろん､ ここではダメージタイプを使用しているので､ ヘッダーが必要です｡
‫そして､ この静的クラス関数がUクラスポインタを返し､
‫この新しいクラスが新しいダメージタイプのC++クラスを表していることがわかります｡
‫さて､ ダメージ タイプに基づいてブループリントを作成し､ 追加データを設定するわけではないので､ 実際には variable
‫のサブクラスは必要ではありません｡
‫そこで､ この場合､ static classを使用すると､ この型を表すUクラスが返されます｡
‫そして､ これを変数に格納することができます｡ これをダメージタイプクラスと呼ぶことにします｡
‫そして､ これがダメージを与えるための最後のパラメータとして渡せるものです｡
‫これで､ ダメージの適用関数に渡すべき情報はすべて揃ったことになります｡
‫しかし､ その前に､ この関数を呼び出すことが適切かどうか､ いくつかのチェックを入れておきたいと思います｡
‫そこで､ ここでif文を作ってみることにする｡
‫まず､ other actor が null でないことを確認したい｡
‫そこで､ ここに他の俳優を配置することにしました｡
‫他のアクターがこのアクターと等しくないことを確認するために､ ここに AND を配置することにします｡
‫自分が弾丸になった場合､ 自分にダメージを与えたくないので､ 別の端を置き､ その別の役者が自分の持ち主と同等でないことを確認します｡
‫その弾が持ち主にダメージを与えるようではダメでしょう｡
‫そして､ このif文の中に入れば､ apply damageを呼び出すことが適切であることがわかるので､ そうすることができるのです｡
‫そして､ それがあなたのチャレンジになるのです｡
‫そこで､ 新しいif文では､ on hit関数でyou game play statics apply damage関数を呼び出します｡
‫つまり､ ゲームプレイの静止画のために正しいヘッダーを含める必要があり､ どの入力パラメータを渡せばいいのかがわかるということです｡
‫そこで､ ビデオを一時停止して､ 今すぐオンヒット関数でダメージを適用する関数呼び出しを追加します｡
‫なるほど｡
‫Applied Damage Documentation のページで､ インクルードが kismet
‫slash gameplay statics であることが確認できます｡
‫これを貼り付けて､ ダメージの適用を呼び出す準備が整ったわけです｡
‫だから､ ゲームプレイのスタティックはダメージを適用すると呼ぶことにしているんだ｡
‫現在では､ この開始括弧を入力するとすぐに､ 必要な入力パラメータを思い出させるポップアップが表示されるようになっています｡
‫そして､ 1人目はダメージを受けた役者で､ 他の役者になるんです｡
‫そこで､ 次はother actorと入力することにします｡
‫ダメージ量が必要なので､ projectile FXでこのダメージフロートを追加し､ 50に設定しました｡
‫だから､ 次はダメージエンドをパスするつもりです｡
‫私たちには扇動者が必要で､ 私のオーナー扇動者がいます｡
‫だから､ オーナーインスティテーターで合格するんです｡
‫次に､ ダメージの原因者です｡
‫そしてもちろん､ 投射物自体がダメージの原因となっているのです｡
‫だから､ この中で合格を目指す｡
‫そして最後に､ ダメージタイプのサブクラスが必要ですが､ Uクラスポインタがそれを満たしてくれることが分かっているので､
‫ダメージタイプクラスがあるのです｡
‫そこで､ ダメージタイプクラスでパスしてみましょう｡
‫そして､ それをもって､ 私たちは今､ ダメージを適用すると呼んでいます｡
‫このイベントを呼び出すと､ damageイベントが発生し､ on take any damageデリゲートがこれに応答してブロードキャストします｡
‫つまり､ healthコンポーネントのdamage takenが呼び出されます｡
‫だから､ ここはダメージテイクで何とかすればいいんです｡
‫まあ､ このダメージを受けて､ その分を体力から引くというのは理にかなっているのでしょうけど｡
‫その前に､ ダメージが0以下でないことを確認したいのですが｡
‫F ダメージを記録する前に､ ゼロやマイナスといった意味のない値を適用しないように､
‫こうしたチェックをすることは意味があります｡
‫ということであれば､ 単に戻るだけです｡
‫もちろん､ CPでprojectileでやったような巧妙なやり方であれば､ そこにリターンを配置することも可能です｡
‫さて､ このラインを超えるとダメージはプラスになるので､ ヘルスをとってマイナスイコールでダメージとすることができます｡
‫また､ 念のため､ ここにeuyログを置いてみてはいかがでしょうか｡
‫だから､ Yuiログログ､ temp警告テキスト､ 我々は単純にパーセントFとhealthの値を表示することができますし､ これでコンパイルすることができます｡
‫コンパイルが成功したら､ エディタに戻って出力ログを開き､ 再生ボタンを押してみましょう｡
‫では､ 投擲物が当たるかどうか見てみましょう｡
‫そして､ そこに行く｡
‫体力が50になり､ また被弾すると､ あっという間に何度も弾を打ち上げるので､
‫かなりの数の被弾イベントが発生しました｡
‫しかし､ 私たちの健康はきちんと文書化されていることがわかります｡
‫そのため､ 体力がゼロになったときの死亡時の動作を正しく実装する必要があります｡
‫しかし､ このヒットイベントが何度もスパムにならないようにすることも必要です｡
‫投射物は何かにぶつかると破壊されることが分かっているので､ ヒットイベントのスパムを防ぐには､
‫投射物を破壊するのが一番良い方法です｡
‫というわけで､ この動画はこれで最後です｡
‫ですから､ ダメージを与えた直後の投射に戻ると､ 投射を自滅させることができ､ これ以上ないほど簡単です｡
‫単にdestroy関数を呼び出すだけです｡
‫このエディターでもう1回コンパイルして､ 弾丸に当たっているところを見ましょう｡
‫弾丸が消えた｡
‫だから､ ダメージを与えたら､ 消えてしまう｡
‫もちろん､ タワーに弾丸をぶつけて､ その命中イベントが発生するかどうかもテストしています｡
‫見ての通り､ 大量の弾丸を投げることができ､ このかわいそうなタワーの体力が､
‫とてもとてもマイナスになっているのがわかると思います｡
‫まとめると､ apply damage関数を呼び出すと､ on take any damageデリゲートのブロードキャストが発生するということです｡
‫ヘルスコンポーネントにヘルスを記録し､ プロジェクタイルを破壊しました｡
‫だから､ 今はダメージケアに徹しています｡
‫私たちはまだ､ 死を引き受けていないのです｡
‫ですから､ それは今後のビデオで取り上げるもののひとつになるでしょう｡
‫また､ お会いしましょう｡