ユニット 7 / 11

コード生成とエンジンの統合: Unity (C#) および Unreal (ブループリント/C++)

利益:

  • エンジン、バージョン、言語、アーキテクチャコンテキストを与えることで人工知能から信頼性が高くコンパイル可能なゲームコードを生成し、コードを読んで理解することでそれを統合する能力
  • コンパイル、テスト、プロファイリングを通じて、ゲーム コード固有のパフォーマンス (フレームごとの割り当て)、エンジンのライフサイクル、幻覚リスクを管理する機能
  • マルチプレイヤー ゲームにホスト権限の原則を適用し、自分のゲームを防御および検証するためだけにセキュリティ情報を責任を持って使用する能力。

ゲームはソフトウェアです。どれほど優れた設計であっても、実装されるのはコードです。ゲーム エンジンはゲームを実行するためのインフラストラクチャです。Unity (C# でスクリプト化された広く使用されているエンジン) と Unreal Engine (C++ とビジュアル スクリプト言語 Blueprint を使用するエンジン) の 2 つが最も一般的です。 AI はコード生成における最も成熟した支援手段の 1 つです。プレーヤー コントローラー、インベントリ システム、ステート マシン、保存/ロード、インターフェイス ロジック、デバッグ、リファクタリング (動作を壊すことなくコードをリファクタリングします)。しかし、ゲーム コードには、パフォーマンス (フレーム レート)、エンジンのライフサイクル、マルチプレイヤーのセキュリティなど、独自の落とし穴があります。この単元では、ゲーム コードで AI を安全かつ効率的に使用する方法を学びます。

重要な原則: エンジンとバージョンのコンテキスト

AI がどのエンジンとバージョンに向けて記述しているのかを認識していない場合、混乱した、時代遅れの、または存在しない API が生成されます。したがって、すべてのコード プロンプトにエンジン、バージョン、言語、アーキテクチャのコンテキストを指定します。 「Unity 用にプレイヤーの動きを書く」は弱いです。 「Unity 2022.3、C#、新しい入力システム、Rigidbody ベースの物理動作」は強力です。 Unreal でブループリントを使用するか C++ を使用するか、および使用しているバージョンを指定します。

安全なコード フローを段階的に説明します。

  1. コンテキスト (エンジン、バージョン、言語、現在のアーキテクチャ、制約) を指定します。
  2. 小さくて明確なものが必要です (システム全体ではなく、単一コンポーネント)。
  3. コードを読んで理解します(コードが何をしているのかを一行一行理解してください。理解できないコードは入れないでください)。
  4. ビルドとテスト (エンジン上で実行、プロファイル - パフォーマンスの測定)。
  5. リファクタリングと統合 (プロジェクト標準に一致)。
ヒント: AI にコードを尋ねるときは、「コメントで説明してください」と言います。あなたの目標はコードを理解することです。理解できない AI コードをプロジェクトに組み込むと、保守不可能な負債が蓄積されてしまいます。また、コードを小さくテスト可能なチャンクに分けて要求します。500 行のシステムの代わりに、定義された単一のジョブを実行する 30 ~ 50 行のコンポーネントの方が、検証と統合が簡単です。

ゲームコード特有のトラップ

パフォーマンス。ゲーム コードは 1 秒あたり 30 ~ 60 回以上実行されます。 AI は、各フレームで実行される Update ループに負荷の高い操作 (メモリ割り当て、ルックアップ、文字列操作) を組み込むことができます。これによりフレームレートが低下します。パフォーマンスが重要なコードをプロファイリングし、「すべてのフレームで実行、割り当てなし」などの AI 制約を与えます。

エンジンのライフサイクル。 Unity の Awake/Start/Update、Unreal の BeginPlay/Tick などの特別なメソッドが呼び出されると、AI が混乱することがあります。テストによってライフサイクル エラーを検出します。

マルチプレイヤーのセキュリティ。これはIT/セキュリティの観点から最も重要な問題です。マルチプレイヤーではクライアントを決して信頼しないでください。プレイヤーのコンピュータ上のクライアントは不正行為のために操作される可能性があります。サーバー(サーバー権限)上のポイント、ダメージ、金額などの重要なステータスを確認します。この原則に反して、AI によって生成されたネットワーク コードを制御します。 AI がクライアントを信頼する脆弱性を作成した場合は、それを修正します。この情報は、自分のプレイを擁護し検証するためにのみ使用してください。他人のサーバーへの不正アクセスや不正行為は違法であり、非倫理的です。

注意: AI で生成されたコードには脆弱性 (入力検証の欠如、クライアントの信頼、保存ファイル操作) が含まれる可能性があります。コードを盲目的に受け入れないでください。セキュリティ、特にネットワーク、経済性のレビューを実行し、コードを保存します。

建築および保守債務

AI は個々の機能を迅速に生成します。しかし、ゲームのアーキテクチャ、つまりシステムがどのように分割され、どのように相互に通信し、データがどこに保存されるかは長期的な決定であり、人間に属します。 AI に「インベントリ、戦闘、保存システム全体を一緒に書く」ように指示すると、機能するものの、緊密に結合され、メンテナンスが難しく、拡張不可能な糸玉が得られます。代わりに、アーキテクチャを設計し、AI を使用して、定義されたインターフェイスを備えた小さなコンポーネントを実装します。優れたアーキテクチャは、ゲームが成長するにつれて変化をもたらします。誤った決定は、すべての新機能を遅らせる技術的負債として 1 年後に戻ってきます。

メンテナンス負債のもう 1 つの原因は、理解されないままプロジェクトに組み込まれるコードです。 AI によって書かれたシステムは今日でも機能する可能性があります。しかし、半年後に交換しなければならなくなり、何をしたのか誰も覚えていない場合、借金は利息に変わります。そのため、運用時にコードを読んで理解することと、AI に明確なコメントを求めることという 2 つの規律が不可欠です。経験則として、自分で書き直すことができない、または少なくとも 1 行ずつ説明できない AI コードをプロジェクトに含めないでください。 AI はスピードをもたらします。規律が持続性をもたらします。

ミニケース3個

ケース 1 — リリース コンテキストによりバグは回避されました。プログラマーは最初に「Unity 用のインベントリを作成してください」と言った。コードは古い API を使用していたため、コンパイルできませんでした。次に、コンテキスト「Unity 2022.3、C#、ScriptableObject ベース」を与えました。コードは初めてコンパイルされ、プロジェクトに適合します。コンテキストにより、デバッグにかかる​​時間を 1 時間節約できました。

ケース 2 — パフォーマンスの罠。あるゲームではフレームレートが低かった。プロファイリングの際、AIによって生成されたUpdateメソッドが各フレームに新しいリストを割り当てて敵を探索していることがわかりました。キャッシュされた参照と非二次更新を含むコードを修正し、フレーム レートを 42 から 60 に増加しました。

ケース 3 — セキュリティ上の脆弱性が発見されました。マルチプレイヤー ゲームでは、AI が生成したコードがクライアントへのダメージを計算し、サーバーに報告します。これは不正行為の可能性がありました (クライアントは無限のダメージを与える可能性がありました)。コードはサーバー権限型になっています (サーバーがダメージを計算します)。この監査により、出版後の不正行為スキャンダルは防止されました。

コピー可能な 4 つのテンプレート

1) コンテキストを含むコードリクエスト:

エンジン: Unity 2022.3。言語: C#。アーキテクチャ: [例:コンポーネント ベース]。制約: 更新時に割り当てます。読みやすく、コメントが付けられること。タスク: [単一の定義されたコンポーネント、例: 「ダブルジャンプキャラクターコントローラー」】。使用するすべての API がこのバージョンであることを確認してください。よくわからない場合はお知らせください。

2) コードの説明/レビュー:

