Unity何も分からん

UnityでVTuberシステムの開発したり、ゲーム作ったりしてて学んだことを書いていく予定

UE × AIコーディング (ClaudeCode) 半年間試してみた

概要

Unreal Engine (UE) Advent Calendar 2025 の15日目の記事です
他の人の開発手法が気になる今日このごろなので
まずは自分が半年間試行錯誤した上で行っている開発手法を公開してみようと思いました!


現在の開発環境の構成

  • Windows11
  • Rider 2025.2.5
    • Riderは非商用利用であれば無料なのでまじおすすめ
  • ClaudeCode 2.0.69
    • メインのコーディング
  • Codex
    • コードレビュー用
  • PlasticSCM
  • UnrealEngine 5.5

Copilot使ったり、Cursor試したり色々してましたが
ここ3ヶ月くらいはこれで開発して結構快適!

代替可能そうな構成

  • ClaudeCode → Codex
    • 色んな記事見る限り今ならCodexのがいいかも?
  • Rider → VisualStudio

ClaudeCodeのセットアップ(必要だったら見てね)

Claudeのインストール

npm install -g @anthropic-ai/claude-code@latest

claude

npm使えないならnode.js入れてね

RiderのClaudePluginの追加

設定から追加できます

プロジェクトルートに CLAUDE.md を配置

プロジェクトの構造、ビルドコマンド、アーキテクチャ情報をまとめたファイルを用意することで、ClaudeCodeがプロジェクトの文脈を理解できます。

初回に自動で作ってくれますが、追記しても良いかも

VLSPluginDev/
├── CLAUDE.md
├── VLSPluginDev.uproject
├── Source/
├── Plugins/
│   ├── VLS/
│   └── VLS_CGToolKit/
└── Content/

ちなみに自分のはこんな感じ Claude.md · GitHub


基本の開発方法

設計を考えて依頼、作ってもらったものを動作確認してレビューを行う人になってます

  1. 作りたい機能のタスク化、1タスクで1つのことを実装する粒度で
  2. タスクをClaudeCodeに実装してもらう
  3. ClaudeCodeでビルド&デバッガでの起動を行う
  4. 動作確認を行う
    → 修正が必要であれば5へ、不要であれば6へ
  5. 修正内容をClaudeCodeに投げる、3に戻る
  6. ClaudeCodeでバージョン管理を行う
    → 完成であれば終わり、必要なタスクが残っていれば2へ

UE × Rider × ClaudeCode を使う上でのTips

uprojectを開くこと

ソリューションファイル(sln)の再生成が不要になります
VS2022でもそうなってるね
Visual Studio で Unreal Engine プロジェクトを開く | Microsoft Learn

Unityから移行した時はこの作業のせいでUE嫌いだったなぁ~

ClaudeはwindowsならGitBash上で動かすこと

公式ドキュメントにも書かれてるのですがPowershellと相性よくありません

Shell: Works best in Bash, Zsh or Fish

Set up Claude Code - Claude Code Docs

ClaudeがBashコマンドを実行しようとしてコマンドが使えないってエラーを吐いて Powershell用に書き換えて実行し直してることないですか?それが無くなります
実行速度やコンテキストにも影響すると思います

JetBrainsのMCPServerのPluginを使う

Riderの機能を一部Claudeから呼び出せるようになります
一番便利なのはコード修正→ビルド→UE起動の一連の流れをClaudeで行えるようになること

ModelをSonnet1Mにする

コード量やSessionがある程度の大きさになってくるとContext量が足りずConversationCompactの頻度が高くなってイラつきますよね
/model からModelをこれに変えると解消されます
使用量も上がるので気をつけて

ターミナルタブから「エディタに移動」させる

ターミナルタブでいじってるとESCがフォーカスを外すボタン扱いになっていたり色々使いづらいので一つのタブにしちゃいましょう

ctrl + J で改行

これはどのAIコーディングツールでも一緒なんですがCLIで指示する場合 ctrl + J で改行できます


実例

今回実装した機能

LevelSnapshotのようなPluginであるActorSerializationを自作しました
指定したActorのその時の状態をバイナリとして保存、復元でき、外部にJSONとして出力できる機能です
その時の開発の流れを書いていきます
Projectに一部依存しているところを修正して記事にしているので実際の入出力とは違いますがご了承ください

