kuront’s blog

主にUnityでのゲーム制作やってます。

【Unity】RPG制作 その4-アイテムマネージャー作成

今回はアイテムを管理する仕組みを作っていきます。

まずはじめに、ヒエラルキー上で空のゲームオブジェクトを作成し、名前をItemManagerにします。次に新しくスクリプトを作成し、名前をItemManagerにして、ゲームオブジェクトItemManagerに貼り付けます。

f:id:kuront:20210821045237p:plain

f:id:kuront:20210821045257p:plain

f:id:kuront:20210821045325p:plain

f:id:kuront:20210821045335p:plain

f:id:kuront:20210822081113p:plain

ItemManager.csを開き以下のように編集します。


クリックで展開

ItemManagerではアイテムの所持数を管理します。所持数を保持するのにDictionary型を使用しています。列挙型のItemをキーにし、そのキーを使用することによってアイテムの所持数を取得することができます。取り敢えずDictionaryには実装しそうなアイテムを適当に突っ込んでいます。
次に個々のアイテムの情報を保持するItemData,WeaponData,ArmorDataスクリプトを新規に作成し、以下のように編集します。


クリックで展開


クリックで展開


クリックで展開

この3つのスクリプトを貼り付けたゲームオブジェクトをアイテムのデータとしてインスペクターに適当な値を入れ、プレハブにしておきます。
アイテムのデータをゲットするときはこのプレハブから情報を入手するようにしたいので、ItemManagerにItemData型の配列を宣言し、その配列に先ほど作成したプレハブを持たせておきます。

f:id:kuront:20210823155832p:plain

次回はアイテムを戦闘中に使用できるようにアイテム用のUIとそれを制御するためのスクリプトを作成していきます。

【Unity】RPG制作 その3 -プレイヤーの情報作成

今回はプレイヤーのステータスまわりを実装していく。

まずはじめに、プレイヤーの管理を行っているスクリプト"PlayerManager.cs"にプレイヤーのステータスを追加する。


追加前のスクリプト


クリックで展開

追加後のスクリプト


クリックで展開

取り敢えず使いそうなステータスを追加。Attack関数にエネミーの防御力をクリティカルかどうかを計算に入れるようにした。
次にエネミーの方にもステータスを追加する。

追加前のスクリプト


クリックで展開



追加後のスクリプト


クリックで展開

こちらもPlayerManagerと同様にAttack関数に防御力とクリティカルを計算に入れるように。

次に攻撃時に命中判定、クリティカル判定を行うようにする。
BattleManager.csを編集していきます。


変更後のスクリプト


クリックで展開

196行目CheckCritical、228CheckHitAttackでそれぞれクリティカルかどうか、命中したかどうかを判定している。
命中判定は攻撃側の命中率、受け側の回避率以外も影響するステータスがあるようにしています(微々たるものだが)。
あとはSoundManagerに回避時とクリティカル時のSEを設定する。

f:id:kuront:20210820054602p:plain

今回は以上です。

【Unity】RPG制作 その2 -バトルコマンドの作成

今回は戦闘時のコマンドのUIを実装していきたいと思います



 

・攻撃方法を敵をタップするのではなく、攻撃用のボタンを押すように変更した。

ヒエラルキーCanvasを新規作成、名前をCommandUICanvasに変更。子オブジェクトにButtonを3つ配置。テキストはそれぞれ「攻撃」「特殊」「やめる」に変更。「やめる」ボタンは、「攻撃」ボタンを押して敵を選択するときに、コマンドの選択に戻りたい時に使うボタンなので、コマンドを選択するときは非表示に、ターゲットを選択するときに表示させるようにする。「攻撃」ボタンは押したら「攻撃」ボタンを非表示にする。

見た目はこんな感じ


f:id:kuront:20210819053537p:plain

スクリプト「CommandManager.cs」を新規作成。CommandUICanvasに貼り付ける。
スクリプト「CommandManager.cs」を編集。