次のコードを 1 行ずつ説明し、(1) その動作、(2) 考えられるパフォーマンスの問題 (フレームごとの割り当て、高価な検索)、(3) 考えられるバグ、(4) 改善の提案を書きます。コード: [貼り付け]

3) マルチプレイヤーのセキュリティ監査:

セキュリティのために次のマルチプレイヤー コードを調べてください。具体的には、クライアントが信頼されている場所、サーバー上で検証する必要がある重大な状態 (ダメージ、ポイント、金額)、入力検証の欠如です。サーバーを権威主義的にするための修正を提案します。これは単に自分のゲームを守るためです。コード: [貼り付け]

4) パフォーマンス プロファイルに焦点を当てたリファクタリング:

このコードはすべてのフレームで実行され、フレーム レートを低下させます: [コード]。割り当て、高価なルックアップ、および不要なフレームごとの操作を見つけます。キャッシュと頻度の低い更新により、動作を損なうことなく最適化します。変更点を説明します。

弱いプロンプト / 強いプロンプト

弱いプロンプト:

Unity で保存システムを作成します。

バージョン、形式、データ範囲、セキュリティはありません。結果は一般的であり、危険です。

強力なプロンプト:

エンジン: Unity 2022.3、C#。タスク: JSON ベースの保存/読み込みシステム。保存対象: プレーヤーの位置、インベントリ、進行状況。制約: ファイル破損に対するエラー管理を取得します。セーブファイルに整合性チェック(ハッシュ)を追加し、プレイヤーが簡単に変更して不正行為を防止します。コードをコメントアウトし、各 API がこのバージョンであることを確認します。

