MENU

【Unity】最強のゲームクリエイターに俺はなる | ステート駆動システムをUpdate関数で実装しよう!

どもぉぉぉ~~~原神のフォンテーヌが楽しくてうれしいFORM_07ですよい。

 

水中とかえぐすんぎ。

 

 

さて、前回↓まででUI関連の作業は一端オワリということでしたね!

 

【Unity】最強のゲームクリエイターに俺はなる | キャラクター画面を作る! - FORM_07’s blog

 

 

今回からはサフィアちゃんを特訓させてアクションの種類を増やしていきたいと思います!

 

 

まだどうやって実装するかも、スプライトもなにもかも準備ができていない。。。

 

 

 

ま、手ぇ動かしてりゃなんとかなるのよ。

 

 

とりまStateをいい感じに増やしといた。

 

もっと増える予定

 

やっぱりPlayerの状態によって出せる攻撃を変えたいからね。

 

 

それに合わせて今までのコードをちょっと変える。

 

 

・・・・・・・・(。_。)カタカタ

 

 

変えた。

 

特筆するまでもない変更なのなので省略(State変更処理をいじっただけです)。

 

 

 

で、攻撃関数の処理をStateに応じて変えたいから、、、

 

 

これでいいのか

 

こうで、、、

 

 

一端ね

 

こう。

 

 

うーーーーん、これだと1撃目のあとにどれだけ時間がたっても次の攻撃が2撃目になっちゃうな。

 

 

 

うーんと。。。Update関数で1秒経過したらコンボが切れるようにして、、、

 

 

下の2行ね


それぞれの攻撃用関数で継続時間とコンボ判定をリセットすればオッケーかな?

 

 

 

 

うまくいったかな。

 

 

 

っていうかdeltaTimeの説明ってしたっけ。

 

簡単にいうと、前のフレームからの経過時間ね。

 

 

 

 

・・・・・・・・・・・・・・(゚◇゚)

 

 

 

まって?

 

 

な、なに・・・・

 

こんな書き方できるの?

 

PlayerInputコンポーネントから現在のInputActionsのマップを参照できるのは知ってたけど、、、

 

 

["アクション名"]って書けばそのマップの中から指定したアクションを参照できる・・・・だと・・・・!?

 

 

Unityすげぇぇぇ・・

 

 

でもこれState駆動のシステムとか根本から変えないとな。。。(-_- )

 

がんばるか。

 

 

・・・・・・カタカタカタカタ( ^。^)

 

 

・・・・・・・・・カタカタカタカタカタカタ(・_・)

 

 

 

・・・・・・・・・・・・カタカタカタカタカタカタカタカタ(?_?)

 

 

 

ぐわぁぁぁぁぁぁああい

 

できたぞぉぉおおおいぃぃぃぃい

 

 

(^u^;)ハァハァゼェゼェ…

 

 

アップデート関数でステートを駆動させる仕組みにしました。

 

普通そうなのかも(?)

 

これを全部のステート作った。

 

さらに、システムが大きく変わったから、今までのコードも結構がっつり変えちゃってます。

 

 

いやーーー・・・・長かった。

 

慣れてない作業をするのってなんでこんなに時間掛かるんだ いや慣れてないからか。。。

 

 

ハハハ・・・

 

 

この大工事の恩恵として一番でかかったのは、ステート駆動を全部まとめて書けたことかな。

 

 

ゲームの動作自体は何も変わらないんだけどね、、、大事よ、、、大事。。。

 

 

 

あと、新たな発見。

 

 

Unityごいす

 

PlayerInput.currentActionMap[action].WasReleasedThisFrame()

 

これでActionが終了したかどうかを判定できる。

 

Unityホント便利。

 

 

 

さて、これはあくまで準備段階。

 

スプライトを用意しないとナ。。。

 

 

(;。;)

 

 

と、とりあえず今回はここまでにしよう。。。

 

 

次回からはスプライトも用意してちゃんと見た目に変化をつけていこう!

 

form-07.hatenablog.com

