<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Unrealengine on Wuyukwi's Notebook</title><link>https://wuyukwi.duckdns.org/tags/unrealengine/</link><description>Recent content in Unrealengine on Wuyukwi's Notebook</description><generator>Hugo</generator><language>ja</language><lastBuildDate>Wed, 11 Mar 2026 19:31:51 +0900</lastBuildDate><atom:link href="https://wuyukwi.duckdns.org/tags/unrealengine/index.xml" rel="self" type="application/rss+xml"/><item><title>🙌 なぜ Unity は C# を選び、Unreal は選ばなかったのかについての個人の考察</title><link>https://wuyukwi.duckdns.org/posts/zenn-97b70df23bd792/</link><pubDate>Wed, 11 Mar 2026 19:31:51 +0900</pubDate><guid>https://wuyukwi.duckdns.org/posts/zenn-97b70df23bd792/</guid><description>&lt;blockquote&gt;
&lt;p&gt;📌 &lt;em&gt;この記事は &lt;a href="https://zenn.dev/wuyukwi/articles/97b70df23bd792"&gt;Zenn&lt;/a&gt; に投稿した内容のアーカイブです。&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h1 id="はじめに"&gt;はじめに&lt;/h1&gt;
&lt;p&gt;ゲームエンジンの言語の話になると、よくこんな対比が出てきます。&lt;/p&gt;
&lt;p&gt;Unity は C#。&lt;br&gt;
Unreal は C++ と Blueprint。&lt;/p&gt;
&lt;p&gt;この違い、ただの好みではありません。&lt;br&gt;
エンジンの設計思想そのものに関わっています。&lt;/p&gt;
&lt;p&gt;C# が優れているとか、C++ が古いとか、そういう単純な話ではない。&lt;br&gt;
両者はそもそも目指している開発体験が違うのです。&lt;/p&gt;
&lt;hr&gt;
&lt;h1 id="unity-が辿った言語統一の歴史"&gt;Unity が辿った言語統一の歴史&lt;/h1&gt;
&lt;p&gt;今でこそ「Unity といえば C#」という印象がありますが、最初からそうだったわけではありません。&lt;br&gt;
初期の Unity では、開発者のバックグラウンドに合わせて複数の言語を選択できるのが特徴でした。&lt;/p&gt;
&lt;p&gt;具体的には次の3つです。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;C#&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;UnityScript&lt;/strong&gt; （JavaScript 風の独自言語）&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Boo&lt;/strong&gt; （Python 風の言語）&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;当時の Unity は「スクリプト言語の自由度」を売りの一つにしており、Web 開発者は UnityScript、Python 系に慣れている人は Boo、という具合に選べるようになっていました。&lt;/p&gt;
&lt;p&gt;しかし、この方針は長くは続きませんでした。&lt;/p&gt;
&lt;p&gt;Unity 2017 頃から段階的に非推奨となり、&lt;br&gt;
&lt;strong&gt;Unity 2019.1 を最後に UnityScript と Boo は完全に削除&lt;/strong&gt; されます。&lt;/p&gt;
&lt;p&gt;結果として、Unity のスクリプト言語は &lt;strong&gt;C# のみ&lt;/strong&gt; に統一されました。&lt;/p&gt;
&lt;p&gt;参考&lt;br&gt;
&lt;a href="https://discussions.unity.com/t/which-release-removed-support-unityscript-and-boo/1624299"&gt;https://discussions.unity.com/t/which-release-removed-support-unityscript-and-boo/1624299&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;なぜこうなったのか。理由はいくつかあります。&lt;/p&gt;
&lt;p&gt;まず、複数言語の維持コストです。&lt;br&gt;
エンジン側はコンパイラ、ツールチェーン、デバッグ環境などをすべてサポートし続ける必要があります。&lt;/p&gt;
&lt;p&gt;さらに重要なのは、UnityScript と Boo の実態です。&lt;br&gt;
これらは見た目こそ別言語でしたが、内部では Mono 上で動作するスクリプトでした。&lt;/p&gt;</description></item><item><title>📃 UE5 における Gameplay Ability System ＆ Game Features を「いつ使うべきか」という個人的な考察</title><link>https://wuyukwi.duckdns.org/posts/zenn-a3cb27df6b605c/</link><pubDate>Wed, 21 Jan 2026 20:30:30 +0900</pubDate><guid>https://wuyukwi.duckdns.org/posts/zenn-a3cb27df6b605c/</guid><description>&lt;blockquote&gt;
&lt;p&gt;📌 &lt;em&gt;この記事は &lt;a href="https://zenn.dev/wuyukwi/articles/a3cb27df6b605c"&gt;Zenn&lt;/a&gt; に投稿した内容のアーカイブです。&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;UE5 には &lt;strong&gt;Gameplay Ability System（GAS）&lt;/strong&gt; や &lt;strong&gt;Game Features（GF）&lt;/strong&gt; といった、拡張性と再利用性を強く意識した公式フレームワークが用意されています。&lt;/p&gt;
&lt;p&gt;最近では Epic Games もこれらの利用を積極的に推奨しており、&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;「公式が用意しているのだから、最初から使うべきでは？」&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;と感じる方も少なくないと思います。&lt;/p&gt;
&lt;p&gt;しかし、&lt;strong&gt;すべてのプロジェクト・すべての開発フェーズで導入すべきか&lt;/strong&gt; というと、&lt;br&gt;
個人的には &lt;strong&gt;明確にそうではない&lt;/strong&gt; と考えています。&lt;/p&gt;
&lt;p&gt;この記事では&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;なぜプロジェクト初期で GAS / Game Features を導入すると負担になりやすいのか&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;どの段階で導入すると真価を発揮するのか&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;について、自身の経験をもとに整理します。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="結論gas--game-features-は優秀だが導入時期が重要"&gt;結論：GAS / Game Features は優秀だが「導入時期」が重要&lt;/h2&gt;
&lt;p&gt;まず前提として&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;GAS は長年運用され、&lt;strong&gt;大規模タイトルで実績のあるシステム&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Game Features も &lt;strong&gt;機能分離・モジュール化を重視した現代的な設計&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;であり、品質や思想そのものに問題があるわけではありません。&lt;/p&gt;
&lt;p&gt;問題になるのは &lt;strong&gt;「いつ導入するか」&lt;/strong&gt; です。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="プロジェクト初期プロトタイプ段階で起きやすい問題"&gt;プロジェクト初期・プロトタイプ段階で起きやすい問題&lt;/h2&gt;
&lt;h3 id="-フレームワークが過剰に重い"&gt;① フレームワークが過剰に重い&lt;/h3&gt;
&lt;p&gt;GAS や Game Features は&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;高い汎用性&lt;/li&gt;
&lt;li&gt;拡張を前提とした設計&lt;/li&gt;
&lt;li&gt;長期運用への耐性&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;を重視しています。&lt;/p&gt;
&lt;p&gt;その結果&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;クラス構造が複雑&lt;/li&gt;
&lt;li&gt;Ability / Attribute / Effect / GameplayTag など前提概念が多い&lt;/li&gt;
&lt;li&gt;正しく使い始めるまでの学習コストが高い&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;という特徴があります。&lt;/p&gt;</description></item><item><title>🔥 ゲームプログラマーとして成長するために大切な3つの力</title><link>https://wuyukwi.duckdns.org/posts/zenn-f6d20f7d12e8b4/</link><pubDate>Thu, 18 Sep 2025 16:43:12 +0900</pubDate><guid>https://wuyukwi.duckdns.org/posts/zenn-f6d20f7d12e8b4/</guid><description>&lt;blockquote&gt;
&lt;p&gt;📌 &lt;em&gt;この記事は &lt;a href="https://zenn.dev/wuyukwi/articles/f6d20f7d12e8b4"&gt;Zenn&lt;/a&gt; に投稿した内容のアーカイブです。&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="はじめに"&gt;はじめに&lt;/h2&gt;
&lt;p&gt;「どうすればプログラミングが上手くなるのか？」&lt;br&gt;
これは、ゲーム業界を目指すエンジニアにとって、常につきまとうテーマです。&lt;/p&gt;
&lt;p&gt;Unity や Unreal Engine などの便利なエンジンやライブラリが整っている時代でも、「本当にゲームを作れる」プログラマーになるためには、&lt;strong&gt;言語やフレームワークの知識以上に重要な根本的スキル&lt;/strong&gt; があります。&lt;/p&gt;
&lt;p&gt;本記事では、ゲームプログラマーとして実務を経験する中で特に大事だと感じる&lt;strong&gt;3つの力&lt;/strong&gt; を紹介します。&lt;/p&gt;
&lt;h2 id="-抽象化の力--巨大なコードを分けて考える"&gt;① 抽象化の力 —— 巨大なコードを「分けて」考える&lt;/h2&gt;
&lt;p&gt;ゲーム開発は、数千〜数百万行にもなるコードの集合です。&lt;br&gt;
その全てを頭に入れることは不可能なので、&lt;strong&gt;必要な部分だけをブラックボックスとして扱う&lt;/strong&gt; 考え方が必須になります。&lt;/p&gt;
&lt;p&gt;例えば、「プレイヤーが持つ全ての武器を取得する」処理を作る場合を考えます。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;// Repositoryパターンによる例
class WeaponRepository {
public List&amp;lt;Weapon&amp;gt; GetAllWeapons(PlayerId playerId);
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;この &lt;code&gt;WeaponRepository&lt;/code&gt; クラスを作るときは、&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;DBやセーブデータへのアクセス&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;ログやエラーハンドリング&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;フォーマット変換&lt;br&gt;
など、たくさんの下位レイヤのライブラリを呼び出しますが、&lt;strong&gt;上のレイヤからは「GetAllWeapons」だけ見えればよい&lt;/strong&gt; のです。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;これが抽象化であり、&lt;strong&gt;モジュールを積み重ねて大規模ゲームを成立させる基本&lt;/strong&gt; です。&lt;/p&gt;
&lt;h3 id="実戦ポイント"&gt;実戦ポイント&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;オブジェクト指向（OOP）、関数型（FP）、手続き型といった &lt;strong&gt;複数のパラダイムを状況に応じて使い分ける&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;トップダウン（設計から実装）とボトムアップ（共通処理の抽出）を行き来しながら開発する&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;抽象化しすぎると開発が重くなり、抽象化しなさすぎるとコピペ地獄になるため、バランスを取る&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="-デバッグの力--ブラックボックスを開ける技術"&gt;② デバッグの力 —— ブラックボックスを「開ける」技術&lt;/h2&gt;
&lt;p&gt;抽象化したコードは便利ですが、&lt;strong&gt;バグが起きたときには中を開ける必要&lt;/strong&gt; があります。&lt;/p&gt;
&lt;p&gt;たとえば「インベントリ画面に武器一覧が表示されない」と報告されたとき、どこから原因を追うべきでしょうか？&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;F12（DevTools）や &lt;code&gt;curl&lt;/code&gt; でクライアント→サーバ間通信を確認&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;サーバで &lt;code&gt;WeaponRepository.GetAllWeapons()&lt;/code&gt; の戻り値をログ出力&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;DBにクエリを直打ちして期待通りの結果か確認&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;こうして&lt;strong&gt;層を一つずつ下って調査&lt;/strong&gt; するのがデバッグの基本です。&lt;br&gt;
このスキルはバグ修正だけでなく、&lt;strong&gt;新しいプロジェクトやチームに参加したときにコードを理解する力&lt;/strong&gt; にもなります。&lt;/p&gt;
&lt;p&gt;実戦ポイント&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;ログやアサートを常に入れておく&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;デバッガでステップ実行できるように設計する&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;バグ報告を「再現可能な条件」に落とし込む&lt;/p&gt;</description></item></channel></rss>