カードゲームの作り方

【Unity カードゲーム】オンライン対戦機能の実装方法解説⑤ カードの攻撃処理の実装編【解説通りに作るだけ】

(2024/6/11更新)

こちらの記事は元々、「カードバトルの実装」のみ記載していましたが、
「リーダーへの攻撃処理実装」についても追記致しました。

先に実装した人

カードバトルの実装しかしてないぞ!!

って方は、こちらの内容(リーダーへの攻撃処理)の実装をお願いいたします!!

2024/6/11の午後以降にこの記事の実装をし始めた方は関係ないので、特に気にせず先に進んでくださいな!

こんにちは、みじんこと申します。

本記事では前記事から引き続き、Unityでのオンライン対戦機能の実装方法を説明します。

そちらをまだ見ていない方は、実施後にこの記事に進んで頂けると良きかと思います!

本記事では下記の流れにて、カードゲームにおけるオンライン対戦機能の実装方法を解説していきます。

※本記事では⑤の「カードの攻撃処理の実装」のみ解説していきます。

  1. 前準備とカードの作成
  2. UIの作成、カードの生成実装
  3. カードの種類の実装
  4. カードの移動とドロップ処理の実装
  5. カードの攻撃処理
    • カードバトル処理の実装
    • リーダーへの攻撃処理の実装
  6. オンライン機能の導入と実装

本記事の完成形としてはこんな感じですね。

カード同士でバトルし合って、バトルで負けた方は破壊されるようにしていきます!

あとはリーダーへ攻撃したら、

ログにその内容が出力される!

というような処理を実装していきます。

それでは今回もやっていきましょう!!

みじんこ

攻撃処理の実装じゃ!!

【実装概要】本記事で実装する内容について

さて今回のカードバトル処理の実装は、こんな流れにて実装していきます!

  1. 攻撃された時にバトルが始まる処理の実装
  2. カードバトル関数の作成
  3. 【演習】リーダーが攻撃されたことを検知する処理の実装

まずは攻撃された時にバトル処理が実行されるようにして、
そのあとに今回の肝になる「カードバトル関数」を記載してカードバトルの処理を実装!!

という流れで進めていくよ!!

最後に「リーダーが攻撃された処理」については、
演習として皆さまにやってもらうので、カードバトルの処理を理解しながら進めていってね。

では始めていこう!

手順①:攻撃された処理の実装

それではまず、攻撃されたことを検知するスクリプトを作っていこう!!

「AttackedCard」スクリプトを新規で作成して、

作れたら下記のコードを丸ごとコピペしちゃいましょう!

1-1.コードの説明

先に進む前に、ざっくりコードの内容の説明をするよ!

ここで重要になるのは「OnDrop」メソッド

気付いたひと

あれ?「OnDrop」ってなんか聞いたことあるぞ??

って人は素晴らしい!

前回解説した「DropField」スクリプトでも使ったメソッドですな!!

「DropField」は、
カードを“フィールドにドロップした時”
処理が動くようにしたけど、

今回の「AttackedCard」は、
カードを“カードの上にドロップした時“に
処理を動かすようにしていくよ!

では実際のコードを踏まえて説明をしていくと、

カードの上に別のカードがドロップされると、OnDrop関数が起動して、

↑これでマウスの下にあるカード攻撃する側のカード(attackCard)に設定。

↑これでドロップされた方のカード攻撃される側のカード(defendCard)に設定。

という処理をしているよ!!

1-2.スクリプトのアタッチ

それでは攻撃されたことを検知するスクリプトが作れたので、

こいつをカードプレハブにアタッチしちゃいましょう!!

  1. CardプレハブをOpenPrefabする
  2. AddComponentで「AttackedCard」を追加!!

これでアタッチは完了。

1-3.ゲームの実行

それはゲームを実行して、攻撃されたことを検知できるか確かめてみましょう!

2枚をフィールドに出して、、

「Slashing」を「FireSpell」にドロップ!!!

ログを見ると、「攻撃してきたカード」と「攻撃されたカード」が出力されてる!!

ってなればOKです!!

手順②:カードバトル関数の記載

それでは次に、今回のメイン「カードバトル処理」を実装していきます!

やることとしては、
GameManagerに「CardBattleメソッド」を書いて、
攻撃された時に、そのメソッドをAttackedCardから実行させる!!

という感じですね。

みじんこ

早速やっていこう!

2-1.コードの記載(GameManager)

ではまず「GameManager」スクリプトにカードバトルの処理を書きたいので、

下記コードのハイライト箇所を追記しちゃってください!!

パっと見、追記箇所が長いですが注目するべきは下記の2ヶ所だけ!!

  1. GameManagerのシングルトン化
  2. CardBattleメソッドの追記
みじんこ

それぞれざっくりと説明していきます!

【コード解説①】シングルトン化って??

めちゃくちゃざっくり一言でいうと、

シングルトン化とは、「このインスタンスはこれ1つだけだよ!!」ってすることです。

「GameManagerはこの1つだけだよ!!」とすることで、
簡単に他のスクリプトから参照出来るようにしているのです!