【Unity】最強のゲームクリエイターに俺はなる | キャラクター画面を作る!

ども!「トランスフォーマー ビースト覚醒」が面白くてうれしかったFORM_07です!

 

 

っていうかガーディアンズオブギャラクシーの影響か、最近の映画の音楽の使われ方とか映画の明るさ(?)とかが自分好みになってる気がする。

 

 

そういうの好き。もっとやれ。

 

 

 

さて、前回↓はポーズ画面をサクッとつくりましたね。

 

【Unity】最強のゲームクリエイターに俺はなる | ポーズ画面作成! - FORM_07’s blog

 

今回はさらにポーズ画面に手を加えていきたいと思います!

 

 

まずは・・・

 

 

Characterボタンを押したときにこんなかんじ↓になるようにいしたい。

 

 

この色もキャラ毎に変更できるようにさせたい・・・それは当分後か

 

ってことでコードをカキカキしていくぅ。

 

 

裏でちょっと変更することあるけど、コードを見やすくしたりしてるだけなので割愛

 

Characterボタンが押されたときに、ステートをmenu_characterに切り替えてパネルをactiveにしてるだけです。

 

 

Escキーを押したときに全部閉じるようにしたいから、、、

 

 

PlayerControllerクラス

 

こんなかんじ↑にスタートによってEscキーが押されたときの処理を変える。

 

 

(しゃがみを解除させてるのは、しゃがみの実装方法上そうしないとしゃがみ中にtimeScaleを0にして1に戻すとしゃがみ状態が解除されないからです。)

 

 

文字のフォント変えんとな。。。


もうちょいデコってみた(☆。☆)

 

 

Backボタンを作って、Character画面からポーズ画面に戻れるようにした。

 

 

コードはこんなん

 

ちょっとややこしいな。もうちょいわかりやすくできるかも・・・


とりあえずCharacter画面はここまでにしとこ。

 

 

レイアウトはまぁまぁいい感じになったかな・・・・?

 

早く完成形が見たい。

 

 

次はSetting画面を・・・・・

 

 

って思ったけどまだ設定とか考えてなかったな。

 

ここはゲームがある程度できての方がいいか。

 

 

・・・んじゃぁもうちょい作り込むか。

 

 

・・・・・

 

 

なんか・・・どこまで作り込むかって結構悩むな。。。

 

早い段階で作り込みすぎると後々作り直すときに大変だし、、、

 

 

 

・・・・・・(゚-゚)

 

 

 

まぁいいや。(^。^)

 

 

会心」はいつか改名しないとな・・・

 

ちょっとフォント変えてみた。

 

まだゲーム全体の雰囲気とか世界観がいまいち決まってないからフォントは仮です。

 

 

フォントだけじゃ無くて今んとこ全部仮か。。。

 

 

あと、ポーズ画面とかの色合いはキャラによって変えたいから、Inspectorビューで色を編集できるようにした。

 

 

なんかいいかんじ(小並感)

 

よし!ここまでにしておこう!

 

まだまだやりたいことはあるけど、他が進まなくなっちゃうもんね。

 

 

ある程度ポーズ画面を形にできてうれしいな。

 

あー楽し。

 

UIに手をつけるのは一端ここまでにして、次回からはまたサフィアちゃんのアクションを増やしていきたいと思います!

 

 

鬼門になる予感。。。(°°;)

 

form-07.hatenablog.com

【Unity】最強のゲームクリエイターに俺はなる | ポーズ画面作成!

ども!2度寝撲滅委員会会長のFORM_07です!

 

 

2度寝なんてしたくない・・・・したくない・・・・のにっ・・・・クッ・・・‼

 

 

前回↓はHPバーを実装させましたね。

 

【Unity】最強のゲームクリエイターに俺はなる | HPバーを表示させよう - FORM_07’s blog

 

今回はUI編第2回ということでポーズ画面を作りたいと思います!

 

 

さっそくやっていく。

 

 

 

 

UIはこんなんでいいかな。

 

もちろんデザインは後々調整します。

 

