【Unity+C#】メンバ変数のスコープはなるべく狭くしたい!定義の仕方まとめ~

変数やメソッドのスコープは 一番狭く、使う時に広げてね。
というのが私のいつもの方針である。賛否あるかもだけど、今回はその方針の元書きます。
C#の話がほとんどですが、Unityだとインスペクタに表示するかどうかも関係してくるのでまとめた。

続きを読む

【Unity2019.4】ポストプロセス:非URPとURPの適応の仕方の違い

URPと普通の3Dテンプレートから作ったプロジェクト(以下、非URPと書きます)で、
ポストエフェクトの適応方法が違うのでまとめました。

  • この記事を書いたときの環境
  • URPか確認する方法
    • Settingフォルダに設定ファイルがある
    • カメラの設定項目が異なる
  • 非URP
    • 光るオブジェクトを用意
    • 適応方法
  • URP
    • 光るオブジェクトを用意
    • 適応方法
  • 違いまとめ
続きを読む

【Unity】【疑問】SpriteAtlasに入れたSpriteをコードからでなく直接InspecterアタッチしてもSpriteAtlasがちゃんと使われているのか?

UnityのSpriteAtlasについて前から疑問だったのが、直接インスペクターでspriteをアタッチしても、
ちゃんとパッキングされたSpriteが使われているのか?ということである。

なぜそういう疑問を持つかというと、
インスペクタでアタッチした場合、SpriteAtlasでパッキングされているかどうか?どのアトラスに入っているか?
など、アトラス自体を意識しないで設定できるからだ。

  • 結論
  • 検証
    • パック前
    • パック後・Inspecter
    • パック後・コードでspriteを指定
続きを読む

【Unity】asmdef(Assembly Definition)について調べたことまとめ

asmdef(Assembly Definition)を使うプロジェクトに当たったので、どういうものなのか調べたことをまとめた。

  • asmdef とは何なのか
  • そもそもなぜdllを分けたくなるのだろう?
    • 配布するようなライブラリを作る場合は必須
    • コンパイル時間の短縮になる?
  • asmdefファイルの作り方、設定の内容
    • 配置場所
    • 作り方
    • 設定内容
      • General - Auto Referenced
      • Define Constraints
      • Assembly Definition References
      • Platform
  • 注意点
    • Editor等の特殊フォルダーの効果がなくなる
    • けっこうキャッシュがバグる
続きを読む

【CRIWARE】Criware用のサウンドデータ(キューシート)を作成する

はじめに

CRIを使う場合、サウンドファイルはwaveやmp3のままでは使えない。
CRI専用のサウンドデータ=キューシートに変換し、キューシートをUnityのプロジェクトにいれることになる。

この記事では、キューシートの作成方法について記述する。

f:id:snoopopo:20220214140430p:plain

CRI Atom Craft をダウンロードする

CRI Atom CraftはADX2 LEと同様に無料で使えるぞ。

キューシートを作成するにはCRI Atom Craftという別のアプリケーションを使う。
まずは以下のページからダウンロードしよう。

game.criware.jp

「契約内容に同意してダウンロード」を押す。 f:id:snoopopo:20220214130431p:plain

「ツール(ツール/ドキュメント)」にCRI Atom Craftが入っているのでダウンロードする。 f:id:snoopopo:20220214130606p:plain

展開したフォルダの以下のフォルダ配下に、

cri_adx2le_tools_ver_3_46_02/cri/tools/ADX2LE/ver.3/

「CriAtomCraft.exe」というファイルがある。これがCRI Atom Craftだ。ダブルクリックして実行しよう。

キューシートを作成する

「CRI Atom Craft」を起動後、サウンド作成用のプロジェクトを作成する。 f:id:snoopopo:20220214135632p:plain

次にワークユニットを作成する。 f:id:snoopopo:20220214132117p:plain

画面左下の「マテリアルツリー」にwaveのサウンドデータをドラッグアンドドロップしよう。 f:id:snoopopo:20220214132636p:plain

元のファイルはwaveでないと取り込めないことに注意しよう。
mp3等の圧縮されたデータしかもっていない場合は、itunes等でmp4→waveに変換することができる。 support.apple.com

「マテリアルツリー」に読み込まれたら、今度は「ワークユニットツリー」のキューシートにドラッグアンドドロップする。 f:id:snoopopo:20220214133133p:plain