Phase0: 記事を書くために履歴を取得 この記事を書くことをタスク実装時は考えていなかったのでどういうやり取りをしていたか 思い出すためにこの作業を行いました

/resumeで見れる履歴ってどこに保存されてるの?

● Claude Codeの履歴保存場所について、公式ドキュメントを確認します:
● Fetch(https://code.claude.com/docs/en/claude_code_docs_map.md)
⎿  Received 25.7KB (200 OK)
~~~~~~
● 見つかりました!
履歴の保存場所
~/.claude/history.jsonl (約189KB)
このファイルに会話履歴が保存されています。

履歴ファイル見つけた!ありがとう!
俺からのチャットしか載ってないけどResumeするとClaudeからの回答もちゃんと戻るよね
これってどこか別のところに保存されているの?

history.jsonlの中身を確認して、どのような形式で保存されているか見てみましょう:
Bash(head -20 ~/.claude/history.jsonl)
… +125 lines (ctrl+o to expand)
~~~~~
Claude側の応答はローカルには保存されていない可能性が高いです。代わりに:
1. サーバー側に保存: sessionIdをキーにAnthropicのサーバーに保存
2. /resumeの動作:
- ローカルのhistory.jsonlからsessionIdを取得
- サーバーにsessionIdを送信
- サーバーから完全な会話履歴(Claude側の応答含む)を取得

見てもらえると分かると思うんですけど友達みたいに会話してますw
AIとのやり取り見せるのちょっと恥ずいっすよね

Phase1: ブランチ作成

今回はバージョン管理も含めAIで任せようと思うのでここも任せます

指示内容

「レベル上に存在するActorをSerializeDeserialize出来る機能を作ろうとしています。
PlasticSCMでcmコマンドを使い、現在のブランチから、ブランチを切って始めてください。
ブランチ名はfeature_serialize_dataとかでいいです。」

出力
ブランチの作成と移動

Phase2: 初期実装

指示内容1
「Level上に存在するActorをDataTableにシリアライズとデシリアライズする機能を作りたいです。 シリアライズしたデータは今後JSONとして使用する予定があるのでその点も考慮してください。」

動作確認
ビルドエラーだったり細かいところを修正後、SerializeとDeserializeは一旦動作確認が取れた。

指示内容2
PlasticSCMで現在の変更内容を見て、適切なコミットメッセージを日本語で書いてCheckinして。

コミット履歴


Serializationフォルダと3つのファイルを新規作成  
- ActorSerializationStructs.h: FVLS_SerializedActorData構造体  
- ActorSerializationBPFL.h/.cpp: シリアライズ/デシリアライズ関数  
- ActorSerialization_Usage.md: 使い方ドキュメント  

実装機能  
✓ バイナリシリアライズ/デシリアライズ  
✓ JSON形式でのTransform/Component/Property抽出  
✓ DataTable保存・取得  
✓ CSV出力対応  

Phase3: バイナリファイル分離

課題
初期実装ではバイナリデータをDataTable内に直接保存していたため、DataTableが肥大化し、エディタでの閲覧するとクラッシュするようになった。

また、ActorのAttachment情報が保存されていなかったのでComponentの親子関係が維持できていなかった。

指示内容1
DataTableがクラッシュが開くとクラッシュするようになってしまいました。ログを見ると原因としては恐らくDataTable内に書かれたバイナリをエディタ上で見ることでクラッシュしてそうです(ログを添付)。どう思いますか?

出力

原因としては合っていそう

バイナリを別データファイルにするかどうかの提案

指示内容2

バイナリデータをDataTable内ではなく、別ファイルとして保存するように変更し、そのリンクを持つようにして。保存先はSaved/にフォルダを作ってその中に。ファイル名はCut名とActorIDNameから命名するように。

出力

BinaryDataFileを.bin形式で保存するような機能の追加

バイナリパスをDataTableに保存するように変更

動作確認

バイナリデータが分離されていることを確認

DataTableが開けるようになっていることを確認

DataTableにアクターのComponentの親子情報が保存されていないことを発見、DeserializeをするとComponentが全て並列になる

BP_Person

├── SkeletalMesh
└── TextRender

指示内容3

「ActorのComponentの親子関係が保存されておらず並列になってしまっているのでAttachment情報を保存して」

出力

Attachmentを追加するために構造体を追加

動作確認

BP_Person

└── SkeletalMesh
 └── TextRender

のようにAttachment情報が付与されてDeserialize出来ることを確認

コミット履歴

✅ バイナリは別ファイルとして保存するように

変更内容:

- FActorSerializedActorDataにBinaryDataFilePathを追加
- FActorSerializedComponentData構造体を追加(アタッチメント情報含む)
- バイナリデータをSaved/ActorSerialization/{Map}_{ActorIDName}.binとして保存
- バイナリファイルパスを自動生成

Phase4: パスの相対化
Phase5: カスタムEnum対応
Phase6: JSONフォーマット修正
Phase7: 複雑なプロパティ対応
Phase8: Actor追跡とコンポーネント復元
Phase9: バッチ処理とUndo対応
Phase10: DataAsset移行

書き出すの大変すぎて途中で諦めた

所感

このPlugin作るのにコードを9割以上は書いてもらいました、すごい!

UE5.5で使えない関数を呼ぶことがほぼなくてストレスフリーでした
Engineの内容をコンテキストとして含めてるんですかね?


最後に

UEでAIコーディングを使っての開発手法が詳しく書かれている記事が
あまり見当たらなかったので書いてみました
みんなはどんな風に使ってるのかな~

【UnrealEngine / UE5】新しいPCで既存プロジェクト(要ビルド)を開くまでのメモ(Mac版も対応)

新しいPCにセットアップする時に毎度詰まってるのでメモ!

Windows


EpicGameLauncherを入れる

https://store.epicgames.com/ja/download

エンジンをインストールする

EpicGameLauncherを一度終了しもう一度開く(.uprojectを関連付ける)

VisualStudioをインストールする

Optionとして必ず以下を含める(ビルドに必要)

バージョンはPC間で合わせて入れてる
公式の対応バージョンは以下
Unreal Engine で C++ プロジェクトの Visual Studio 開発環境をセットアップする | Unreal Engine 5.4 ドキュメンテーション | Epic Developer Community

.uprojectから「Generate Visual Studio project files」を行う


(任意)Riderをインストールする

VisualStudio(or Rider)で.slnファイルを開く

Project 'UE5' load failed / Project '[Project名]' load failed って出る場合
Explorerで [Project]/Intermediate/ProjectFiles を確認
UE5.vcxprojと[Project名].vcxprojが恐らくない

.uprojectから「Generate Visual Studio project files」を行う
生成できたら.slnを開き直す

生成できなかったらVisualStudioのOptionを入れ忘れてる
インストーラーをもう一度実行し以下を選択する

終わったらも一度.uprojectから「Generate Visual Studio project files」を行う
これで出来なかったらわからん...

ビルドして終わったら開く


Macの場合


EpicGameLauncherを入れる

エンジンをインストールする

VisualStudioをインストールする

XCodeを入れる、最新にする

GenerateXCodeProject

自分の場合はなんか二つ出てきたけどUnealEditorServicesの方しか効かなかった

[Project]/Intermediate/ProjectFilesに
UE5と[Project名]の.xcodeprojが出来ているのを確認

UE5.xcodeprojを開きXCodeからビルド

ソースから Unreal Engine をビルドする | Unreal Engine 5.2 ドキュメンテーション | Epic Developer Community

ビルドして終わったら開く

【UnrealEngine】Riderでビルドできない時用のメモ

エラー起きたら追記していく

Expecting to find a type to be declared in a module rules named ‘RD’ in UE5Rules, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null. This type must derive from the ‘ModuleRules’ type defined by Unreal Build Tool.

原因

RDはRiderLinkのこと
UE5ではRiderLinkはGame/Pluginに置かなきゃいけないのに、Engine/Plugin下に入っているとビルド時にエラーが起きる模様
でもビルド通ることもあってある日突然エラー吐かれて???ってなった

対処方法

  1. $Engine$/Developer/RiderLink ディレクトリごと削除する
    $Engine$はデフォルト"C:\Program Files\Epic Games\UE_X.X"
  2. Riderを再起動もしくはTools/RefreshRiderProjectする
  3. RiderLinkをGame以下に入れるか聞かれるのでOKを押す
    出ない場合はメニューのFile/SettingsからLanguages&Frameworks/UnrealEngineにInstallRiderLink in Gameというボタンがあるのでそれをクリックする

よく見たらInstall~EngineにDoesn't work with UE5 from Epic Games Launcher. UE5では動かないよ、って書いてある...なんでこんな項目あるんだろ...

参考

UE5.1 Expecting to find a type to be declared in a module rules named '......' - C++ - Epic Developer Community Forums

Trouble creating C++ project in UE5 EA - #5 by DerUhu - C++ - Epic Developer Community Forums

Riderで略語やGPTなどの大文字続きにWarningが出ないようにする

問題

例えばChatGPTと打つとChatGpt命名スタイル的に合ってるよ、と怒られる
Suggested name is 'ChatGpt'.

解決方法

命名スタイルと異なる単語を略語リストに登録する

  1. Warningが出ている単語にキャレットを設定(入力をその単語に合わせる)
  2. Alt+Enter もしくは コード列の左に出ている電球マークを押しアクションリストを開く
  3. Inspection: 'Inconsistent Naming'からAdd 'GPT' to the abbreviations listのどれかを選ぶ

設定の保存場所

3で選んだ項目により場所が違う

  • This computer
    %USERPROFILE%\AppData\Roaming\JetBrains\Rider{Riderのバージョン}\resharper-host\GlobalSettingsStorage.DotSettings
  • Solution team-shared
    {プロジェクト名}.sln.DotSettings
  • Solution personal
    {プロジェクト名}.sln.DotSettings.user

<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=GPT/@EntryIndexedValue">GPT</s:String>
このような記述がされているので文字列を削除すれば設定は消える
行ごと削除しようとすると後ろに別の閉じタグがついていたりするので確認して消すこと

【Unity】MacでEditor上で文字化け、潰れが起きた時の対処法(PackageManager、AssetStore、Services、UIToolKit等)

起きる内容

EditorのWindowを開いた際に下記のような文字化け、潰れが起きます
PackageManagerとか見れないと困る...

発生したバージョン

Unity2020.3.43f1以前

対処方法

  • 可能ならバージョンを上げる
  • Auto Graphic API for MacOS を変更する

可能ならバージョンを上げる

この問題はUnity2020.3.43f1で修正されています
それ以前のバージョンが必須でないならバージョンを上げてしまうのがベストです

Auto Graphic API for MacOS を変更する

バージョンを上げられない場合は
Auto Graphic API for MacOS を「Metal」から「OpenGL Core」に変更することで対処可能です

デメリットとして
Unityのパフォーマンスが低下する模様です。
ビルドする際などは「Metal」に戻す必要がありそうです。

手順

  1. Edit/ProjectSettingのPlayerタブを開きます
  2. OtherSettingsの「Auto Graphics API for Mac」のチェックを外します
  3. Graphics APIs for Mac という配列が表示されるので「+」マークを選択し、「OpenGL Core」を追加します
  4. OpenGL Core」の順番がMetalより下になっているので一番上に上げます

上記の手順をするとEditorを再起動するか聞かれるので再起動します

これで文字化けが解消されます

参考サイト

forum.unity.com

【Unity】Riderで1行Summaryを使えるようにする(LiveTemplate)

できること

1行Summaryが使える

/// <summary> </summary>

やり方

Preferencesの「Editor/LiveTemplates/C#」を開く

右上の赤丸が「NewTemplate」ボタンなので新しいTemplateを作成する

/// <summary> $END$ </summary>

このように設定して保存
設定についての説明は最後に書いておきます

使い方

コード上で「sum」と入力すると予測変換で出てくるので選択して使えます!

説明

$END$ はこのLiveTemplateを使った後のテキストカーソルの位置

パラメータ説明

雰囲気で使ってる部分もあります

  • Shortcut
    • コード上でこの文字を打った時にこのLiveTemplateを使える
  • Description

    • 説明
  • Options:

    • Reformat
      • コード整形を行うか(多分その付近を整形してくれる)
    • Shorten qualified references
      • 名前空間などから出来るだけ短い参照にする
  • Availability
    • どのバージョンから使用可能か
  • Use in
    • Generation
      • 通常の使い方
    • Surround
      • 選択した部分を囲う
      • () とかはこれ
    • Both
      • どちらも
      • for とかはこれ
  • Mnemonic
    • ブックマーク的なことができるらしいけど上手く使えてない...
  • Show in context action
    • 「option + Enter」 or 「Alt + Enter」を押したときに表示するか

【Unity】UnityRecorderで画面のスクショを撮る(Script不要、透過・連番・グリーンバック可能、解像度自由)

環境
Unity 2021.3.3f1
UnityRecorder 3.0.3

できたもの

今回やりたかったこと

  • Scriptを使わずにスクショを撮りたい
  • Game画面のサイズに合わせた画像が欲しい
  • 透過画像も撮りたい

いくつかプロジェクトがありそれぞれでScreenShot撮りたい場合、ScriptやPrefabをコピペするのがめんどくさくてこの方法を使ってました

手順

シーンの設定

Cameraの設定

  • ClearFlags: SolidColor
  • BackGround Alpha: 0
    背景の色を決めているのでグリーンバックにしたければ #00FF00 にしつつAlphaを255にすると良いです

撮りたいオブジェクトを配置

今回はLive2D公式のSampleキャラクターを配置してます

UnityRecorderの設定

UnityRecorderをInstallする

Window/PackageManager」のUnityRegistryにあります

Recorder画面の設定

Recorderを追加

「Window/General/Recorder/RecorderWindow」でWindowを開き
AddRecorderからImageSequenceを選択します

設定

  • FrameRate

    • TargetFPS: Custom
    • Value: 1
      → 1秒間に何回スクショを撮るかの設定なので、連番画像を撮りたい場合は30や60、29.97などにすると良いです)
  • Capture

    • Source: GameView
    • OutputResolution: MatchWindowSize
      → GameViewのSizeに合わせて撮る設定です、お好みで変えてください
      → GameViewのSizeを4Kなどにすればその通りの画像が書き出せます
  • Format

    • MediaFileFormat: PNG
      JPEGは透過画像に対応していないのでPNGにしています、透過にしないならJPEGでもOKです
  • OutputFile
    スクショが置かれる場所とファイル名などが設定できます、お好みで

    ここを押すと画像の保存先が開けるので便利です