ちなみに、ボタンはHorizontal Layout Groupコンポーネントできれいに並べてます。

 

これ便利

 

で、マウス操作なしでボタンを選択できるようにしたいから、、、

 

 

 

 

InspectorビューのNavigationをこんな感じ↓になるように設定する。

 

 

(VisualizeをONにしてね)

 

 

Unity便利すぎるぞ

 

この黄色い矢印がついてるところは矢印キーで操作できる。

 

 

すげ~~~~。

 

 

でもこれ注意なのが、最初にどれかのボタンが選択されてないと矢印キーで操作できない。

 

だから、ポーズ画面が開かれたタイミングでどれか1個ボタンが選択された状態になるようなスクリプトをつくる。

 

 

∈^0^∋

 

つくった。

 

なんて簡単なんだUnity。。。。便利すぎるぞ。。。。。

 

 

あとはInput Actionsでポーズ画面の開閉用ボタンをBindingして、、、

 

 

だいぶ慣れた

 

コードを書い、、、、、

 

 

 

・・・・・(。_。)

 

 

まてよ。。このままだとポーズ画面開いててもゲームが動き続けちゃうな。

 

 

ポーズさせないと。。。。。

 

 

ま、まさか、、、あの、ステート駆動システムの出番だというのか。。。

 

 

ってわけでステート駆動させていきます。

 

 

ステート駆動っていうのは、文字通りState(状態)を切り替えてゲームを動かすシステムのことで、ある程度の規模のゲームにはほぼ必須らしい。

 

 

まぁまずは手を動かしてそれから理解しよ。

 

 

まずはStateを入れておくenumをつくっておく。

 

どんどん増えてくんだろうな・・・

 

とりあえずこんだけ。

 

そして後々必要になりそうだからState切り替え用の関数をつくる。

 

 

現段階では不要

 

今のStateを保持する変数をつくって、

 

 

初期化も

 

そしたらコードをちょっと書き換える。

 

 

StateがMenu以外のときはif文でプレイヤー操作の入力を無視させただけ

 

あと、これだけじゃサフィアちゃん以外のものが動いたままだから、

 

 

いいね

 

こんな感じ↑でポーズ画面を開いたときにTime.timeScale0にする。

 

timeScaleっていうのは、簡単にいえば時間の流れるスピードのことで、標準は1

 

0.5にすれば時間の流れが普段の半分くらいの遅さになるし、0にすれば完全に止まる。

 

 

ただ、Update関数は動いたままなので、

 

 

 

 

こんな感じ↑にTime.deltaTimeを使うことでサフィアちゃんが移動するのを防ぐ。

 

というのも、deltaTimetimeScale0のときには0になるからです。

 

これでコードは書き終えた。

 

テスト。

 

 

 

・・・って思ったけど自分の録画方法だとしながら操作できなかった。

 

 

なんだよ。

 

 

ま、一応いい感じに動いてくれてたので、OKです!

 

今回はここまで!

 

次回はさらにポーズ画面をいじくっていきたい!

 

form-07.hatenablog.com

【Unity】最強のゲームクリエイターに俺はなる | HPバーを表示させよう

どもーーーーーー久しぶりに花火を見てテンションが上がったFORM_07です~~。

 

 

いやぁ~やっぱいいよね、花火は。

 

 

ウンウン(^。^)

 

 

前回↓はシーン切り替えを習得しましたね!

 

【Unity】最強のゲームクリエイターに俺はなる | シーン切り替え - FORM_07’s blog

 

 

今回からはUI関連のことをしていこうかなと思っております。

 

 

未知領域なので進捗悪くなりそうだな。。。

 