続いてキューシートを右クリックし「Atomキューシートバイナリのビルド」を選択すると以下のダイアログが表示される。 「Unity向けAssetsフォルダを出力」にチェックを付けてから「ビルド」を押そう。 f:id:snoopopo:20220214134432p:plain

ビルドが終わると出力先のパスが書かれているので確認しておこう。 f:id:snoopopo:20220214134533p:plain

Unityプロジェクトにキューシートを入れる

ACFファイル、ACBファイルなどのビルドされたファイルをStreamingAssetsに入れよう。

f:id:snoopopo:20220214134853p:plain

これでUnityでCRIのサウンドデータを使う準備は完了だ。

キューシートの中身をUnityで確認する

最後に、取り込んだキューシートの中身を確認しよう。意図したサウンドデータがキューシート内にあればOKだ。

Unity:画面上部のメニューWindow -> CRIWARE -> AtomBrowser 

f:id:snoopopo:20220214135308p:plain

参考

game.criware.jp

【個人ゲーム開発者向け】アプリが最新バージョンじゃなかったらストア画面へ飛ばす、を超お手軽に実装する

よく「アプリをアップデートしてください」とか出てストア画面に飛ばされる、のあるじゃないですか。
今回は、最新アプリのバージョンの定義をGoogleDriveにおく、という超お手軽な方法でそれを実装してみました。
個人開発者の方などで「サーバーが用意するの大変」という方とかに参考になればいいなー。

  • 最新のバージョンをGoogleDriveにテキストファイルとして格納する
  • 権限を誰でもアクセスできるように設定する
  • ファイルのダウンロードURLを取得
  • クライアント側:最新バージョンを取得する処理を実装
  • クライアント側:最新じゃなければストアへ飛ばす
続きを読む

『箱猫レンジャーの3Dそうこばん!』リリースまでの道のり〜ずっとゲームが完成させれなかった

f:id:snoopopo:20211207172425p:plain 2021年10月末に『箱猫レンジャーの3Dそうこばん!』というゲームをリリースした。

このゲームは自分の中では第一作目。
ゲーム開発は仕事にもしている(本職はゲームプログラマ)し、
ゲーム開発者を目指してからは個人でも10年近くずーとやってきたんだけど、
もうずーーーーーーーーーーーーーーーと全てエターなってて、
この年にして初めてちゃんと「作品」と自分では言ってあげれるものができた感じです。
なのでここまでの道のりを少し書いておきたいと思い書いてます。

▼『箱猫レンジャーの3Dそうこばん!』の紹介ページ▼ www.snoopopo.com

とにかくゲームを完成させたかった

この10年、個人でのゲーム開発をずっと続けてましたが
(厳密にはやってない期間もあるだろうけど、やめたり停止したと思ったことは1度もない)
一つも自分が作りたいと思ったものは完成してませんでした。

極端に小さなミニゲームは作って無理やりgoogle playでリリースするということはありましたが、
それは私が作りたいものではないので仕様も演出も何も浮かばない。どうしたいかとか全然思い描けない。
そのためこちらもクオリティの低いものになってしまう。
結果、人に自分が作ったゲームを恥ずかしくて見せれない。って感じでした。

・自分が作りたいものは力量不足でエターナル。
・簡単で自分が作れるものを作るとクオリティが低すぎて人に見せたくないものになる。

このどっちかのパターンをずっと繰り返してました。

完成とはどういう状態?

人によっては、教材に沿って作ったゲームをちょっと自分風に変えてみる。
これで自分のゲームを完成したと思える人もいるだろう。そう本気で思えたらそれで完成でいいと思う。
リリース経験を小さく、たくさん積んでPDCAサイクルを高速で回す・・・みたいな方が成長できるとも思う。

だけど自分はそれでは全然だめだった。完成したって思えない。
自分の力量以上にハードルが上がってしまっているとは認識してたけど、 どうしたら自分は完成したと思えるんだ?みたいなことを考えたりもしました。

リリース後の今は、規模がどれくらいとかそういう話じゃなくて感覚的に、

・人にプレイして欲しいと思える
・恥ずかしいと思わずに他人に「やって」って言える

っていうのが今の所の答え。これが私が「完成した」って思える最低限のライン。

『箱猫レンジャーの3Dそうこばん!』は、身近な人には今でも見せれないです。
だけど、私のことを全く知らない人、SNS上だけの付き合い人になら見て欲しいなと初めて思えた感じ。

1000h超えてもゲームが完成する兆しすらない(2019、2020年の1年半位)

