Unityでジャンクゲームを作っているっぽい

会社帰りにGPD PocketにUnity入れてゲーム作ってます

【アクツクMV】カメラスクロールの一時停止

目標

横スクロールゲーム中に中ボスとか出現した時に、スクロールを停止させたい
その後、目的を達成したらスクロールを再開したい

流れ

  • カメラ追従用のオブジェクトを用意
  • このオブジェクトをプレイヤー側で接続
  • スクロールを停止したい場所に、判定用のタイルをシーンに配置
  • 判定用のタイルに触れるとスイッチをFalseにして、プレイヤーの「オブジェクトの接続」を無効
  • カメラ追従用のオブジェクトがシーンに残されることで、スクロールが停止
  • ボスを倒したタイミングで、カメラ追従用のオブジェクトをプレイヤーに移動
  • カメラ追従用のオブジェクトがプレイヤーに接触したタイミングでスイッチをTrueに戻し、プレイヤーの「オブジェクトの接続」を有効
  • スクロール再開

プレイヤー

スイッチ管理

isCameraRemoveを追加。初期設定はON

オブジェクトの接続

後で作るplayer_cameraオブジェクトを接続
スイッチisCameraRemoveで有効/無効を制御
子オブジェクトにしない

カメラ追従用のオブジェクト

アニメーション

アニメーションは1つ、画像は不要、「壁判定」必要

↑このスクショでは挙動を確認したいので画像を設定していますが、最後に消す予定

player_cameraオブジェクト

とりあえずplayer_cameraと命名
オブジェクトの設定は、↓のような感じ

基本設定はこんな感じ

アクションプログラムは↓な感じ
中ボスを倒したタイミングから動作する内容になります

1.中ボスの死亡フラグを判定

2.プレイヤーに向かってplayer_cameraオブジェクト移動

3.ループ処理。行きと帰り両方に同じ時間を設定

4.player_cameraオブジェクトがプレイヤーに接近したら判定

5.isCameraRemoveをONにしてオブジェクト消す。これでカメラのスクロール再開


判定用のタイル

なにかわかりやすいタイルを任意で用意
最後にタイルを配置したレイヤーは最背面設定にして見えなくするので何でも良い
タイルの設定は↓のような感じ

シーンに配置。
場所はイロイロ試しながら設定してみてね

プレイヤーのオブジェクトの接続を無効にする

今回は、プレイヤーが判定用のタイルに接触すると、中ボスが出現する
このタイミングで、プレイヤースイッチisCameraRemoveをOFFにする
これにより、カメラ追従用のオブジェクトがシーンに取り残され移動しなくなる = スクロール停止 となります

ですので、↓は中ボスのアクションプログラムになります

1.判定用タイルにプレイヤーが接触したら判定

ゲームによっては、判定用のタイルは不要で別の判定の方が楽かもしれないですね

2.中ボスが動き始めると同時に、isCameraRemoveをOFF


以上で、スクロールの一時停止とスクロール再開が可能になりました
youtu.be

繋ぎ目が少しガクガクしていますが、調整と演出で気にならなくすることはできるといいなぁと


【アクツクMV】10_ランダムに敵を複数地点から生成したい

方針

  • ランダム値を共通変数に代入
  • 変数によって、スポーンポイントを判定

ランダムの取得

ランダムを入れる変数用意

素材→変数で共通変数を用意
これであれば、どこからでもランダム値にアククセス可能になる

画像もモーションもない空のオブジェクトを用意

重力は無効にするのを忘れないように

random(0-4)アクション


ランダム値を共通変数に代入する
今回は0~4のランダムで

random(0-4) → wait

一定時間経過で遷移
この時間がスポーン間隔になる
あとあと変数にして可変できるようにするのも良さそう

waitアクション
wait → random(0-4)

とくに設定は無し

シーンに配置

画面の隅っこに配置
これでランダム値が発生する

スポーンポイントを作る

ここから、ランダム変数で判定して敵を生成する
敵生成時の敵の向きは、スポーンポイントの向きと同じにするよ想定

アニメーションを用意

左右の向きが欲しいだけなので、アニメ自体は1フレームで当たり判定等は無し

オブジェクトを用意

今回は右向きの用意。左向きはモーションの向きをleftにするだけ