勉強しながらやっていかねば・・・・・(`_´)

 

 

まずはやっぱりHPバーかな。

 

てことでキャラにステータスを実装していこう。

 

 

原神感

 

PlayerStatusクラスを作って使いそうなステータスを一通り作ってみた。

 

 

せっかく作ったので攻撃にもステータスを反映させよう。

 

 

計算式は仮

 

敵にもステータスがいるな・・・・

 

 

適当

 

よぉ~し準備はできたぞ。

 

 

まずはスライダー準備。

 

 

適当(2回目)

 

こんな感じになるように各種設定をいじった。

 

 

あとはコードをかくだけだ~♪

 

 

まじでUnity有能すぎ

 

短っ!!

 

これだけでHPバーがHPと連動して増減するのすごい。。。

 

 

今回はここまで!

 

 

さすがUnity。実装が簡単すぎるぞ。。。

 

 

次回はメニュー画面みたいなのを作りたい。

 

form-07.hatenablog.com

【Unity】最強のゲームクリエイターに俺はなる | シーン切り替え

どもぉ~。苦手な友達に飲みに誘われてピンチなFORM_07ですよぉ~。

 

 

・・・・・・どうにかして断りたい。。。

 

 

酒飲めないし・・・・・( ^_^)

 

 

 

前回↓はサフィアちゃんにしゃがみと二段ジャンプを覚えさせましたね!

 

【Unity】最強のゲームクリエイターに俺はなる | しゃがみ、二段ジャンプ実装! - FORM_07’s blog

 

 

今回はシーン切り替えを実装したい!

 

 

まずは新しいシーンを作ろう。

 

いつかここも仕上げないといけないと思うと先が思いやられるな・・・

 

適当にボタン配置しといた。

 

これを押したら今までのシーンに移行するようにしたい。

 

ってことでコードかきかきタイム。

 

短け

 

簡単。

 

これをボタンにアタッチして、、、

 

InspectorビューOnClick()のとこをこんな感じ↓にする。

 

ここ

 

一応注意なんだけど、スクリプトはなんでもいいからオブジェクトにアタッチさせたものじゃないとうまくいかないです。

 

あと、EventSystemInspectorビューからInputSystemに対応したものにしないといけなかった。(2023/8時点)

 

 

なにはともあれ、これでシーン遷移に成功!!

 

 

やっほぉ~~~い(^Д^)

 

今回はここまで!

 

一個ずつできることが増えていく。。。

 

次回からはUI関連のことを進めていこうかな。

 

form-07.hatenablog.com

【Unity】最強のゲームクリエイターに俺はなる | しゃがみ、二段ジャンプ実装!

ども~~~~!テストが終わって夏休みに入ったFORM_07です~!

 

お久しぶりです。。。

 

前回なにしたんだ(忘れた)

 

 

・・・・・・・・・・(。_。)うーんと。。。

 

 

前回はInput Actionsを実装したらしい・・・

 

【Unity】最強のゲームクリエイターに俺はなる | Input Actionsを使ってみる - FORM_07’s blog

 

今回はサフィアちゃんができることを増やしたい!

 

 

 

 

そのまえに、Input Systemについて、、、

 

さっきも言ったように、前回Input Actionsを導入したんだけど、、、

 

なにやらPlayer Inputなるコンポーネントがあるらしい。

 

これ使うと便利っぽい・・・

 

だから使ってみた。

 

だいぶ変わったな

 

これで前回までと全く同じ動きになる。

 

 

ちなみに今のところ何が便利なのかわかってない・・・・(・_・)

 

 

 

 

まぁいいや

 

 

おし、本題に入ります!

 

まーずーはー・・・「しゃがみ」かな。

 

ってことでスプライトをつくらないと・・・

 

 

ドット絵慣れなさすぎてこの作業一番大変まである・・・

 

前も言った気がする・・・・

 

 

できた~~。ドット絵むず。。。

 

 

さて、サフィアちゃんをしゃがませるにはまずはAnimator Controllerをいじくりまわさないとな。。。

 

 

初めてのアニメーション遷移

 

まずはこんな感じにSapphire-Crouch状態をつなげて、、、

 

Conditionsで遷移の条件をつける。

 

これ

 

今回はしゃがみボタン入力中にしゃがませたいから、Boolean型のisCrouchっていうパラメータを用意して、isCrouchtrueになったら、つまりしゃがみボタンが押されたらしゃがみステートSapphire-Crouchに移行させる。

 

反対方向の遷移はtrueをfalseにするだけ。

 

 

あと、よくわかんないけどしゃがみボタンが押された瞬間に遷移してほしいからHas Exit Timeのチェックを外して、Transition Duration0にしといた。

 

 

 

 

これでアニメーション遷移の準備はできたから、コード書き書きタイムだ。

 

 

今回はそんなに難しくならない気がするゾ。

 

 

いや、その前にInput Systemをいじくりまわさないとな。

 

結構慣れてきた

 

簡単だぁ、さすがUnity

 

ただisChildパラメータをtrueにしたりfalseにしたりしてるだけです。

 

 

おぉ~~~~~!

 

た~~のしぃ~~(^_^)

 

 

しゃがみ用の当たり判定を作ってみた。

 

 

やり方あってるかわからんけどいいっしょ!



よ~~~しこれでしゃがみは一端オワリ!!\(^_^)/

 

 

次は二段ジャンプさせたい。

 

今は無限にジャンプできるようになってるから。。。

 

 

二段ジャンプさせるには・・・・サフィアちゃんの接地判定がいるな・・・

 

 

見にくくてすまん

 

EarthingCheckerって名前の空オブジェクトを作って、それにいいかんじのBoxCollider2Dをつけてあげた。

 

これをサフィアちゃんの子オブジェクトにしてサフィアちゃんの接地判定にする。

 

 

ところで初めて使ったんだけど、public変数の宣言の直前に[System.NonSerialized]って書くと、Inspectorビューに表示されないpublic変数をつくることができるみたい。

 

これ使ってコード書いていく。

 

便利

 

二段ジャンプ処理

EarthingChecker用に新しくスクリプトを作った

 

これで二段ジャンプできるようになりました!!

 

我ながら流れるような実装。(`・ω・´)

 

