ゲーム作り

【解説通りに作るだけ】Unityのデジタルカードゲーム作り方③ 手札の生成編

 

前回でカードとフィールドの作成が完了しましたね!

※前回の記事はこちら↓

【解説通りに作るだけ】Unityのデジタルカードゲーム作り方② フィールド作成編前回はカードを作りましたが、今回はフィールドの作成をしていくよ!! 前回の記事を見てない方はそっちを見てからの方がいいよ↓ ...

 

と言うわけで、今回からは

実際にプログラムを書いて、
手札やフィールドにカードを出す

ことを実装していくよ!

 

今回の完成形としてはこんな感じ↓

 

これが出来るようになれば、
ドロー効果モンスターの召喚効果
実装出来るようになるからね。

ひとつひとつ理解しながら進んで行こう!

では行くぞ!!

 

手札生成プログラムの実装

では早速、プログラムを書いていくよ!!

と言いたいところだけど、
これからの流れについて理解してた方がやりやすいと思うので、
実装方法についてザックリ説明するよ。

 

手札の生成プログラムを作るための実装方法をザックリと書くと、

①.新しいスクリプト(プログラムのこと)の作成
②.プログラムの記入(コピペでOK)
③.GameObjectの作成
④.コードとオブジェクトの紐づけ

こんな感じの4段階で進めいていくよ!!

は??出たー専門用語。意味わかりません。もうやめます。

ってひとも大丈夫。
画像付きで超詳しく説明するので安心してね。

そんな訳でいくぞ!!

 

① 新しいスクリプトの作成

まずは新しくC#プログラムを作ろう。

と、その前に管理しやすいように、スクリプト用のフォルダを作るよ。

スクリプト用のフォルダ作成方法

①.Assetsをクリックする。

②.「+」を押して、”Folder”をクリック。

③.できたフォルダの名前を”Scripts”にする。

 

GameManagerスクリプトの作成

んで、スクリプトを作るよ。

①.さっき作った”Scripts”フォルダに入って、「+」をクリック→C#スクリプトをクリック。

②.出来たスクリプトの名前を”GameManager”にする。

※この時名前を一旦確定したりすると、コードに書かれるクラス名と、Unity上に表示されている名前に齟齬が産まれてしまう事があるので注意してね。

③.なぜか知らないけど、アイコンが歯車になればOK

 

② プログラムの記入

そしたら、今作った「GameManager」のコードを開こう。(ダブルクリックで開くよ)

コードには元から色々書かれている部分があるので、とりあえず使わない黄色の部分は削除しよう。

 

削除したら、下のコードの黄色の部分を張り付けて、同じ内容になるようにしてみよう。

 

無事貼れたら、上書き保存しよう。

 

③ GameObjectの作成

そしたらUnity側に戻って、
“CreateEmpty”でゲームオブジェクトを作るよ。

①.Hierarchyウィンドウの「+」をクリックして、”CreateEmpty”をクリック。

②.CreateEmptyで作ったやつを”GameManager”という名前に変えよう

 

④ コードとオブジェクトの紐づけ

このGameManagerに、
さっき作ったGameManagerを貼り付けしていくよ。

①.今作った、”GameManager”に対して、

②.さっき書いたプログラムの”GameManager”をドラッグして貼り付ける。

③.貼り付けると、こんな感じに表示されるはず!

 

 

そしたら下の画像のように、コードとオブジェクトを紐づけよう。

①.Hierarchyウィンドウ(画像でいう左側のウィンドウ)の”PlayerHand”をドラッグして、Inspecterウィンドウ(画像でいう右側のウィンドウ)のPlayerHandのスペースに貼り付けよう。

②.張り付けるとこんな感じに表示が変わるはず!

 

同じように今度は、カードを紐づけしよう↓

①.Card(第一回目で作ったカードプレハブ)を、InspecterウィンドウのCardPrefabのスペースに貼り付ける。

②.こんな感じに表示が変わったらOK!!

 

こうやって紐づけすることで、
コード側にPlayerHandがどこなのか、CardPrefabがどれなのかを
教えてあげれられるのだ!

 

 

そしたら実行ボタンを押そう!!

 

カードが出てきた、、!!

 

と、まあこんな感じに自分の手札にカードを一枚生成出来ましたかね??

ではでは無事手札の生成に成功したら、
次はプログラムの解説をしていくよ!!

 

コードの解説

ではそれぞれのコードの意味をざっくりと説明していくよ!!

※あくまで「初心者でもわかる」という趣旨で説明をするので、正確な表現でない場合があります。正確な意味を知りたい場合は、他のサイトでも調べてみてください。

 

[Srializedfield]とは?

ではまず、7~8行目にある、

[Serializedfield]についての説明。

 

[Serializedfield]とは、

(ものすごくざっくり言うと)
モノや場所をコードに紐付ける場所を作りますよーってこと。

これをすることによって、
Unity側にPlayerFieldをコードに紐付けするスペースが出現するよ。

 

試しにこの行を消して保存すると、
さっき紐づけしたスペースが無くなるから見てみて。

まあ、消したらまた紐づけしておいてね笑

 

GameObject,Transformとは?

次は[Serializedfield]の後に書いてある、

“GameObject” と “Transform”について

 

GameObject cardPrefab は、

“cardPrefab”というモノがあるよ~ってこと。

 

Transform playerHand は、

“playerHand”という場所があるよ~ってこと。

 

要はGameObject(もしくはTransform)の次に書かれるものが、
モノなのか場所なのかを区別してる。って事だね。

 

Startメソッドとは?

次は10〜14行目にある、

