Qemelly(けめる)のプログラム備忘録

Unity / AtCoderについて書きます

よく使うパッケージ一瞬で入れるスニペット

以下をmanifest.json"dependencies" : {の次の行から入力する。

"com.annulusgames.lucid-audio": "https://github.com/AnnulusGames/LucidAudio.git?path=/Assets/LucidAudio",
"com.annulusgames.lucid-editor": "https://github.com/AnnulusGames/LucidEditor.git?path=/Assets/LucidEditor",
"com.cysharp.messagepipe": "https://github.com/Cysharp/MessagePipe.git?path=src/MessagePipe.Unity/Assets/Plugins/MessagePipe",
"com.cysharp.messagepipe.vcontainer": "https://github.com/Cysharp/MessagePipe.git?path=src/MessagePipe.Unity/Assets/Plugins/MessagePipe.VContainer",
"com.cysharp.unitask": "https://github.com/Cysharp/UniTask.git?path=src/UniTask/Assets/Plugins/UniTask",
"jp.hadashikick.vcontainer": "https://github.com/hadashiA/VContainer.git?path=VContainer/Assets/VContainer#1.13.2",

最高のインディーゲーム音楽(とそのゲーム)

※『Unityゲーム開発者ギルド Advent Calendar 2023』3日目の記事です。

可能な限り配慮してますが、曲を紹介している以上ネタバレを含む可能性があります:『OMORI』,『アンリアルライフ』, 『A Space For The Unbound』

私はいわゆるインディーゲームが大好きです。少人数での作成ゆえ、物凄く個々人のパワーや個性が出やすいのが、インディーゲームの特長だと思っています。

インディーゲームは、音楽も独特かつ魅力的です。今回は、私が好きなインディーゲーム音楽偉そうな小言交じりに紹介しようと思います。

なんか、音楽からゲームに入るっていう流れもあっていい気がしてます。

OMORI

最高のストーリーゲーム、OMORI。音楽がめちゃいいことでも有名です。ゲームは1周半しました。ゲームとして超オススメ。人生。

store.steampowered.com

曲の特徴

独特な音が多いです。

反面、キャッチ―な曲はしっかりキャッチ―です。

My Time

↓微ホラーかも注意。

www.youtube.com

トレイラーにもなっている"My Time"。曲自体は2013年に製作されたもので、そこからトレイラーに採用された楽曲。元々インディーゲー用として作られてないので、ちょっとタイトルからは外れてるかもしれませんが、いい曲なので。

こんなにテーマにぴったりな曲探したOMOCAT氏…すごすぎ

World's End Valentine

www.youtube.com

道中の登場キャラである、スイートハートお嬢様の曲。テンションぶち上げる構成が凄い。

お嬢様特有の完璧主義でウザい性格(作中表現あり)を甲高いチェンバロで表現しています。

このゲームは、特徴的な楽器がキャラクターの代名詞として表現されていることが多いので、そこに注目して聞いてみても面白いです。

A Home For Flowersシリーズ

www.youtube.com

www.youtube.com

www.youtube.com

www.youtube.com

ゲームって、こういう「同じ曲を複数のシーンでアレンジして描くやつ」が醍醐味ですよね。

Daisyのしっとりした古っぽいピアノが1番好き。

アンリアルライフ

最高のストーリーゲーその2。ゲームは2周しました。超オススメ。

store.steampowered.com

曲の特徴

静謐な物悲しさが存在するような、そんな雰囲気が統一されてて凄く素敵なサントラです。

本当にとにかく統一感がある。ゲームやった後だと、曲聞くだけで景色がパッと浮かんでしまう。

幻想図書館

youtu.be

名前の通りちょっと奇妙な図書館の探索BGM。シンプルだけどめちゃ好き。

Disc1, 2で分かれていて、後半の曲も好きなのですが、ちょっとネタバレ要素もあるので伏せます…。

Milk inside a bag of milk inside a bag of milk

何ていうか、いろんな意味でつらい世界観のノベルゲーです。精神に来るタイプのゲームです。すぐ終わります。3周しました。オススメ。

store.steampowered.com

曲の特徴

シンプル。シンセにリバーブガン掛けみたいな音が多め。

VISUAL NOVEL!

youtu.be

謎の語り掛けシーンのBGM。こういうシンプルなシンセがディレイとかリバーブ(残響音)かけまくって流れてるのに弱い。

このレベルのシンプルさって、インディーゲーならではと思います。

Milk outside a bag of milk outside a bag of milk

続編。狂気度はそのままに、ビジュアルが分かりやすくなりました。アニメーションのカットイン等も登場し、より没入感が増した作品です。オススメ。

store.steampowered.com

曲の特徴

前作よりは曲のバリエーションが豊富。

シンプル怖い音も増えた。

thinking...

youtu.be

前作と変わらない雰囲気。一貫性が凄い。ずっとこんな感じだから次第にまいってきます。でもそこがこのゲームのいいところ。

mirror music

youtu.be

本当に一貫してほぼ全部環境音的な音楽(Ambient系)なんですよね。プレイしてて次第にぼんやり辛くなってきます。

HELLTAKER

かわいいサキュバス倉庫番できるゲーム。フリーゲーム。かわいい。オススメ。

store.steampowered.com

曲の特徴

ノリノリ。4つ打ちの王道キック。

Vitality

www.youtube.com

道中はほぼこれが流れている。シンプルな4つ打ちに合わせて常にみんながダンスしているのめっちゃいい。

A Space For The Unbound

30年前のインドネシアが舞台のストーリーゲーム。強いメッセージ性があります。1周半。超オススメ。

store.steampowered.com

曲の特徴

生音系が多い。シンセ少なめ。

Within the Dream

www.youtube.com

単純に曲としてよすぎ。

An Ode to Life

www.youtube.com

単純に曲としてよすぎ。

Celeste

高難易度美麗ドット絵2Dアクションゲームです。インタラクティブな音楽も魅力。単純にゲームとして面白すぎる。超オススメ。

1周半。

store.steampowered.com

曲の特徴

8-bit系の音や、オーケストラ系の生楽器を組み合わせた楽曲が多い印象。あとは定番のピアノソロ。

8-bitの音でシネマティックに表現することも多いです。

絶対ドラム好きが書いてる。ドラムの音がいい。

First Steps

youtu.be

1ステージ(A面)BGM。これからの物語への高揚感が高まるようなBGMです。

「1ステージこんな感じだけどBGM書いて」と言われてこれ書けるの天才過ぎる…

Forsaken City

youtu.be

1ステージB面BGM。全体的に音が軽く、短めになっているのが印象的です。

1ステージA面より忙しいギミックが多く、ステージ長が短いというB面の性質とピッタリすぎる曲調です。

unityroomのゲーム

unityroomにていい曲を紹介。

フレノイド

unityroom.com

シンプルで耳に残りやすいメロディ。寒そうなゲームの雰囲気にぴったりな音色。キャラによって違うBGMがインタラクティブに流れる。全部丁寧すぎる、最高。

Horizontal Mirror

unityroom.com

シンプルなサイン波系の音を使った落ち着きのある音楽が、シンプルで落ち着きのある世界観に完全にマッチしています。

バック・グラウンド・メモリー / 初音ミク

unityroom.com

もはやMVなんですが、クオリティが高すぎるので紹介。いい曲だし、レパートリーがちゃんとある。そして雰囲気が統一されててSEが浮いている感もない。

水中でリトライするときの音が好き。

Let's Splash!!

unityroom.com

"The Splashers"がゲーム性に完璧にマッチしてる。シンプルなリズムゲーに求められてる要素が全部入ってる。

こういうの作れるようになりたい…

最後に

最初は『ゲーム制作1年目を振り返ろう!!』で決まり!これで行こう!行くべきだろ!と思ったのですが、なんだかあんまり大したことも浮かばなかったので、こういう記事にしてみました。

一言で振り返ると、「とりあえず作ったものを上げられるようになった」のが非常に大きい一歩でした。このハードルが高い人間だったので、ギルドには感謝です。

来年も、来年こそもっと、ゲーム作りしていきたいですね。

Rayが当たらないときに確認すること

対象のオブジェクトにColliderをつけているか(2敗)

座標系が正しいかを確認する

  • 普通のオブジェクト(sprite等)にはScreenPointToRay()
  • uGUIはeventData.positionのままでいい

LayerMaskが正しいか確認する

  • 動かなかったらとりあえずレイヤーの引数は書かなくていい

向きが正しいか確認する

  • 大抵はVector3.forwardray.direction

Raycast2DでuGUIを取得する方法

positionの扱いに注意。uGUIでないオブジェクト(Sprite等)はworld座標に直す必要があるが、RectTransformの場合は必要ない。

var dropPosition = eventData.position;

if (Camera.main == null) return;

// _layerはなくてもいい
var hit = Physics2D.Raycast(dropPosition, Vector2.zero, Mathf.Infinity, _layer);
if (hit.collider == null) return;

var isHit = hit.collider.TryGetComponent(out SomeUGUIClass someUGUIClass);
if (!isHit) return;

// その後の処理

【Unity】AddressablesでComponentをロードすることは(多分)できない!

以下のようなコード。

private async UniTask Load()
{
    var handle = Addressables.LoadAssetsAsync<HogeComponent>("AssetsPath", null);

    await handle.Task;

    if (handle.Status == AsyncOperationStatus.Succeeded)
    {
        // 何らかの処理
    }

    Addressables.Release(handle);
}

このようなコードだとエラーが出てしまいます。

どうやらLoadAssetAsyncでは、コンポーネントクラス等は直接ロードできないようです。

解決法

GameObjectScriptableObject等はロードできるので、そこから対象のComponentを取得しましょう。

private async UniTask Load()
{
    var handle = Addressables.LoadAssetsAsync<GameObject>("AssetsPath", null);

    await handle.Task;

    if (handle.Status == AsyncOperationStatus.Succeeded)
    {
        foreach (var res in handle.Result)
        {
            var component = res.GetComponent<HogeComponent>();
            // 処理
        }
    }

    Addressables.Release(handle);
}

Here is ONE Button 完全クリア解答例

About

各ステージの解答例です。各ボタンの意味・クリアの法則だけを知りたい場合は以下の記事をご覧ください。

qemelly.hatenablog.com

目次

Stage 1

両扉開けて赤を押す。

Stage 2

扉を閉じ、赤を押す。

Stage 3

以下、番号を付けて説明する。両扉はアルファベットで表す。

上図の状態(両扉が全部開いた状態)から、4a2の順に押す。

Stage 4

上図から、b4a1の順。

Stage 5

243a2

Stage 6

416a1

Stage 7

a34a6a4

Stage 8 ~ Stage 11

押すだけ。

Stage 12

Green End

緑のみ見える状態で押す。ドアを通る。

Red End

赤を同様にして選ぶ。

White End

白を同様にして選ぶ。

Earth End

青を押す。柄が地球になるのでそれを選ぶ。

Vanish End

柄が地球になった青ボタンが見える状態で白ボタンを押す。

Here is ONE Button 詰まったとき用メモ

Here is ONE Buttonと言うゲームをunityroomにて投稿しましたが、ゲーム内ヒントが少なすぎるので詰まったとき用のメモを残します。

unityroom.com

要約:ゲーム内で誘導する気力がもうないので許して

クリア条件

ボタンが1つしか見えない状態でボタンを押すとドアが開く。それに入ると次のステージへ。

各ボタンの意味

  • 赤:なし
  • 白:白以外の同色かつ同じ状態(押されてる、押されてない)のボタンをすべて消す
  • 緑:押されたボタンを押されてない状態に戻す
  • 青:向いている方向にあるボタンに変化する
  • ?:?

ステージ数

実質7ステージ。

エンディング分岐

5つ。