撮影する

「START RECORDING」を押すとUnityがPlayされます
録画が開始され1秒ごとに1枚写真が撮られるので必要な画像が撮れたか確認したければ「STOP RECORDING」
止めてよければUnityのSTOPをします

OutputFileの対象ディレクトリにこのように画像群が保存されているので必要なものだけ残して削除してOKです

完成

最初に載せた画像が撮れました、わーい

【Unity】TextMeshProでネオン風のテキストを作ってみた

環境

  • Unity 2021.3.8f1
  • TextMeshPro 3.0.6

できたもの

今回やりたかったこと

  • Unityのデフォルト機能のみでネオン表現が出来る
  • テキストを簡単に変更できる

注意点
立体感は出ない

手順

PackageManagerでTextMeshProのInstall

Window/PackageManager」から開けます

ネオン風のFontをDL

今回使わせていただいたフォント
www.graphicpear.com

個人&商用利用無料(クレジットは必要)とのこと
NEONEON - FREE FONT on Behance

フォントからTextMeshProのFontAssetを作成

.otfファイルが入っているのでそのままUnityのアセットに追加
フォントファイルを右クリックし、「Create/TextMeshPro/FontAsset」を選択することでサクッとFontAssetが作れます

パラメータ設定とかしたい場合は「WIndow/TextMeshPro/FontAssetCreator」から作成するといいっぽい?