2019年~フリーランスにしたのもあり、本職とゲーム開発の両立ができる時間の余裕がありました。
まずは3ヶ月でゲーム作ろう!と思い始めたのがこちらのゲーム。
本職でその頃、箱庭ゲームをガッツリ作っていてノウハウもあるため軽い気持ちで、
「箱庭xローグライク!」をテーマに開発を始めました。

f:id:snoopopo:20211103144949p:plain

3ヶ月の予定が結局1年半くらい開発し続け、当然開発時間は1000hを超えてきます。
この頃、全てのタスクとそれにかかった時間をスプレットシートに記載しており、
毎日2~3hぐらいは時間の確保ができていたと思います。

しかし全く完成しないのです。
このゲームを作るまでは、個人ゲーム開発の時間の確保が確実にできていたわけではなかったので、
時間が確保できる今なら完成させれるだろうと思っていました。

しかしそれどころか完成する兆しが全く見えない。
思いつきで仕様をどんどん追加してプログラムを書く自分。
その割に中身は決まっていないので機能だけ増えて肝心の中身がない。
(アイテムを使っていろんなことができる仕組みは作ってるけど、アイテムが何か決まってないみたいな)

1000hを超えたあたりで「このゲームどうしよう・・・・」となってきてました。

時間があっても完成させれないのが今の自分ということがわかり、
時間の確保以外にも改善しないといけない何かがあるのだと思ってきました。

GAME A WEEK してみた(2021年3~4月)

「やはり規模がデカくなりすぎた!小さいゲームを作ろう」
この思考はそれまでも何度か繰り返してきましたが、一旦上記のゲーム開発をおやすみし、
小さいけど完成しているゲームを目指したいと改めて考えます。

そこでGAME A WEEK という存在を知ります。
unity1weekみたいに1週間でゲーム作るやつです。そして、それを何週も繰り返す。

1週間で作るのを何週も繰り返す、これは今までやったことがない取り込みではありました。

そこで本職の傍ら、とにかくバタバタと1週間でゲームを作り始めます。

www.snoopopo.com

結局なんとか5本(5週間)続けたのですが、
ここで作ったゲームも全て「完成できた」とは言えないものになり、未完成品を量産している感覚なってきました。
そしてこのままGAME A WEEK を続けても駄目ではないかと思い、GAME A WEEKを続けられなくなります。

個人開発に集中したくて仕事をやめた(2021年6月)

GAME A WEEKも駄目だった、だったら次どうするか。ということを考えていました。

そしてもうすでに何年も、「本職よりも個人開発を優先したい」と正直思ってました。

ここらで一旦個人ゲームの開発だけに集中する期間を作ってもいいんじゃないか
このままだと個人では一生ゲームを1本も完成させられないかもしれない

ゲームを完成させれないことが長年心の負担・焦りにもなっていて、
このままでは駄目だということだけはわかっていたので
思い切って仕事を辞めることにしました!

(とはいえ私は元々フリーランスです。
なので会社をやめた、ってわけではなくそれまでいたプロジェクトの契約を切った感じ!)

あ、あと30歳近くなってきたwので、20代のうちにゲームを完成させたかったのもあります。(年でごめん泣)

フルタイムで開発を開始!・作り終えるまで本職を再開しないと誓う(2021年7月〜)

というわけで晴れてストレスフリーで個人ゲーム開発だけに集中できる最高の期間が始まります!

この頃誓っていたのが、 自分が完成したと思えるものができるまでは本職の仕事を再開しない ということです。

完成させれるか or 貯金が尽きるか でこの挑戦は終わるわけだけど、
1年位無給でも生きていける貯金はありました。

自分に圧力をかけても逃げるだけだから、とにかく自分を甘やかす=本職をやめる。
自分を甘やかしてる感覚で、貯金が消えていくことへの焦りはありませんでした。

はじめは3週間で作り終える予定だった

1年ぐらい余裕はあるとは言え、私はゲーム業界の仕事に戻るつもりでしたし、
「貯金全てを使い切ってゲームを完成させられなかったんじゃその時こそ本当に終わる」と思ってました。
なのでやはり大きいゲームは作れないと考えていました。

そこで、上述したGAME A WEEK で作ったゲームから1本、本格的に完成させようと決めました。
作り切れるだろう、でも簡単すぎないもの、今後企業へのアピールにもしたいなどと考え、
5本作った中から、この3D倉庫番のゲームを選びました。
これが『箱猫レンジャーの3Dそうこばん!』のプロトタイプ版となります。 www.snoopopo.com

