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/Lucid…

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

※『Unityゲーム開発者ギルド Advent Calendar 2023』3日目の記事です。 ※可能な限り配慮してますが、曲を紹介している以上ネタバレを含む可能性があります:『OMORI』,『アンリアルライフ』, 『A Space For The Unbound』 私はいわゆるインディーゲームが大…

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

対象のオブジェクトにColliderをつけているか(2敗) 座標系が正しいかを確認する 普通のオブジェクト(sprite等)にはScreenPointToRay() uGUIはeventData.positionのままでいい LayerMaskが正しいか確認する 動かなかったらとりあえずレイヤーの引数は書か…

Raycast2DでuGUIを取得する方法

positionの扱いに注意。uGUIでないオブジェクト(Sprite等)はworld座標に直す必要があるが、RectTransformの場合は必要ない。 var dropPosition = eventData.position; if (Camera.main == null) return; // _layerはなくてもいい var hit = Physics2D.Raycas…

【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);</hogecomponent>…

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

About 各ステージの解答例です。各ボタンの意味・クリアの法則だけを知りたい場合は以下の記事をご覧ください。 qemelly.hatenablog.com 目次 About 目次 Stage 1 Stage 2 Stage 3 Stage 4 Stage 5 Stage 6 Stage 7 Stage 8 ~ Stage 11 Stage 12 Green End R…

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

Here is ONE Buttonと言うゲームをunityroomにて投稿しましたが、ゲーム内ヒントが少なすぎるので詰まったとき用のメモを残します。 unityroom.com 要約:ゲーム内で誘導する気力がもうないので許して クリア条件 ボタンが1つしか見えない状態でボタンを押す…

【Unity】DontDestroyOnLoadは親オブジェクトにしか使えない!

タイトルが全て。 補足すると、Hierarchyの最上階のオブジェクトにしか適用されないという意味。子オブジェクトになっているオブジェクトやそのComponentには適用されない。

C# 数字1文字をchar型にする

'0'+numはintであることに注意する! var num = 3; var c = (char)('0' + num);

Image等のuGUIをドラッグドロップ後に取得したいとき