flagを用意

毎回1体だけ生成したいのでflagを用意

stand_byアクション

特に設定なし。重力は無効にしておく
モーションの向きの設定が大事(他のアクションも同じにしておく)

stand_by → spawn

ランダム値とこのスポーンポイント番号が同じかどうか判定
今回は↓のように設定してみた

  • 右向きスポーンポイント…1
  • 左向きスポーンポイント…2

同時に、1回だけ処理flagがoffかどうか判定

詳細は


spawnアクション

敵を生成。生成時の向きはスポーンポイントと同じ向き
そして、1回だけ処理flagをonにする

詳細は


spawn → stand_by
wait → stand_by

一定時間経過で戻ります

waitアクション

これは、ランダム値がスポーンポイント番号と異なった場合の処理
敵生成はしないけど、処理を回すためflagを制御

詳細は

stand_by → wait

ランダム値とこのスポーンポイント番号が異なるかどうか判定
同時に、1回だけ処理flagがonかどうか判定
ということは…もしランダムで同じ数字が連続しても、敵は連続で生成されないのか…まっ、いっかw

詳細は


シーンに並べてみる

左右から敵ランダム生成できたー
youtu.be

【アクツクMV】09_敵を作る

方針

playerが一定距離に接近したら前進して攻撃をする敵を作る
この内容ができれば、イロイロなパターンに展開できそうだから

敵を作る

アクションプログラム

wait

特に設定無し
重力は効くようにする

wait → MoveForward

playerが一定距離接近したら判定

詳細設定は

MoveForward

敵の向いている方向に移動
今回は前進あるのみ

MoveForward → shot

playerが一定距離接近したら判定
あってもなくても良さそう

shot

設定した弾を発射
この画像は、イロイロな攻撃をテスト中で、使用しない実行アクションは無効化している

詳細設定は

shot_wait

空のアクション
一定間隔で攻撃させたかったのでため、リンクを繋げるためだけに存在
この方法だけしか思いつかなかった

shot → shot_wait
shot_wait → shot

一定時間が経過を設定
ここの往復する時間 = 敵の攻撃間隔みたいな

アニメーション

弾を発射用の接続点を左右の向きに追加しとく

とりあえず、これで動くようになった
youtu.be

弾の設定に関しては、また今度
というか、敵の弾が敵に当たったり…なんかうまく動いてない…

【アクツクMV】08_タイトル画面作る

タイトル画面からゲーム画面へ遷移したい

タイトル用の新規シーンを用意

意外に生のテキストを表示するのがめんどくさい…
画像だけ表示もアニメーション用意しないと表示されない?
こまったなー

もう、画像をタイルとして設定して、シーンに配置するのが良さそう
とりあえず、画像を用意

タイルにする

タイトル用のシーンにタイルで並べる
これで、仮の画面は良しとしよう

画面遷移
遷移タブで設定するっぽい
とりあえず、Titleをスタートシーンに設定する

Titleからscene001(ゲーム画面)への遷移はキー入力にしたいので↓のような設定にしとく

これで、遷移できるようになった
youtu.be

【アクツクMV】07_ダッシュの制御

今のままだとダッシュ発動の条件が少なすぎるので使いやすくしたい
よくある作り方の場合、イロイロとフラグなんか駆使したりするけど…うまくいかなかった…

方針

playerにスイッチ追加

isDashを新規追加
ダッシュしたらon、ダッシュ終わったらoffにする想定

playerのアクションプログラム改造

全体フロー

地上ダッシュと空中ダッシュを別々に用意
空中ダッシュ後の落下状態も用意(自由落下して、接地判定したかったので)

dashアクション

stand byからdashに遷移
基本的な設定は、前回からそのまま

追加要素は、その他の実行アクションでフラグの管理
isDashをonにしている

stand byからdashへのリンク

発動条件は↓を同時に満たすとき

  • ボタン入力された
  • isDashがoffの場合(dashしていない)
  • 足元がタイルに接触している(接地している)

isDashの変更設定は↓

タイルの壁判定に接触の設定は↓。足元だけみる

dashからstand byへのリンク

発動条件は

  • 一定時間経過
  • 足元がタイルに接触している(接地している)
    • stand byからdashへのリンクと同じ

