【初心者向けテスト】コマンドバトル【解説・チュートリアル】

##はじめに
これは、

https://qiita.com/miomm/items/6fa445109169f5b0adf6

の解答解説です。チュートリアルとしても使えます。

####☆敵オブジェクトとぶつかったらバトルシーンに移動する

まず、プロジェクトを開いて再生して、今の状況を確認しましょう。
・ペンギンがPlayerで、ライオンがEnemyという名前になっている？
・矢印キーでプレイヤーが動きますか？
・ライオンにぶつかる？（すり抜けない＝コライダーがちゃんとついている）

HitBoxというオブジェクトが既に入っています。ここにPlayerが入ったらシーン移動が起きるようにしましょう。
IsTriggerにチェックを入れて
![スクリーンショット 2021-11-23 15.30.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/722227/54f182cd-33f7-4890-87a5-19fdb5367172.png)


Playerスクリプトを開きます。
シーン移動のコードを書きましょう！
**コードは、覚えなくて大丈夫！！「Unity シーン移動」とかで検索するとすぐ出てくるので、調べて書くクセをつけましょう。**
![スクリーンショット 2021-11-23 15.31.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/722227/d714b160-ae4a-4a49-bf09-9f797e0941e0.png)


![スクリーンショット 2021-11-23 15.32.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/722227/b81c991d-a2d6-5507-4f3b-f4713bc48647.png)

最後に、Unity側の設定でやるべきことがあったのを覚えてますか？
![スクリーンショット 2021-11-23 15.36.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/722227/6045aa16-2110-dbba-3247-1b379d7a10de.png)
![スクリーンショット 2021-11-23 15.36.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/722227/428ae188-2464-a196-8f17-2fc8f261245c.png)

設定で、二つのシーンを登録しましょう。

できたら保存を忘れずに！次はBattleシーンを開いてね

####☆バトルシーンが開いたらすぐ「PlayerHP:100」と「EnemyHp:100」とコンソールに表示する
コンソールに数値を表示する、つまり「デバッグ」のやり方がわからない人は
**「Unity デバッグ やり方」などで検索しましょう。**

まずはPlayerとEnemyそれぞれのHP100を宣言します。
![スクリーンショット 2021-11-23 15.43.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/722227/cf4e9154-3a43-60b7-c010-e4a72cf01f2b.png)

今回扱うHPは整数なので、**int型**で宣言します。
さらに、ゲーム始まって最初にだけHPは100から始まるよということを表示したいので、
**デバッグ**を使って、それぞれ表示します。


####☆☆こうげきボタンを押したら...
　　→相手のHP-10（さらに、EnemyHP:〇〇とコンソールに表示する）
　　→自分のHP-5（さらに、PlayerHP:〇〇とコンソールに表示する）

どんなコードを書くかわかりましたか？
**全くわからなかったら、「Unity ボタン 押したら」とかで検索して、できるところまで書いてみましょう。**

BattleScriptを開きます。
Update()の外に書きます。

![スクリーンショット 2021-11-23 15.51.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/722227/7ab238ab-2451-3752-ba94-dea93d34741b.png)

AttackButton用の関数を用意して、その中に書きます。
プログラミングの引き算のやり方を覚えてましたか？
さらに、それぞれ結果がわかるようにデバッグで表示しましょう。

できたら保存して、Unityで設定します。
**BattleHpManager** というオブジェクトが入っているので、そこにBattleスクリプトをアタッチしましょう。
![スクリーンショット 2021-11-23 15.54.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/722227/7aa86ef0-10cb-83f6-4957-463879d84ccb.png)

次に、Canvasの下にある**AttackButton**をクリックしてInspectorウインドウを開き、BattleHpManagerを矢印のようにアタッチしましょう。
![スクリーンショット 2021-11-23 15.56.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/722227/5f892c46-1148-4c18-8f76-c76905e1a695.png)

次に、赤枠のようにして、さっき作ったAttackButton用の変数を設定します。
![スクリーンショット 2021-11-23 16.00.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/722227/85ab8508-2da2-da35-fedd-65e2b9cb2b2a.png)

再生して確認しましょう！
同じ手順で、
#####・かいふくボタンを押したら→自分のHP+20（さらに、PlayerHP:〇〇とコンソールに表示する）
も作れます。できなかった人は、上の手順を見ながらやってみましょう。