void Start() { // 手札を1枚配る(自分) Instantiate(cardPrefab, playerHand); }

について説明するよ。

 

void Start() {} は、
Start関数とか、Startメソッドと呼ばれるもので、
ゲームが実行されると一番最初に動くプログラムのこと

「関数とか、メソッドってなんじゃい!!」ってレベルの人は、コメントに書いてね。

どのレベルの人が読んでくれてるのかわからないので、コメントによってはそのレベルに合わせて書いてくので!

 

コメントアウト( // )とは?

12行目にある、

// 手札を1枚配る(自分)

についての説明。

 

これはコメント行と言って、プログラム上でも
” // “と書くと、それ以降の文字はプログラムとして読みませんよ~
っていう便利機能。

わかったこととか、気付いた事を書いておくと、後で何か気づくきっかけになっていいと思うよ。

 

instantiateとは?

では今回一番大事なところ!

Instantiate(cardPrefab, playerHand);

についての説明をするよー!

 

これは Instantiate(モノ,場所) という書き方をする事によって、
モノ(この場合では”cardPrefab”)を
場所(この場合では”playerHand”)に出す。

というプログラム。

今回でいうと、
PlayerHandにカードを一枚出すということなので、
ドロー効果みたいなものだね。

 

ちなみに、

Instantiate(CardPrefab,PlayerField)

だと、自分のフィールドにカードを出す。
って事になるので、召喚効果みたいなものになるよ。

 

以上、そんな感じのプログラムになってます!

めっちゃ簡単!!!

プログラムの追加

では以上を踏まえて、下の画像の状態をプログラムで実装してみよう!!

これが出来れば、今回のコードについては完全に理解できている!と言えるのでやってみよう。

ヒントを言うと、

①.既に手札にカードを1枚出すことは出来ているので、それを5回繰り返せばいい。
②.自分のフィールド(playerField)と敵のフィールド(enemyField)については、まだUnity側とプログラム側で紐づいていないので、紐づけが必要

という感じ。

それを踏まえてまずは自力でやってみよう!!

 

答え合わせ

黄色になってる行が今回変更した行なので、そこを確認してみて!

 

解答例としてはこんな感じ↓

 

ちなみにStart内のコードは、for文(繰り返し処理のこと)を使って以下の様に書いてもやってることは同じ。

どちらかといえばこっちの方がスッキリしてて良いかもね。

 

そしたら最後にコードと紐づけするのを忘れずに!!

以上、完成!!!

やり方はわかったかな??

まだ細かいところまではわかる必要はないけど、ざっくりでいいからコードの意味を理解しながら進んでいこうね!

 

カードの生成方法 まとめ

今回から実際にプログラムを書いていったけど、分かったかな、、?

 

もし分かりづらい部分があれば「~の部分がわからない」だとか、

逆に分かりやすかったら「分かりやすかったよ!」などコメントください。

書いてる側の私としては、
私の記事を読んで、実践してくれているあなたのプログラミングについてのレベルが分かりません。

でもせっかく読んでくれているのだから、分かりやすく理解して欲しいんです。

感想でも、ご意見でも構いません。

コメント待ってます。

 

そんな感じ!終わりっ!!

次の記事↓

【解説通りに作るだけ】デジタルカードゲームの作り方④ カードの動かし方編 前回の解説で手札やフィールドにカード生成することが出来るようになりましたね! 見てない人はこちら参照↓ http:/...

前の記事↓

【解説通りに作るだけ】Unityのデジタルカードゲーム作り方② フィールド作成編前回はカードを作りましたが、今回はフィールドの作成をしていくよ!! 前回の記事を見てない方はそっちを見てからの方がいいよ↓ ...

 

 

【カードゲームの関連記事とか】

【Unity】クリック時に処理を起こす方法【コピペで完成】 ってこと、あるよね。 実際に見せるとこんな感じ↓ 実際にやってみると超簡単だ...
Unity初心者がいきなりカードゲームを作るのは無理??【答え:余裕です】 初心者だけど、カードゲームを作ってみたい!! って思って、色々調べてみると って気持ちになっちゃうよね。 ...
Unityの初心者向けのチュートリアルすら難しくて心がめげた話【ゲーム制作 2日目】 昨日は Unityって神?? 何も知らない初心者がカードゲームアプリを作ろうとした結果www とか言ったけど前言撤回、...

 

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

POSTED COMMENT

  1. じろ より:

    解説わかりやすいと思います!
    BladeRondoというカードゲームをデジタルで再現したくて始めました。
    次回の解説を楽しみに待っています(^▽^)

    • みじんこ より:

      >じろさん
      コメントありがとうございます。
      解説が伝わってるようで良かったです!
      BladeRondoについては初めて知りましたが、めっちゃイラストが綺麗なカードゲームですね!楽しそう笑( ´∀`)
      続きの記事もそろそろ頑張ります。。笑

  2. 紅白パンダ より:

    一つ一つの作業に画像があるので、分かりやすいです。
    まだ初心者ですがいつかは、創作カードゲームをアプリ化したいなと思っています。
    次の記事も楽しみにしています。無理せずに頑張ってください。

    • みじんこ より:

      >紅白パンダさん
      コメントありがとうございます。
      やっぱり画像は大事なんですね!
      今後の記事の書き方の参考にしますね、ありがとうございます
      私もまだ始めて半年くらいの初心者なので、一緒に勉強しながらゲームを作っていきましょうね!

  3. youuuu より:

    フィールドと手札に生成したときにカードが一つの場所に重なってしまします。どうしたらいいでしょうか?

COMMENT

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