はじめはなんとなく、3週間ぐらい。ステージは40個ぐらい作ろうと思っていて、1日2個作ればいけるだろ〜
ぐらいの簡単なスケジュールだけ引いて始めました。

結果どのくらいかかったかと言いますと、4ヶ月です。

twitterで日々進捗を上げ始める(2021年8月〜)

個人ゲーム開発一本に集中すればいいものの、時間に余裕ができると他のこともやりたくなってきます。
最初、youtubeにゲーム開発の様子をアップしよう!としていたのですが、
動画編集に時間がかかるし編集スキルもない・・・

そこでyoutubeにアップする前の練習と思ってtwitterを始めました!

▼ゲーム開発の進捗をなるべく毎日更新しているのでよければ見てみてください〜 twitter.com

これが予想外に良く、なるべく毎日、わずかだけど見た目でわかる進捗をあげるようになります!

プログラマーの私は、見た目でわかる進捗(ゲーム上で見た目が変わったと表せるもの)を出すのが苦手でした。
だけど、これを行うようになったことで、プログラム以外の作業はこれまで後回しにしがちだったのですが、
プログラム内のリファクタリングよりも、キャラクターのモデル作ってみたりとかそういう作業の腰が軽くなってやれるようになってきました。

ただの作業記録のつもりが、こういう効果もでて、さらにやっている内に、
同じように進捗をあげている人が他にもいることがわかり(みんな考えることは同じだった)、
他の人のゲーム見て「すげぇ〜」って思ったり、いいね!やフォロワーになってくれる人も増えて、
なんかSNS嫌いだったけど面白くなってもきました。

これは後々、宣伝効果もあったのでおすすめです。

あと、リリースは延期、延期で2,3回は延期しちゃったんだけど、
そんな中、応援のリプくれる人とかいて、なんかふつうに感謝したしモチベになった。

ステージ作りが苦痛に・プログラム以外の作業をなめてた(~2021年8月)

開発を開始してから、まずはステージ数をそろえることを目指しました。
このゲームのステージっていうのは、倉庫番の問題のことです。
ステージづくりを効率的に進めるための仕組みを作ったり、ステージギミックを作ったりのプログラム作業。
そして実際にステージを作る(プレハブで作ってました)作業・・・

最初の最初は40ステージ作りたかったんだけど、ステージづくりが思ってた以上にはかどらなくて、
途中から最低限25ステージをつくろう、と目標が変わってました。


思いのほか1ステージ作るだけでも時間がかかっており、
問題作りのスキルを身につけたいわけじゃないし、もうこれ以上作れん・・・。(疲れた)
みたいな気持ちにこの時点でなってました。

ステージクリア型のゲームなら、100ステージは必要だとよく言われていると思いますが、
既に2か月経過してるのに25ステージしか作れていないし、これ以上はステージ数を増やすのは気力的に無理になってきました。

※最終的に30ステージになりました。

あとこのころ、一番頭が働く時間にプログラムのタスクをいれるようにしていて、それ以外は後回し。
twitterをやることで絵のタスクは多少優先するようになったけど、
ステージづくりに悲してはかなりなめてたので一番後回しにしてたのもよくなかった。

これは今後ゲーム作るときに気を付けたいと思ってるのですが、
ゲームのメインとなる要素、それも量産しないといけないような要素については、
それを作成する作業自体が面白くないとやり続けられません…。(今回は時間に余裕があったのである程度ゴリ押ししたけど)
その作業自体がおもしろいかどうかも企画段階で見極めようと思います。

ゲームが完成しないのでストーリーを入れる(2021年9月~)

この時点で、ステージづくりには限界を感じてこれ以上は増やせないと感じつつも、
実装済みの25ステージだけではゲームになってない=完成させれてない とやはり感じてました。

ということでどうしようと思いながらもチュートリアルがまだ未実装だったのでとりあえず作っていて、
キャラに説明セリフを言わせているときに、
このままこの仕組みを使ってストーリーをつくろう!となりました。

私はゲームの要素で一番すきなのがストーリーなのもあって、この方向性にはやる気が出た。
ステージ25個じゃゲームになってないけど、
ストーリーありのステージ25個 ならまだゲームになるんじゃないかと思えた。

というわけで9月、10月はストーリーづくり。
ストーリーづくりといっても、まずゲームでそれを表現する機能がないんだから、1から作る(プログラム作業)

