はじめに
これは、
の解答解説です。チュートリアルとしても使えます。
☆敵オブジェクトとぶつかったらバトルシーンに移動する
まず、プロジェクトを開いて再生して、今の状況を確認しましょう。
・ペンギンがPlayerで、ライオンがEnemyという名前になっている?
・矢印キーでプレイヤーが動きますか?
・ライオンにぶつかる?(すり抜けない=コライダーがちゃんとついている)
HitBoxというオブジェクトが既に入っています。ここにPlayerが入ったらシーン移動が起きるようにしましょう。
IsTriggerにチェックを入れて
Playerスクリプトを開きます。
シーン移動のコードを書きましょう!
コードは、覚えなくて大丈夫!!「Unity シーン移動」とかで検索するとすぐ出てくるので、調べて書くクセをつけましょう。
最後に、Unity側の設定でやるべきことがあったのを覚えてますか?
設定で、二つのシーンを登録しましょう。
できたら保存を忘れずに!次はBattleシーンを開いてね
☆バトルシーンが開いたらすぐ「PlayerHP:100」と「EnemyHp:100」とコンソールに表示する
コンソールに数値を表示する、つまり「デバッグ」のやり方がわからない人は
「Unity デバッグ やり方」などで検索しましょう。
まずはPlayerとEnemyそれぞれのHP100を宣言します。
今回扱うHPは整数なので、int型で宣言します。
さらに、ゲーム始まって最初にだけHPは100から始まるよということを表示したいので、
デバッグを使って、それぞれ表示します。
☆☆こうげきボタンを押したら...
→相手のHP-10(さらに、EnemyHP:〇〇とコンソールに表示する)
→自分のHP-5(さらに、PlayerHP:〇〇とコンソールに表示する)
どんなコードを書くかわかりましたか?
全くわからなかったら、「Unity ボタン 押したら」とかで検索して、できるところまで書いてみましょう。
BattleScriptを開きます。
Update()の外に書きます。
AttackButton用の関数を用意して、その中に書きます。
プログラミングの引き算のやり方を覚えてましたか?
さらに、それぞれ結果がわかるようにデバッグで表示しましょう。
できたら保存して、Unityで設定します。
BattleHpManager というオブジェクトが入っているので、そこにBattleスクリプトをアタッチしましょう。
次に、Canvasの下にあるAttackButtonをクリックしてInspectorウインドウを開き、BattleHpManagerを矢印のようにアタッチしましょう。
次に、赤枠のようにして、さっき作ったAttackButton用の変数を設定します。
再生して確認しましょう!
同じ手順で、
・かいふくボタンを押したら→自分のHP+20(さらに、PlayerHP:〇〇とコンソールに表示する)
も作れます。できなかった人は、上の手順を見ながらやってみましょう。
コードはこんな感じにかけてればOK(関数名は自分でわかりやすく決められていればOK)
☆☆プレイヤーのHPが0になったら「負け」敵のHPが0になったら「勝ち」とコンソールに表示する
ヒントはif文!全く書けなかったらこれも一度調べてみてね。
if文を使った基本的なコードなので書けるように頑張ろう!
こんなコードになりましたか?Updateの中に書きましょう。
※追記:こうげきボタンの関数の中に入れるのがベストです!(毎フレーム判定する必要はないので) 一応どちらでもOK
ちなみに、UpdateとStartの違いはわかりますか?わからなかったらメンターに質問してね〜
☆☆☆アイテムボタンを押したら→プレイヤーの攻撃力が1.5倍になる
全くやり方が思い浮かばない人は、一緒に考えてみましょう。
まず、プレイヤーの攻撃力はどうやって書いていましたか?コードを振り返りましょう。
こうげきボタンを押した時、enemyHPから-10しましたね。
つまりこれがプレイヤーの攻撃力になります。
なので、PlayerPower(攻撃力)を10と宣言して
そして、アイテムボタン用の関数を用意して、アイテムボタンが押されたらplayerPowerが1.5倍になるようにすれば完成ですね!プログラミングでの掛け算の書き方を覚えてますか?わからなかったら「C# 掛け算」などで検索しましょう!
あれ?このままだとエラーが出ますね。何がおかしいかわかりますか?これがわかれば100点!
「1.5」と、上の方の変数を宣言した行に注目!
playerPowerは、int型で宣言しましたが、int型は整数を扱う型ですよね?
なのに、ここで「1.5」という小数を扱ってしまっています。
なので、型が一致しないのでエラーが出ていることがわかりますね。
では、小数の時は何を使って宣言するか覚えていますか?わからなければ検索!
まだエラーは出ます。小数には、fをつけるんでしたね
enemyHPとplayerPowerをつかって計算しています。異なる型の変数同士で一つの計算をしようとしているからです。なので、
enemyHPの方もfloatにしておきましょう。
最後に、Unity側でボタンの関連付けを忘れずに行いましょう。
おわり
以上で完成です!
ただ、このままだと、アイテムの使用制限がないのでこのままだと攻撃力を無限に1.5倍にできちゃったりと、ゲームとしては良くなかったり、HPがコンソールでしか見れなかったりするので、余裕のある人はより良いゲームに改変してみてね。
さらに、
こんな感じでPlayerHPから引かれる数(=敵の攻撃力)を書き換えると、敵の攻撃力がランダムになってよりゲーム性が増したりします!
このワークで復習できた技術
重要順
・変数、四則演算、デバッグ
・if文
・衝突判定 OnTrigger
・シーン切り替え
・Start() Update()
・Button