でもジャンプをRigidBody2DAddForceを使って実装してるせいで挙動がきにいらんのよなぁ。

 

この機会になんとかしてみるか。。。

 

 

以外と簡単だった

ほい。

 

AddForceをやめてvelocityVector2を代入して実装した。

 

 

やっぱ物理法則は無視しないと(義務)

 

いいかんじにきもちい挙動するようになった。

 

追々重力の強さも調整していこう。

 

今回はこのへんにしとくか!

 

しゃがみと二段ジャンプを実装でましたね!

 

次回はシーン切り替えについて考えていきたいな。

 

form-07.hatenablog.com

【Unity】最強のゲームクリエイターに俺はなる | Input Actionsを使ってみる

どもども!テスト週間が始まったFOMR_07ですよ!

 

早く解放されたい・・・・・(T-T)

 

まぁ僕はテスト勉強よりもゲーム制作をしたいからするんですけどね。

 

 

・・・・・(;゚ロ゚)

 

 

というわけでやっていこう!!

 

 

 

(どういうわけだ・・・)

 

 

 

前回↓はカメラを動かすコードを書きましたね。

 

【Unity】最強のゲームクリエイターに俺はなる | カメラをPlayerに追従させよう - FORM_07’s blog

 

今回はサフィアちゃんに攻撃させてみたいと思います!

 

まずはエフェクトを描かないとナ。。。。

 

 

ドット絵作り慣れてないからこの作業が一番大変だったりする。。。

 

 

30秒クオリティ

適当につくってオブジェクトにしてみた。

 

Sapphireの子として設定して、サフィアちゃんと一緒に動くようにした。

 

親子関係

 

あとは攻撃したときだけ表示してほしいから、、、

 

これ

 

「Sapphires_5」の左にある四角のチェックをはずす。

 

 

ふむふむ

そうするとこんなかんじで見えなくなる。なくなったわけではない。

 

 

さて、ここからはコード書き書きタイムなんですが、、、その前に、、、

 

 

今回せっかくInput Systemを使っているので、この機会にちょっと色々試してみよう。

 

 

まず、Input Actionsというものがあるらしい。。。

 