バージョン管理、スコープ、エラー処理、整合性チェックにより、出力が強化されます。

エンジン/言語コンテキスト テーブル

エンジン

言語

AIに与えなければならないもの

特別な注意

団結

C#

バージョン、入力/物理システム

更新の割り当て、ライフサイクル

非現実的な

青写真

バージョン、ノードコンテキスト

ビジュアルロジックの限界

非現実的な

C++

バージョン、モジュール構造

メモリ、GC、マクロ

マルチプレイヤー

両方

ネットワークモデル

プレゼンター権威主義

よくある間違い

  • エンジン/バージョンが指定されていません。これは、古い API または作成された API からのものです。
  • コードを理解せずに信頼する。維持不可能な負債が蓄積する。
  • パフォーマンスを測定していない。フレームごとの割り当てにより、フレーム レートが静かに低下します。
  • クライアントを信頼すること。マルチプレイヤーには不正行為の脆弱性があります。
  • システム全体を一度に使いたい。小さくてテスト可能な部分の方が安全です。

要約すると

AI はゲーム コードの強力なヘルパーですが、エンジン、バージョン、アーキテクチャ コンテキストが必要です。コードを読んで理解し、コンパイルしてテストし、パフォーマンスとセキュリティをチェックすることなしに、コードをプロジェクトに導入しないでください。マルチプレイヤーではサーバー権威主義を維持し、セキュリティ情報を防御と検証の目的のみに使用します。

アプリケーションタスク

小さなコンポーネント (ダブル ジャンプや単純なインベントリなど) を選択します。 「コンテキスト付きコードリクエスト」テンプレートでエンジンとバージョンを提供してコードを生成します。次に、「コードの説明/レビュー」テンプレートを使用して同じコードをレビューして、パフォーマンスとバグのリスクを排除します。エンジンでコードをコンパイルしてテストします。

チェックリスト

  • [ ] エンジン、バージョン、言語、アーキテクチャのコンテキストを指定しました。
  • [ ] コードを読んで理解しました。解説付きが欲しかったです。
  • [ ] エンジン内でコンパイルしてテストし、パフォーマンスを測定しました。
  • [ ] ネットワーク/エコノミー/セーブコードのセキュリティチェックを行いました。
  • [ ] 私は自分のゲームを守るためにのみセキュリティ情報を使用しました。