IEndDragHandlerを実装する。 private Vector2 _startPosition; public void OnEndDrag(PointerEventData eventData) { transform.position = _startPosition; var rayResult = new List<RaycastResult>(); eventData.position = Input.mousePosition; EventSystem.current.</raycastresult>…

Circla制作終了時点から振り返る開発の反省点【ゲーム2作目】

はじめに 本記事は、けめる2作目のゲーム作品となるCirclaの開発全般を振り返り、その反省点をまとめることで、自身の制作をより効率的にしようと試みる記事です。 unityroom.com ※読み手のことは考えてません。ほぼ自分用です。 はじめに クラス設計 時間か…

2レーン高難易度リズムゲームCirclaを公開しました!

この度unityroomにて2レーン高難易度リズムゲームCirclaを公開しました! unityroom.com ゲーム画面1 ゲーム画面2 ゲーム画面3 かなり視覚的に難しい音ゲーに仕上がっております。 新曲もすこーしずつ増やしていこうと思いますので是非プレイしてみてくだ…

uGUIやSpriteの色が変わらないときに確認すること

Alphaが0になってないか new Color(255, 255, 255)みたいなことしちゃってる Colorの各値の上限は1なので絶対に白が出力されちゃう System.Drawing.Colorとかの間違ったColorを参照してないか

Font Asset Creatorで作ったフォントに白い背景みたいなのが付いちゃう場合の対処法

結論 Paddingを上げる!!!! 以上。 具体的には、Point Sizeの1/10程度を目安にするとよいみたい。 参考 forum.unity.com

UniRxの後処理まとめ

UniRxの後処理についてザックリまとめて整理。ようやく少し分かってきたレベルの人間が書いているので、ミスが含まれている可能性がありますことを先に忠告しておきます。 参考: qiita.com light11.hatenadiary.com そもそもなんで後処理するの? メモリリー…

LucidAudioをOnDestroyで止めたい場合はSetLinkを使おう

基本的にOnDestroyで止める方法は危険っぽいです。何回か以下のようなエラーが発生し、その次のPlayMode実行時に音が鳴らなくなりました。 Error: Some objects were not cleaned up when closing the scene. (Did you spawn new GameObjects from OnDestroy…

LucidAudioのStopに引数を入れるときの注意点

※追記(同日):以下の記事の通り、恐らくOnDestroyでStopを使うこと自体が誤りのようです。 qemelly.hatenablog.com 以下本文。 LucidAudioのStop()メソッドでは引数を取ってフェードアウトを演出することが出来ます。 しかし、次のような使い方は出来ませ…

Unityのイベント関数が呼ばれないとき

エラーが出ない & イベント関数(Update,Awake,Start,OnDestroy等)が呼ばれないときは、 MonoBehaviour継承しているか見る メソッド名が合っているか確認 対象オブジェクトがアクティブになっているかどうかを見る

【SOLID原則】OCPについてちゃんと考えたい

About OCPについて再整理 OCPに違反してるコードってどんなの? switch文 なんちゃらCalculatorとかなんちゃらProcessorとか 関数的対応をするモノ 実際の違反例 もうちょっと踏み込んで考える 改善例 About 個人開発のゲームにてswitch文が増え、コードがヤ…

【Unity】uGUIが見えない系のバグの話【バグ発見簡易フローチャート付】

しょうもないミス Imageが見えない!!!→30分経過...→「あっColorのAlphaが0だった...」 もう、こういうミスで時間をかけたくない。 uGUIが見えない系のバグは、考えられる原因1つ1つ自体は全部しょうもないのですが、その量自体は多いので、1つ1つ白みつぶ…

Unityの便利な無料ライブラリ(パッケージ)を紹介する

今回はUnityの便利なライブラリ(パッケージ)を列挙していきます。 全部GitHubに公開されています。 ⚠️注意 非常に情報の確度が低い内容になっています。間違い等があればコメントにて指摘ください。 個人の感情が多分に含まれます。ご注意ください。 目次 …

【Unity】PostProcessingでuGUIを彩るまで

About PostProcessingを2DURP環境で利用します。 その後、uGUIにもエフェクトを反映させる方法も説明します。 バージョン: 2021.3.15f1 三行で CameraのPost Processingを有効にする Volume → Global Volumeを使う uGUIはScreen Spaceにする 手順 Window → P…

AtCoderで入緑しました

はじめに どうも、Qemelly(けめる)です。今回はARC164にて緑レートに到達したので、入緑記事を書いていこうと思います! ギリギリなので次のABCで落ちるかもしれませんが、1度でも緑に到達したということでご愛敬。 ギリギリ スペック 落ちこぼれ大学生 20…

【AtCoder】ABC303 A~Eの解説・反省

A - Similar String 問題概要 S,Tが同じ文字列か判定せよ。ただし、1とl、0とoは同じものとする。 解説 愚直に同じかどうか判定する関数を作って、1つでもfalseを返したらNoを出力するようにします。 こういうときは、forループの前にbool ok = trueみたいな…

【AtCoder】ABC302 A~Eの解説・反省

A - Attack 問題概要 からを引いて以下にするための最小の回数を求めよ。 解説 いわゆる割り算切り上げ問題。例えばのときは回、のときは回になります。これを実現する最も簡単な方法は! #include <atcoder/all> using namespace std; using namespace atcoder; using li</atcoder/all>…

【AtCoder】ABC301 A~Dの解説・反省

A - Overall Winner 問題概要 T,Aからなる文字列が与えられるので、どちらが多いかを出力せよ。 ただし、同数だったとき、先に最後のが出現した方を出力する。 解説 基本的にはやるだけ。T,Aの数をカウントして多い方を出力。 nが偶数で、n/2までカウントさ…

【UniRx】AsyncSubjectで初期化の順番を分かりやすく記述する

初期化処理ってとにかく順番が命で、ちょっとでもミスるとエラーまみれになってしまいがちです。特にロードしきれてないのに呼び出しちゃってnull参照エラーになることはよくあります(あるな)。 最近Awake()やStart()がテキトーに呼ばれているという事実を…

UniRxのDistinctUntilChangedとWhereの順序には要注意!!【しょうもないミス2】

実際に開発中にハマった罠について(例は変えています)。例えばジャンプした瞬間にイベントを発行したくなったとしましょう。以下のうちどちらが正しいでしょうか?DistinctUntilChangedとWhereの順序が変わっています。 private readonly ReactiveProperty<bool></bool>…

【Unity】SOLID原則を1から理解する - Open/Closed Principle編

SOLIDを1から勉強するコーナー、前回はSingle Responsibility(単一責任の原則)について勉強しました。 今回はOpen/Closed Principle(開放・閉鎖原則、OCP)を見ていきましょう。 開放・閉鎖原則 「クラスは拡張に対して開かれており、修正や変更に対して…

【Unity】しょうもないミスその1 - Raycast2Dが機能しない

最近の開発中に実際に起こったこと。Unity2Dにて。Box Collider2Dを付けたImageオブジェクトをRaycast2Dで判定しようとしていたのですが、どうやっても判定できずに何時間もかかっていました。Canvasだから悪いのか、Rayが上手く通ってないのか、色々な部分…