どうやらあらゆる操作をActionという単位で管理して、それをMapというグループにわけることで、スクリプトをかくときに入力を意識しなくて済むのだそうで・・・

 

ふむ、よぉわからんぞ。

 

これあれだ。とりあえずやってみたらわかるやつだ。やってみよ。

 

まずはそのInput Actionsを使うためにAssetsCreateからInput Actionsを選択する。

 

一番下にあった

するとなにやら見たことのないウィンドウが。。。

 

 

・・・・・・・・・( ・_・)

 

 

よぉわからんが便利そうな香りがぷんぷん

 

ほぉ。たしかにAction MapsActionsという項目があるな。

 

試しにAction MapsPlayerを、ActionsMoveJumpAtackを入れてみたけど、要はこれあれだな。

 

Player操作するときはSPACEキーでジャンプ、メニュー画面ではSPACEで選択、みたいな仕様にするとき、Playerとメニュー画面を別々のMapにしてそれぞれのMapの中にActionとしてSPACEキーを押すとどうなるか設定しておけばなんやかんやで便利ってことか。

 

多分

 

で、右っかわのAction Propertiesが各Actionの設定だな。みたかんじ。

 

やってみよ。

 

 

・・・・・・・・(。_。)カタカタ

 

 

ちょっといじくってみた。

 

ふ~むふむ

 

Moveは今後連続値を扱うかもしれないからAction TypeValueにして、2D横スクロールだからControll TypeAxisに。

 

JumpAttackButtonにしといたよ。

 

そしたらcsファイルが勝手に作られた。

 

これ多分あれだな。触らない方がいいやつだな。

 

多分やけど今設定したInput Actionsスクリプトにしてくれたんやおな。

 

じゃぁあとはサフィアちゃんにアタッチするスクリプトを書くだけだな。

 

以前書いたPlayerControllerに記述するか。

 

 

 

というか、ちょっと聞いて下さいよ。

 

今までVisual Studioを使ってコーディングしてんだけどね、なんかおかしいなと思ってたの。

 

そしたら案の定だったの。Unityと連携できてなかったの。

 

 

はぁ・・・(´д`)

 

 

EditPreferenceから設定するなんて聞いてないよ。。。それか導入の仕方間違ってたのかな。。。

 

 

まぁいいか。。。

 

 

さて、プログラミングのお時間だ~。

 

 

Unityと連携させたら画面が賑やかになった

 

 

これでいいはず。。。

 

public変数はこんなかんじ↓に調整しといた。

 

これ便利よね

 

敵と攻撃エフェクトにも当たり判定をつけて、、、(敵にもRigidbodyつけといた)

 

攻撃エフェクトはPolygon Collider 2Dを使っていい感じにあたり判定を編集した

 

実行!!

 

あれーーーーー

 

ん、、、サフィアちゃんの操作はいい感じだけど、、、

 

敵が消えてくれない・・・・・・・(。_゚)

 

あれ、子のColliderの判定って親も取得できるんだよね???

 

 

数時間後

 

 

ぬわぁあ~~~~~~

 

やっとわかったぁぁああああああぁぁ~~~~。。。

 

まず大前提に、OnTriggerEnterじゃなくてOnTriggerEnter2D

 

 

そんなん知らんて・・・・・(T-T)

 

そしてフラグリセットのタイミングが悪かった。

 

 

当たり判定あやしいな・・・

 

 

ああああああああああ長かった。

 

でも勉強になったな。Input Actionsは思ってたより簡単に使えたし。。。

 

よくわかってない部分は多いけども・・・・ま、そこは追々ね。

 

ってかよく考えたら、非アクティブ状態はColliderもはたらいてないからフラグ管理なんてしなくていいのか。

 

消しときました。

 

よ~し今回はここまで!!!

 

難航しました。こんな簡単なことで。

 

これからこういうことも日常茶飯事になるのかなぁ~・・・なんて。

 

 

次回はPlayerの操作をレベルアップさせたい。

 

form-07.hatenablog.com