クリックで展開

公開したボタン用の変数にそれぞれCommandUICanvasのボタンを割り当てる.。
関数も各々作成していく。(SetBattleCommand関数、SetCommandForTargetSelect)
戦闘開始時に実行される、BattleManager.csのSetUp関数に、

commandUI.gameObject.SetActive(true);
commandUI.SetBattleCommand();

を追加し、戦闘開始時にコマンドが使えるようにする。さらに戦闘開始時には敵をタップできないように、SetUp関数内の以下の処理を削除

canAttackTap = true;

攻撃ボタンが押された時に、CommandUIManagerのSetCommandForTargetを、キャンセルボタンが押された時にCommandUIManagerの
SetBattleCommandをそ実行するように、「攻撃」ボタンと「やめる」ボタンのButtonコンポーネントのOn Click()のリストにそれぞれ関数を登録する。さらに、「攻撃」ボタン押下でBattleManage.csのCanAttackTapをtrueに、「やめる」ボタン押下でfalseになるように設定、敵をタップしたらCommandUIを非表示にする。敵のターンが終了したらサイドCommandUIを表示する。


QuestManagerのStart関数にcommandUIの非アクティブ処理を追加。敵とエンカウントしたらアクティブに、戦闘が終了したら非アクティブにする。


実装後のQuestManager.csとBattleManager.csのコードはそれぞれこんな感じです。


クリックで展開
 


クリックで展開

あとついでに、ダイアログにエネミーの名前を反映するようにしておきました。
今回は以上です。

【Unity】RPG制作 その1 -ベースの作成及び細部の修正

 Unityでモバイル向けにRPGを作ることにした。

今回も他者様の講座を参考にしてそれをベースにして開発を進めていく。

www.udemy.com

(上記の講座はセール中は大幅に価格が下がるので、もし興味があれば実際に講座を受けてからこちらのサイトを見たほうがいいかもしれません。)

 

 取り敢えず講座通りに進めて完成したゲームを、すぐに実現できそうなところから改良をすることにした。

・タイトル、探索時、戦闘時の背景及びBGM、SEの変更

・新規の敵を5体追加。現状、探索時はその5体の中からランダムに敵が出現するようにした。

・プレイヤーのステータス変更、及びステータス"SP"追加(表示だけ)。将来的に特殊技実装の予定。

・敵撃破時の演出が味気ないので、敵撃破時の演出追加。DOTweenを使って敵撃破時に敵を拡大しながら敵を消滅させるように。

 

・現状攻撃ボタン連打で一方的に攻撃できてしまうので、攻撃ボタンの連打防止処理を実装(フラグで連打阻止)

・クリア時に街に戻るボタンを押すとクリアSEがなったまま遷移してしまうので、クリア時のSEをシーン遷移時に停止するように変更

 

 

現状この状態 ↓

youtu.be

 

動画見た感じでもまだまだ修正が必要な箇所があるので次回はそのへんを直していく。

 

【Unity】GooglePlayに自作アプリ公開しました

最近Unityを使いはじめて少しづつ使い方が分かってきたのでさくっとモバイル向けにアプリを作ってみました!

play.google.com

 

タップで弾を撃って、両サイドのスコアエリアに顔文字を送り込むゲームです。難易度は少し高いかも・・・。

広告の付け方も理解できたので良かった(UE4で製作していたときは長時間かけても結局つけられなかった)。

短時間で作ったので少しボリュームが少ないですが、よければ遊んでください!

 

 

 

---------------------↓以前作ったゲーム↓-------------------------------------

play.google.com

unity使ってみた

これまでUnrealEngine4でゲーム制作をしてきたが、モバイル向けに作ろうとするとパッケージ関係がうまく行かないことが多いのでしばらくunityを使ってみることにした。

unityは全く使ったことがなかったので取り敢えずネットで参考になりそうなサイトや本を調べて参考にする。

