ゲーム開発作業週報#005 2024/11/18~2024/11/24
2024/11/18(月)
仕事。
先週金曜日に発生した、本番環境で特定の条件下でのみ生成されてしまう謎データの再現に成功。原因を特定できたので根性で修正とテストを行って無事改修したものの今日も残業。本番環境の障害なのでやむなしというところ。まあ、数万件のうち1件のみ発生したレアケースなのが不幸中の幸い。
帰ってきてご飯を食べてから『Unity超入門 やさしくわかるゲーム開発』進めていたのだが、昨日途中までやっていてスリーブ状態にしていたらPCの電源がなぜか落ちていて、途中までやっていたデータが飛んでた。これだから自動保存がないのがきつい。
ていうか、コーディングがしたいのでC#のほうに手を出したくなってきた。本を読むときは同時並行で3冊くらい読みたいタイプなのでudemyのほうもやってしまうかという気分になってきた。
いったん動画見てみよう。
2024/11/19(火)
仕事。
障害対応のテスト結果のエビデンスとプルリクエストを上流に投げたのでいったん落ち着いた。
手が空いたので新人君に自動化テストの説明。自動化テストって難儀だしすごいむつかしいし、習得に時間がかかる。いろんな人にjunit初めて触ったときどんな感じでしたか? みたいなヒアリングをしたことがあったのだが、はじめは全然わからなかった、という人が9割くらいでまあそうなるよね、むつかしいよねという気持ちになった。
ゲームの自動化テストってどうなってるんだ。パターンがありすぎて実装できるものなのだろうか? と思って調べたらちゃんとあるらしい。
読み進めてみたらかなりむつかしそうでとりあえず慣れてからでいいや。
今日はudemyで30分くらい動画を見た。いったんセットアップまで。Visual Studioを使うのは初めてでどんなもんかと思ったけれど、君VS Code君と全然違うくない? ちょっと触っただけだから他人だと思ってるだけ? shift + alt + F でフォーマットできないの?
Xを見ていたら偶然見つけた以下の記事を読んだ。
ふと思ったのだが、ゲームの情報ってどうやって保存するんだ? BDなのか? テキストで保存とかなのか? 後で調べないと。セーブ機能のアセットとかもありそうな気もする。
2024/11/20(水)
仕事。
今月末でフロントエンドを担当していた同僚が退職する。自分の担当はバックエンドだったので、自分の開発した機能のフロント部分をいつも担当してくれていた。出社するたび隣の席で仕事をしていた(うちの会社はフリーアドレス)ので、とても残念なのだが、この会社なら転職してもしょうがないかというような諦めの感情もあり、新たな門出を快く送ることしかできない。会者定離。
もちろん同僚は、会社に報告する前から自分に退職の意を伝えてくれていたので、引継ぎどうしようかという話をしていた。結果その同僚が教えている同じフロントエンドを担当している才能のある新人に任せようということでいろいろ教えていたところ、本日その新人も退職することが判明。時期は12月末。
現状、フロントエンドは10月に縮小の憂き目にあい2人しかいない。つまり、来年になったタイミングで誰もいなくなってしまう。「これ、完全に終わったのでは???」と思わず口からこぼれてしまった。PMが頭を抱えてた。
引き続き今日もudemyでシナリオしまづさんの動画を見る。
C#、変数名をパスカルケースで書かないといけないのでなれない。Javaみたいにキャメルケースで書くと警告が出るのが若干ストレスなのだが、慣れるまでやっていくしかない。
あれ、Visual Studioもしかして自動保存機能がない? は? これも慣れるしかないんか???????????
コーディングの動画を見ているのだが、クラス名を宣言しているところでこのような書き方をしている。
public class PlayerMove : MonoBehaviour
MonoBehaviourっていうのは、スーパークラス的な? こいつを継承してると
void Start()
とかが使えるようになるみたいなあれなのか? と思い調べてみたらちゃんとスーパークラスっぽくてよかった。こういうのがわかるとjavaやっててよかったねとなる訳だ。オブジェクト指向。
推測するにunity開発するうえではMonoBehaviourを使用しないルートは考えられないみたいな立ち位置なのを感じる。それを踏まえた時点でほかに気になる記事があり、
これはあれか、過激派ってやつなのか? と思ったがまだ中身を理解できてないので評価は保留とします。
新しいこと覚えるの楽しすぎわろた。
作業のお供に聞いている配信者が、「フィリップスの製麺機がマジでいい、生産終了してるぞ」みたいな話をしていて、欲しくて欲しくてしょうがなくなってきた。助けてくれ。
2024/11/21(木)
仕事。
今日もいろいろあったのだが、今日の内容は書ける内容ではなかった。
引き続き今日もudemyでシナリオしまづさんの動画を見る。
UnityEngine.UI.Textの説明を観た。情報が古いらしく現状はTMProクラスのTextMeshProを使うのかのどちらからしい。TextはLegacy配下においてあるので使わないほうがいいのか? と思い調べる。