コードはこんな感じにかけてればOK（関数名は自分でわかりやすく決められていればOK）
![スクリーンショット 2021-11-23 16.04.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/722227/faa865b1-0b7f-47e4-f308-7e47b53ce476.png)

####☆☆プレイヤーのHPが0になったら「負け」敵のHPが0になったら「勝ち」とコンソールに表示する
ヒントは**if文**！全く書けなかったらこれも一度調べてみてね。
if文を使った基本的なコードなので書けるように頑張ろう！

![スクリーンショット 2021-11-23 16.07.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/722227/0781877e-4705-a334-cf9b-c57a77c642fe.png)
こんなコードになりましたか？Updateの中に書きましょう。
**※追記：こうげきボタンの関数の中に入れるのがベストです！（毎フレーム判定する必要はないので）**　一応どちらでもOK
ちなみに、UpdateとStartの違いはわかりますか？わからなかったらメンターに質問してね〜


####☆☆☆アイテムボタンを押したら→プレイヤーの攻撃力が1.5倍になる
全くやり方が思い浮かばない人は、一緒に考えてみましょう。
まず、プレイヤーの攻撃力はどうやって書いていましたか？コードを振り返りましょう。
こうげきボタンを押した時、enemyHPから-10しましたね。
![スクリーンショット 2021-11-23 16.13.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/722227/8c8c6bed-d1dd-24d4-1f19-1da5557afd4d.png)
![名称未設定2.001.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/722227/09450790-ed23-836b-30d1-bc54468647a8.jpeg)

つまりこれがプレイヤーの攻撃力になります。
なので、PlayerPower（攻撃力）を10と宣言して
![スクリーンショット 2021-11-23 16.24.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/722227/e4f2fafe-5450-5db9-102a-f7416f9467cd.png)

ここに変数で置き換えます。
![スクリーンショット 2021-11-23 16.24.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/722227/2c9a8e05-990f-cf95-9743-d382a957a66a.png)

そして、アイテムボタン用の関数を用意して、アイテムボタンが押されたらplayerPowerが1.5倍になるようにすれば完成ですね！プログラミングでの掛け算の書き方を覚えてますか？わからなかったら「C# 掛け算」などで検索しましょう！

![スクリーンショット 2021-11-23 16.30.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/722227/a14042f3-6757-531f-6dc6-d4a6988e0582.png)


あれ？このままだとエラーが出ますね。何がおかしいかわかりますか？これがわかれば100点！




「1.5」と、上の方の変数を宣言した行に注目！
**playerPower**は、**int型**で宣言しましたが、int型は整数を扱う型ですよね？
なのに、ここで「1.5」という小数を扱ってしまっています。
なので、型が一致しないのでエラーが出ていることがわかりますね。

では、小数の時は何を使って宣言するか覚えていますか？わからなければ検索！





floatですね！書き換えましょう
![スクリーンショット 2021-11-23 16.33.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/722227/c19b88f2-bf8c-f5a5-c2d0-af8649a4b3ea.png)

まだエラーは出ます。小数には、fをつけるんでしたね

![スクリーンショット 2021-11-23 16.34.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/722227/554461e4-d355-73ba-0540-00ded2f96899.png)

まだエラーが出るのですが、なぜかわかりますか？
![スクリーンショット 2021-11-23 16.34.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/722227/a494d78e-5809-f251-b6ef-cf3cbd5c08de.png)


enemyHPとplayerPowerをつかって計算しています。異なる型の変数同士で一つの計算をしようとしているからです。なので、

![スクリーンショット 2021-11-23 16.34.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/722227/1f2a9daa-0008-d9c7-2725-72427c015f28.png)

enemyHPの方もfloatにしておきましょう。
最後に、Unity側でボタンの関連付けを忘れずに行いましょう。

###おわり
以上で完成です！


ただ、このままだと、アイテムの使用制限がないのでこのままだと攻撃力を無限に1.5倍にできちゃったりと、ゲームとしては良くなかったり、HPがコンソールでしか見れなかったりするので、余裕のある人はより良いゲームに改変してみてね。


さらに、
![スクリーンショット 2021-11-23 16.42.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/722227/cb366d66-2bb7-1a5b-cd46-c76d78e55b9e.png)
こんな感じでPlayerHPから引かれる数（＝敵の攻撃力）を書き換えると、敵の攻撃力がランダムになってよりゲーム性が増したりします！


##このワークで復習できた技術
重要順
・変数、四則演算、デバッグ
・if文
・衝突判定 OnTrigger
・シーン切り替え
・Start() Update()
・Button