書籍はこちらを購入した。

Amazon.co.jp: Unityの寺子屋 定番スマホゲーム開発入門 eBook : いたのくまんぼう, 大槻 有一郎, いたのくまんぼう: 本

[いたのくまんぼう, 大槻 有一郎]のUnityの寺子屋 定番スマホゲーム開発入門

 

スマホ向けにタップゲーや放置ゲー、2Dプラットフォームゲームの作り方が記述してあり、参考になった。

サイトはこちらを参考にした。

 

Unity入門【初心者為の使い方講座】【実際にゲームを作って解説】 | ゲームの作り方!

 

f:id:kuront:20210722150729p:plain

こちらのサイトは、前半の講座はunityの基本的な使い方が説明してあり、後半は実際に2Dのプラットフォームゲームを制作をしながらunityを学習できるような内容になっている。unityでゲームを制作するのに必要なスキルや知識、気をつけなければならないことを丁寧に説明してある(ボリュームもかなりある)ので、unityをこれから始める方には是非参考にしていただきたい。

上記2つで実際に製作したゲームを参考にしながら自分なりにアレンジして2Dプラットフォームゲームを作ることにした。

で取り敢えず作ってみたのがこちら。

 

youtu.be

 

色々粗末な部分も多いが取り敢えず1面分作った。敵を踏んづけた処理がうまく行ってなかったり、足場の判定がうまく取れずにジャンプできてなかったりするがそのうち直す予定。

 

次はシューティングでも作ろうかな・・・

【UE4】ゴルフゲーム製作 その2


今日もゴルフゲームの製作をすすめていく。

主に取り組むのは、

 

・ショットのタイミングゲージを作成する

・各ホールのスコアの表を作成する

ゴルフクラブの種類を増やす

 

ショットのタイミングゲージはパワーゲージの下にもう一つProgressBarを追加して、

BP_playerに持たせた変数BarShotTimingでバインドする。BarShotTimingはショットのパワーを確定した後に、タイムラインで値を変化させる。後は各々の状態をbool型の変数で管理する。ここではショットパワー判定時を表すIsCharge、ショットのタイミング判定時のIsAiming,それからパタークラブを選んでるかどうか判断するIsPatterで管理する。

パタークラブを選んでる場合は、タイミング判定を行わないようにしている(常にまっすぐ飛ぶ)。

 

f:id:kuront:20210702174335p:plain

f:id:kuront:20210702174835p:plain

ショットアクション時の処理

 

あとは実際に確定したBarShotTimingの値を使って、まっすぐ飛ぶか、角度を-1.0~+1.0ばらつかせたりの処理分けを行う。

 

f:id:kuront:20210702175623p:plain

ショットのパワーとタイミングに応じてボールを飛ばす。ちなみにこれは通常時の処理で、ラフとバンカー時はそれぞれ別で数値を決めている。



これでショットのタイミングゲージの処理が実装できた。

次はスコア表を作成する。

スコア表はウィジェットブループリントのTileViewの機能を使って実装することにした。

 

f:id:kuront:20210706200117p:plain

 

ウィジェットに2段のグリッド付きの画像を用意し、ホール数とスコアを表示するためのTileViewをそれぞれ用意し、スコアに関してはゲーム中に動的にスコア用で別で用意したウィジェットを表示させる。

 

f:id:kuront:20210706200618p:plain

TileViewにスコア用のTextだけ用意したこのウィジェットを入れる

 

これをホール終わりに表示させればスコア表は完成である。

 

 

 もうひとつ、今用意している通常ショット用のゴルフクラブと、パター用のクラブだけではゲーム的に面白くないので、高いショットを飛ばせる2番クラブを用意した。

f:id:kuront:20210706201757p:plain

2番クラブのショットシーン

これを実装するのはそんなに時間はかからなかった。2番ショット用に飛距離と高さを調整するだけである。

 

今回はここまで。