一定時間経過の設定は↓。要調整になる想定

air_dashアクション

空中ダッシュ用のアクション
jumpからair_dash発動するように設定
air_dash後は、air_dash_fallで落下して、接地すればstabd byに遷移
空中ダッシュは、1回しか発動させたくないので、こんな感じの判定にしてみた
air_dashアクションの中身は、dashと同じ

jumpからair_dashへのリンク

発動条件は

  • ボタン入力された
  • isDashがoffの場合(dashしていない)

isDashの変更設定は↓

air_dashからair_dash_fallへのリンク

発動条件は↓を同時に満たすとき

  • 一定時間経過
  • isDashがonの場合(dash中)


air_dash_fallアクション

ただ、自由落下をさせたいだけなので、特に設定はない

air_dash_fallからstand_byへのリンク

発動条件は↓だけ。接地したら遷移するだけ

  • 足元がタイルに接触している(接地している)

stand_byアクション

isDashをoffにして、再びdashが発動できるようにしておく

とりあえず、想像通りに動いたー
youtu.be


攻撃のできるタイミングも増やさないとならないし、まだwalkからdashできないので、改造は続く…

【アクツクMV】06_ダッシュを作る

まずはダッシュ用の素材を追加

アニメーションに画像(素材)を追加
[player]右クリックから[アニメーションの設定]を開いて素材を追加

とりあえず、ショットを複製して画像を変更
なにか問題があったら、後で調整

playerにダッシュ関係のデータを追加
アクションプログラム
こんな感じの挙動をしたいので↓のように設定

ダッシュ挙動の設定
[その他の実行アクション]の[表示方向と同じ方へ移動]で実現できそう
とりあえず、こんな感じで設定してみた

まずは待機からダッシュ発動させたいので、空いているボタンをアサイ

とりあえず出来た
youtu.be

ただ、これをジャンプ中とかに発動しようとすると、どうも動作が不安定…
接地判定とか、ちゃんとしないかもかなぁ…

【アクツクMV】05_近接攻撃で壊せるオブジェクトを作る

やりたい事

射撃攻撃では破壊できず、近接攻撃だけで破壊できる障害物(バリケード)を用意したい
破壊できる障害物ということは、敵として作れば良さそう

イロイロとテスト

無敵のon/offでなんとかならないかと思ったけど、うまくいかない
イロイロとサンプルっぽいのを見てみると…攻撃属性を利用するらしい

攻撃属性を設定

オブジェクトの変数に攻撃属性を設定できるっぽい
↓の表なように攻撃属性を設定したい

攻撃属性
player_bullet 10
player_melee 11

設定する場所は↓


バリケードのモーション

動かない敵って感じで用意
動かないのでシンプル構成。player_bulletの攻撃判定が無い状態

バリケードのオブジェクト

各設定は

基本設定

[ダメージを受けた時一定時間無敵にする]はちゃんと設定。でないと1回のヒットに対して複数回ヒットしてしまうらしい
[無敵中オブジェクトが点滅]は無効に。ここの設定は[攻撃属性]に設定した方を使用したいので
[他のオブジェクトから押し戻せない]を有効に。配置場所に固定したいので

アクションプログラム

ここもシンプルでいけそう

wait

モーションの設定と重力無視にするぐらい

melee

[オブジェクトを消滅する]だけ設定

リンク

[体力が0]で遷移するぐらい

被ダメージ設定の追加

追加方法

歯車アイコンから[攻撃判定に触れた時の被ダメージ設定]にチェックを入れて追加
そうすると、タブが追加される

bullet被ダメージ

今回はbulletではダメージを与えたくないので、[被ダメージ率の係数]をゼロにする
これで、ダメージが発生しなくなる
[属性値で指定]にplayer_bulletの属性値10を設定
ダメージが発生しないので[演出中オブジェクトが点滅]を無効

melee被ダメージ

meleeではダメージを与えたいので、[被ダメージ率の係数]を100%にする
これで、ダメージ発生
[属性値で指定]にplayer_meleeの属性値11を設定
ダメージが発生するので[演出中オブジェクトが点滅]を有効。設定した間隔で点滅するはず
このために、オブジェクトの大本の設定を無効にしていた

こんな感じになりました
youtu.be