そしてストーリー自体を考えるんだけど、ほんとミクロに。
こういうはじまりして~最後はこういう感じでエンディングを迎える…
みたいなのを起承転結、4行くらいの文章でかいた超簡易プロット?みたいなのだけはじめに作った。

実際の会話とかはExcel → json → json読み込んで処理させる という作りにしたので、
Excelにしゃべるキャラと会話内容とか書くようなかんじだった。
f:id:snoopopo:20211207183911p:plain

ストーリーが目指した方向?というかイメージとしては、ポケモンの映画みたいなかんじだったりする…照。
最後は一見落着していい気分で終わる… そんなストーリーを実は目指してました。

ゲームを完成させるためにやったその他のこと

仕事を辞めた&Twitterで進捗を日々アップしてた 以外でこのゲームの開発期間やってたこと。

まとめることを意識・完成から遠ざかる行動をとってないか逐次確認

smokingwolf.blog.fc2.com
当時、ウディタ作者様へ勢いで質問してみたらなんと丁寧に解説して下さった。
(ずっと完成させられないと悩んでたとは思ってはいたけどこの時が2017年か…汗)

開発中はこの記事の内容(骨組みとかの話)を読み返して、
また完成から遠ざかる行動をとっていないかを逐次考えたりしてた。

進捗率を変わらないタスク管理方法にする

以前からタスクと作業にかかった時間をスプレッドシートで管理しているんだけど、
あらかじめ洗い出したタスクとは別に予想外にやらないといけないタスクとかが出てきてて、
タスクの全体数が変わるから進捗率が下がったりすることがよくあった。

これだといまいち進捗率を出している意味がなくなってくるので、進捗率が変わらないような仕組みにかえた。
具体的には進捗に反映するタスクとそうでないタスクを分けて、進捗反映するタスクの数は変わらないようにした。

それまでは今日3hやったから安心。みたいな気持ちもあったんだけど、
進捗率が増えているかどうかで、安心するかあせるかになった。

▼ちなみにこんなんです f:id:snoopopo:20211207184250p:plain

見た目のネタがなくなったら過去作からパクる

プログラマの自分は絵とかモデル作成のスキルが不足している以前に、
どういう表現をしたいか思いつかないことが多い。(昔から思い描いてるゲームとかなら別だけど)

そういう時は過去に作った(エターなった)ゲームから、見た目のネタをもらってきたりしてた。

ついに完成!

というわけで4か月598時間かかり、
2021/10/29に初回リリースをしました!(色々リリース時にバグもあったけど…)

この時点で、ストーリー部分は、間の補完は必要だけど、
最初~最後まで完結している状態 でリリースしたことで「完成した」とよーーーーやく思えました!

正直、人に良いと思ってもらえるゲームにはなっていない(というかそれは意識してない)し、
自分が作りたいものを100%作れた!みたいなこともない。(でも20%位は自分が作りたいものになった)
とにかく、完成。まとめる。ということを目指してそれができたと初めて思えた作品。
そういう意味では大好きだし(ゲームに)すごく感謝してる!

完成させた先には

・「ゲームが完成させれない」という心の負担は解消されていた…
 (あんなに何年も悩んでいたのに最近はそれ自体忘れかけてきてる)

・自分が”完成させた”と思えるボリュームやそれにかかる時間の1つの実例ができた
 →600hあれば少なくとも自分では完成できたといえるものができることがわかった

・「完成させる」の次の課題が見えたたくさん
 →インストール数すくねぇ…レビューもほしい
 →「そうこばん」ってタイトルにしたけどこれ倉庫番なのかな?
 →100%自信もって人に見せれない
 →なんか終わった感がまだしない(ストーリーの補完が終わってないからだと思う)
 →実際にかかった制作期間・時間よりもかかってないと思われそう。
 →開発方法で改善すべきところは多々ある
  →→無計画すぎた。まずは企画書は作ろう。終わりが見えないし、ゲームの方向がブレブレになる

・この先どう言う風に進んでいくか
 →本職と両立をしながらゲームを作る、に挑戦するしかない
  →→個人ゲームのみで生きていく、が本当にしたいのか?といわれると今は答えがでない。まだその力もない。
  →→本職の仕事もまだまだこれから。挑戦するのはまだ早いと感じる。業界にまだまだいたい。
 →小さく作る?(専業で4か月かかったなら本業と両立だと1年以上はかかってしまいそう)
  →→これはまだ悩み中。
 →2年位でたくさんお金ためて、またいつか個人開発専業期間を作りたい_( ´ω`)ペショ。