今年の1月の記事なので問題ないだろうという判断。
記事の中で昔の記事はTextを推奨するのが多いらしい。もしかしたらアプデで使いやすくなってるのかもしれないし。というかTextMeshProにデメリットはない、とまで断言してる。後で独学しよう。
C#なんとなくわかって書き方がなんとなくわかってきて、
using UnityEngine; // ← usingはjavaでいうinport っぽい
using UnityEngine.UI;
public class NewEmptyCSharpScript : MonoBehaviour // ← :はjavaでいうextendsっぽい
{
private void Start()
{
}
}
ただ、本当にキャメルケースで書きたい。
2024/11/22(金)
仕事。
今日は出社。
新人君の成果物に行った指摘内容が正しく修正されているかを確認する、くらいの仕事しかないにゃんね~、思っていたが、午後になったとたんPMから「来週の月曜まで製造してください!」と言われて出来立てほやほやの設計書を見ながら急ピッチで製造を開始する。全然難しい内容ではなかったのでなんとかなりそう。
APIを叩いて正しい値が戻ってきたのを確認したのは、定時を10分ほど過ぎたころだった。雑な動作確認は終わったので、あとは来週自動化テスト実装して、エビデンスとったらまあ期限までに終わるっしょ、問題なく月曜日で終わる旨を報告して退社する。
今日も引き続きudemyの動画でunityの勉強をする。
今回はimageコンポーネントについていじっており、適当にスクショした画像を貼り付けようと思ったら以下のエラーがでる。
Only textures with width/height being multiple of 4 can be compressed to DXT1|BC1 format
Copilotで確認すると、
このエラーは、UnityでテクスチャをDXT1またはBC1形式に圧縮しようとした際に、テクスチャの幅または高さが4の倍数でない場合に発生します。DXT1/BC1形式の圧縮は、特定のサイズ要件を満たす必要があります。
とのこと。4の倍数の画像を用意しておかないといけないらしい。本当かよと思ったが、なんか画像の圧縮に失敗して上記のエラーが出てるっぽい。表示されているエラーと関係ない警告が含まれているあるあるメッセージ。
よくわからないが画像のフォーマットを変更したら上記の警告が出なくなった。

ということで Source Imageに設定しようと思ったらまた別のエラーが表示された。
The associated script can not be loaded.
Please fix any compile errors
and assign a valid script.
スプリクトが読み込めないって言ってるので、いろいろ調べたところ
Assets から Reimport Allで再インポートでワークスペース再読み込み的なものができるっぽいのでやってみたのだが結局解消しなかった。
ほな適当にしらみつぶしにいじってみるか思い、適当に触ったら一発であたりを引いた。
Sprite ModeにMultipleが初期設定されていたのでSingleに変更したところ、Assetsに入れたスクショ画像errが階層化して画面にスクショが登録された。原因はよくわからないので後で調べる。


いつの間にか深夜2時をすぎていたのでいったんここで止める。まだまだできそうだったが明日は何も予定が入っていないので、ゆっくり進んでいこう。
いやー、今日も賢くなってしまった。
2024/11/23(土)
あまり寝付けなくて8時くらいで目が覚めた。寒かったので熱々の茶を入れてunityと関係ない本を少しだけ読む。
腹に何か詰めようと思って冷蔵庫を開けたらほとんど食料がなかったので買いに行く。
八百屋ででかいマッシュルームが安くてうれしかった。ハンバーグと一緒に焼いたらおいしそう。
スーパーで真鯛のカブトとアラが298円売っていた。悩んだ挙句買う。カブトはあら炊きにして、中骨は潮汁、尾はご飯と一緒に炊いてしまえば割と味がでるので鯛飯風にする。
昔そんな扱い方をしている動画を見たなあ、と思って探してみた。
普通にいい動画やん。内容を確認したらカブトは潮汁にしていたね。でも今回はしっかり食べたいから煮込んじゃお。
ニコニコ動画なのが時代を感じる。投稿者は途中からyoutubeに移行して現在投稿停止中。正直ニコ動でコメント見ながらのほうが楽しい動画だと思っていた。
中の人はちゃんと別のことして生きてるっぽいので何時かの復帰を待っている。
ほかに鶏むね肉を1kgほど購入し、帰ってから1週間分のサラダチキンを仕込んだ。
ご飯を食べたらさすがに眠くなったので、仮眠をしてunityの勉強を開始する。
機能に引き続きimageコンポーネントのについて動画を見ていたのだが、それよりもアクセス修飾子の挙動が気になった。サンプルソースが以下。
using UnityEngine;
using UnityEngine.UI;
public class ImageChange : MonoBehaviour
{
// アクセス修飾子がpublic
public Sprite newSprate;
private void Start()
{
Image image = GetComponent<Image>();
image.sprite = newSprate;
}
}
フィールドに宣言してるnewSprateがpublicになっている。
unity上だとこうなる。

