Roblox Studioでアバター変身ポータルを作る!切り替え遅延と向きバグの解消
haruka_apps
Roblox Studio でゲームを作る際、特定のポータルを潜るとアバターが魔法使いなどのカスタムキャラクターに変身するギミックは非常に人気があります。

※Roblox StudioとAI(Antigravity)を連携するMCP設定などの事前準備については、記事「Roblox Studioで作る「魔法少女の破壊ゲーム」」で詳しく解説していますので、そちらも併せてご参照ください。
この記事では、AIで作ったカスタムキャラクターへ変身する際に発生しがちな「切り替えの遅延(ラグ)」や「向きが前後逆になる」という2大バグを、AIへの簡単な指示だけで解決した実践例を紹介します!
対象読者
- Roblox Studioでポータルを使ったアバター変身ギミックを作りたい方
- カスタムキャラクターへの変身時に発生するラグを解消したい方
- AIエージェントにどう指示を出してプログラムのバグを直せばいいか知りたい方

アバターポータルを利用したゲーム事例

用語解説!CFrameやボーンってなに?
今回の仕組みでは、少し高度なRobloxの機能を使っています。まずは重要な3つの用語を解説します。
- CFrame (Coordinate Frame) : Robloxにおける「位置」と「向き(角度)」をセットにしたデータです。単に座標を動かすだけでなく、「どっちを向いているか」を制御するのに必須です。
- ボーン(Bone)とリターゲティング : 3Dモデルに仕込まれた「骨」のことです。標準のキャラクターの骨の動きをカスタムモデルにコピー(リターゲティング)することで、標準の走りモーションをそのまま流用してカスタムモデルを走らせることができます(糸でつながった操り人形をシンクロさせるイメージです)。
- バインドポーズ(Bind Pose) : キャラクターが何もしていない、最初の「基準ポーズ」です。通常は両腕を真横に広げた「Tポーズ」をしています。この基準ポーズからアバターがどう動いたかの『差分』を計算してカスタムモデルを動かします。
はじめに:今回の背景と発生したバグ
外部の3D生成ツール(MeshyやTripoなど)を使わずに、Roblox StudioのAI機能(/generate_mesh)だけを使って、テクスチャ付きのカスタム3Dキャラクター(魔法使い)を生成しました。理由は「Roblox Studio x AI」だけでゲーム開発を完成させたかったからです。
しかし、生成した魔法使いモデルをワールド内に配置し、変身ポータルと連携させようとしたところ、以下の2つの大きなバグに直面しました。
- 1. 変身のラグ(遅延): ポータルを潜った瞬間、キャラクターの生成やボーンの読み込み処理が入るため、一瞬アバターが消えたり、切り替えに数フレームのラグが発生してカクついてしまう。
- 2. 向きが前後逆(バグ): 魔法使いモデルが標準のアバターに対して180度回転した状態(後ろ向き)で追従してしまい、移動するとプレイヤーに背を向けるのではなく、カメラに向かって(後ろ向きに)走ってきてしまう。
解決のポイント:AIへの指示のコツ
Robloxの開発で座標計算やアニメーション同期(CFrameやボーンリターゲティングなど)を自力でコードに書こうとすると、難解です。ですが、AIエージェントを使えば、「困っていることと、どういう見た目にしたいか」を日本語でそのまま指示するだけで直してくれます。
バグ1:切り替え遅延(ラグ)を直す指示の例
「ポータルを潜った時の切り替えが遅いから、プレイヤーがスポーンした段階であらかじめ見えないカスタムリグを作って裏で同期しておき、ポータルに触れた瞬間に一瞬で透明度を切り替えるようにして」AIへの指示(プロンプト)例
【AIの解決策】: AIはこの指示を解釈し、プレイヤーがゲームに入った(スポーンした)瞬間に、あらかじめ魔法使いのモデルを透明度1(完全に透明)にした状態で生成し、裏でアニメーション同期を実行するコードを書きました。これにより、ポータルを潜った瞬間は「アバターの透明度を1に、魔法使いの透明度を0に」するだけの超高速な表示切替になり、遅延が完全にゼロになりました。
バグ2:向きが前後逆になるのを直す指示の例
「変身した魔法使いの向きが前後逆だから、同期するボーンの目標角度をすべて180度回転させて、前を向いて走るようにして」AIへの指示(プロンプト)例
【AIの解決策】: AIは、インポートされたメッシュ自体の初期向きのズレを認識し、キャラクターが動くたびに各関節の座標(CFrame)に対して一律で180度のY軸回転を追加する補正処理をプログラムに組み込みました。これにより、手動で3Dモデルを再度インポートし直したりすることなく、プログラム側で一瞬にして向きが修正されました。
AIが書いてくれた実際のスクリプト(一部)
AIが裏で自動作成・修正してくれたコードのキーポイントです。
1. サーバー側スクリプト (CustomRigServer)
プレイヤーのスポーン検知(CharacterAdded)のタイミングで、即時にリグを生成して配置しておきます。このとき、リグのパーツはすべて Transparency = 1 で非表示にしておきます。
-- サーバー側でプレイヤーがスポーンした瞬間にリグをロード
player.CharacterAdded:Connect(function(character)
isWizardVal.Value = false -- 変身フラグをリセット
setupRigForPlayer(player, character) -- 事前にリグを生成・同期
end)2. クライアント側スクリプト (RetargetingScript)
スクリプト開始直後からバックグラウンドでボーンのマッピングやバインドポーズの計算を実行しておき、変身フラグ(IsWizard)が変化した瞬間に、高速で透明度をスワップします。また、すべてのボーンの targetWorldCFrame に対して一律で180度の回転を加えます。
-- ターゲットのワールドCFrameに180度の回転を適用して同期
local targetWorldCFrame = r15Part.CFrame * offset * CFrame.Angles(0, math.rad(180), 0)
if map.isRoot then
targetWorldCFrame = targetWorldCFrame * CFrame.new(0, -3.3, 0)
end参考文献(Roblox公式ドキュメント)
本実装で利用した機能に関するRoblox公式の技術ドキュメントです。より深い仕様を学びたい場合は以下のリンクを参照してください。
- CFrameのAPIリファレンス : CFrame API Reference
- RunService.RenderStepped(フレーム同期処理) : RunService.RenderStepped API Reference
- Player.CharacterAdded(キャラクター読み込み検知) : Player.CharacterAdded API Reference
今回、アバター変身ポータルを作る上で遭遇した「差し替え遅延」と「向きのバグ」という壁を、AIエージェントへの日本語の指示だけで解決しました。
自力で複雑な3Dグラフィックス数学やフレーム同期バグと闘う必要はありません。「どこがバグっていて、どう直したいか」を直感的にAIに伝えてコードを自動生成してもらうことこそが、これからのAI時代の効率的なゲーム開発です。
みなさんもぜひ、Roblox StudioとAIを連携させて、思い通りのゲームを作ってみてください!
免責事項
本記事は、著者個人の開発体験に基づく「検証・紹介」を目的とした読み物です。
記事内に掲載している仕様、画面等は、2026年6月時点のものです。今後のアップデートや規約変更により、仕様が異なる場合があります。
本記事の情報を参考に開発や設定を行う際は、各提供元(Roblox、Antigravity等)の最新の利用規約やガイドラインを各自でご確認の上、自己責任にてお願いいたします。万が一、何らかのトラブルや損害が発生した場合、著者は一切の責任を負いかねますのであらかじめご了承ください。