今回で言うと、
これでAttackedCardスクリプトから、
簡単にGameManagerのメソッドが使えるようになった!ってこと。

要はシングルトン化しておけば、

[SerializeField] GameManager gameManagerってコードに書いて、
Unity側で「GameManager」をアタッチして〜〜〜〜とかやらなくても、

どこからでも使えるようになるよ!!便利だね!!ってイメージでOKです。

【コード解説②】CardBattleメソッドについて

さてこちらが今回の肝。

カード同士のバトル処理です!!

とは言っても大した処理ではなくて、

単純に引数(CardBattleの後ろに書いてあるattackCardとかのこと)で、
攻撃側のカードと攻撃される側のカードの情報を取得して、
その情報を元にパワーを比べて、パワーが低い方のカードを破壊するのじゃあ!!!

ってだけの処理ですね。

※説明が足りなかったらコメントくださいな!

2-2.コードの記載(AttackedCard)

さて、カードバトルの処理は書けましたが、

みじんこ

バトル処理を実行するコードがないぞ!!!

ってことで、「AttackedCard」のコード
下記のハイライト行に注目して書き換えましょう。

さっきまでログ出力だったところを、CardBattleメソッドの実行にしただけですね。

※ちなみにGameManagerをシングルトン化したことで、
 GameManager.instance.〜と書けば、GameManagerメソッドが実行できるようになったよ。

2-3.ゲームの実行

それではゲームを実行していきましょう!

こんな感じに正しくバトル処理が行われていればOKです!!!

※ そもそも味方同士で戦ってるのが正しくないとか、実は手札でもバトルしてしまう!とかは、一旦気にしない方向性で。笑

手順③:リーダーが攻撃されたことを検知する処理の実装

それでは最後に、リーダーが攻撃されたことを検知するスクリプトを作っていこう!!

演習はこのあとにやってもらうので、ひとまず一緒に新規のスクリプトを作成しましょう。

カードバトルの時と同じように実装していくので、
「AttackedLeader」スクリプトを新規で作成してください!

【演習】リーダーが攻撃されたことを検知してみる

さて、ここからは演習としてやってみましょう!!

皆さんにやってもらう課題としてはこんな感じ!!

さっき作った「AttackedLeader」にコードを書いてもらって、

「FireSpell」で敵のリーダーに攻撃したら、、、

ログにパワー分のダメージが出た内容が出力される!!

って処理を実装してもらいます!

基本的にはさっきやった内容が理解出来てれば実装できるはず!!

自分で考えて実装することで力になるので、

すぐに答えは見ないで、一旦は自力で挑戦してみてみましょう(`・ω・´)

【答え合わせ】リーダーの攻撃検知

さて、みなさま演習は出来ましたかね??

ではでは答え合わせをしていきましょう。

やりたいことは、

リーダーにカードがドロップされたら、
それを検知して、ドロップしてきたカードの情報をログに出す。

ってことだよね??

なのでやることは、

「AttackedLeader」スクリプトにOnDropメソッドを書いて、
それをリーダーにアタッチすればOK!!という感じ。

ということで、「AttackedCard」へ、下記のハイライト部分に注目してを追記しちゃいましょう!

追記した内容はほぼさっきと一緒で、

OnDropメソッドを使う為に、
「UnityEngine.EventSystems」と「IDropHandler」を記載して、

OnDropメソッド内で、
ドロップしてきたカードの情報を取得して、その情報をログに出す。

ってだけですな!!

そしたらコードはこれでいいので、こいつをアタッチしましょう。

  1. EnemyLeaderを選択して、
  2. AddComponentにて、「AttckedLeader」をアタッチ!

これでゲームを実行!!

「FireSpell」で敵のリーダーに攻撃!

ログにパワー分のダメージが出た内容が出力された!

ってなってればOKです。

この演習が出来た人はしっかり内容を理解しながら進めてますね! ( ´∀`)スバラシイ!

出来なかった人も大丈夫。

ちょっとずつでも理解しながら進んでいきましょう!

それではこの攻撃処理をログではなく、ゲーム画面に反映していく必要があるのですが、

今、実装してしまうと後でちょっとやり直す手間が増えてしまうので、そこは後でやりましょう!

というわけで今回の実装はここまでです!

最後までお疲れ様でした( ´∀`)

【終わりに】カードの攻撃処理の実装

今回も最後までお疲れ様でした!!!

だんだんとカードゲームっぽい感じになってきましたね。

次回はついに「オンライン実装」に入っていきます。

とは言ってもまだ導入とちょっとした設定くらいなので、肩の力は抜いてやっていきましょう!

みじんこ

ではまた次の記事にて!!

【次の記事】

ABOUT ME
みじんこ
【名前】みじんこ(ここのブログ書いてるひと) ・大学2年の時に「ゲームが作りたいー!!」って思ったのに、ゲームの作り方を解説してるサイトがことごとく何言ってんのか分かんなくて挫折した。 ・数年な時を経て「だったら俺が完全初心者にも超わかりやすいサイトを作ってやんよ!」って事で、初めてゲームを作ろうとしてる方向けに解説記事を書いてるよ。

COMMENT

メールアドレスが公開されることはありません。