FontAssetからMaterialを作成

Project上のFontAssetを選択し、Inspectorの右上の縦3点リーダーから「CreateMaterialPreset」を選択します
これをしておくと共通のMaterialでなく個別のMaterialとして設定できます

TextMeshProを作成し設定する

オブジェクト作成して背景とかフォントサイズとか変えただけの状態

TextMeshProのComponentのプロパティを変更


変更点

  • FontAsset
  • MaterialPreset
  • VertexColor #3643FF

Materialの値を変更


変更点

  • Face Softness
  • Outline Color Alpha 204
  • Outline Thickness
  • Glow Color R:0 G:7 B:255 A:125 Intensity:0
  • Glow Offset
  • Glow Outer
  • Glow Power

完成!

TextMeshProでいい感じのネオン表現が出来た気がします

Play中にテキストを変更することも可能です

追加でやったこと

日本語に対応させる

このままだとNeoneonのフォントが日本語に対応していないため文字化けします

NeoneonのFontAssetのFallbackFontAssetsのFallbackListに、フォントが見つからなかった際に使うFontAssetを設定しておきます

今回使わせて頂いたフォント booth.pm

Fallbackする文字は「まるこいあすフォント」を使うように変更できました
(別フォントなので違和感はある)

別の文字色を使う

オブジェクトとMaterialを複製して色を変えるというゴリ押し...
悲しみ...