イメージに紐づけたscriptの箇所に、宣言したnewSprateが表示されている。
これってprivateに変更するとどうなるんだ? と思い実施してみた。
using UnityEngine;
using UnityEngine.UI;
public class ImageChange : MonoBehaviour
{
// アクセス修飾子をprivateに変更
private Sprite newSprate;
private void Start()
{
Image image = GetComponent<Image>();
image.sprite = newSprate;
}
}
newSprateをprivateに変更した結果がこうなる。

つまり、privateのアクセス修飾子がついているということは、そのファイル(この場合ImageChange)以外からprivateが付与されている機能(この場合newSprate)の処理ができないということなのだが、unityの画面からアクセスする行為もファイル以外になるので駄目なんだな。
挙動を見てよくよく考えてみたら、privateをつけてる変数にunityの画面からアクセスできたらカプセル化の概念から逸脱しちゃうもんね。プレイヤーがいじれる値になってしまう。javaやっててよかった案件その2。
ていうかnoteのコード欄くそ使いにくいのだが、どうなってんだ。コンフルって使いやすかったんだな・・・・・・ 表も使えるようにしていただきたいなあ。
2024/11/24(日)
起きたら少し寒いし喉が痛かった。室温は16℃。冬場でのキープすべき温度は22℃から18℃みたいな確証ない話を思い出したので、しょうがないかと暖房を入れ20℃に設定した。これで体調が戻ってくればそれでいい。自分もおっさんなので体調に気を使わないとすぐ躰が壊れてしまう。
朝は読書。一応読書メモを取るようにしているのだが、正直面倒くさいなあと思っていた。
ふと、iPhoneの音声認識で書けるのか試してみるかと思い、実行してみたらなかなか精度がいいではないかと感動した。これができるならNotionあたりで腰据えて読書メモ作ったっていい。少し調べるか。
昨日買った鯛を調理する。鯛は鱗が頑丈だが、うちには鱗取りなんてものはないので厚さ4mmある小型ナイフで頑張って落とす。鱗がいたるところに散らばって大変なことになったが楽しくはある。
鱗を落として水洗いすると小さく油滴が浮いてきたので、油がのってるようで嬉しい。こういうところに幸せを感じる。霜降りして生姜で煮込んだ。
他の時間で鯛めしカッコカリを作る。トレイの中を確認したら、頭と中骨だけで、尾っぽ入っていなかった。
しょうがないので、胸びれや背びれを切りとり、15分浸漬10分ザル上げした米と一緒に鍋に入れた。ついでに千切りにした生姜と昆布入れて、米の重量の1%の塩、水分量は昆布が水を吸う量を考えて、米の1.3倍投入する。ちなみに普段は1.1倍。
残った中骨に塩を当て放置する間に、小鍋に水と昆布を入れ、中骨の間に詰まった身から水分が出始めたところで軽く洗い霜降りをする。鯛は骨が硬すぎるので自分が持っている牛刀では切れない。仕方なく手で折ったり、キッチンバサミで無理矢理割るではなく、割るが正しいような気がした。
沸騰しすぎないように丁寧に炊いていく。少しずつアクをとって可能な限り透明感を維持する。具材にちょうど良いのが思いつかなかったので、白ネギを刻んだ。
そうして、まぁできたもんだが、頭が途中で崩壊して見栄えが悪くなったので写真は撮っていない。自分は顎周りの肉と眼球が好きです。おいしかった。300円でこれなら全然あり。
というわけで、今日もUnityをやっていくのだが、今日はあまり進展がなくというか、特に目新しいこともなく、純粋に動画で起こった内容を淡々とやっていた。
Unity、どうしてもUnityのUIとC#の画面を開かないといけないので、2画面以上ないと効率が非常に悪い。現状は外部モニター1とノートPC本体の1画面でやっているのだが、1つは動画でつぶしているので、あまりにも効率が悪い。
新しいMac miniが3画面対応していると言うことで非常に気になっている。ストレージが256Gでも十分に使えるのではないかと言う期待。あと会社から貸与されたPCのスペックが足りない。あまりにも重たく、VisualStudioの画面で保存したスクリプトがUnityの画面で反映されるのに10秒近くかかるのが気にかかる。