キャラクターコントローラーライブラリ(CCL)では、コアControllerManagerインスタンスがキャラクターの物理シミュレーションと環境との相互作用を処理します。これには、レガシーHumanoidの不整合を解決するために設計された移動/感覚に関するいくつかの意図的な変更や、地面の摩擦、線形加速度曲線、ジャンプ時の線形および角運動量の現実的な保存といった物理的改善が含まれます。
CCLを有効にする
CCLは、スタジオのアバター設定ウィンドウを通じてオプトインです。有効にするには:
アバタータブから、アバター設定を開きます。

ウィンドウの左側でムーブメントタブを選択し、アビリティセクションでキャラクター コントローラー ライブラリを選択します。

走る、ジャンプする、登るなどのすべての標準アビリティはデフォルトで有効になっています。ランタイム中にそれらのいずれかを無効にするには、関連するボックスのチェックを外します。
構造
キャラクターモデル内のコアControllerManagerインスタンスの下に、GroundControllerやAirControllerなどの個々のコントローラーが、キャラクターに対する移動の適用方法を定義します。アビリティはその後、ControllerManagerおよびその子孫と相互作用してコントローラーの動作を変更したり、コントローラー間で切り替えたりします。

設定
ゲームが実行中(またはServerScriptServiceから実行されるスクリプトを通じて)、コアControllerManagerおよびビルトインコントローラーを試すことができます。
ランタイム
ランタイムでコントローラーの設定を試すには:
プレイテストを開始します。
エクスプローラーでWorkspace内のキャラクターモデルを見つけて、ControllerManagerツリーを展開します。

ControllerManagerまたはそのいずれかのコントローラーの子孫を選択し、プロパティウィンドウで、以下の表に要約されているプロパティなどをカスタマイズします(これらの表は網羅的ではないため、追加のプロパティオプションについてはAPI クラスドキュメントを参照してください)。
プロパティ 説明 BaseMoveSpeed すべてのコントローラーで使用される基本的な線形移動速度。コントローラーは個別にMoveSpeedFactorプロパティを通して移動速度をカスタマイズします。 BaseTurnSpeed すべてのコントローラーがキャラクターを望ましい方向に向けるために使用する基本的な角度回転速度。一部のコントローラーは個別にTurnSpeedFactorプロパティを通して回転速度をカスタマイズします。 UpDirection Vector3で、ControllerManager.RootPartの上向きベクトルを示します。
スクリプト化
スクリプトを通じてすべてのキャラクターに対するコントローラー設定を行うには:
ServerScriptService内に新しいサーバーサイドのScriptを作成し、それをControllerScriptに名前を変更します。
以下のコードを新しいスクリプトにコピーして貼り付けます。この例では、地面ベースの移動/回転速度を増加させ、わずかな加速および減速時間を追加します。他のプロパティは、上記の表や各クラスのドキュメントに記載された内容に合わせて調整してください(ControllerManager; GroundController; AirController; ClimbController; SwimController)。
ServerScriptService内のスクリプトlocal Players = game:GetService("Players")local function onCharacterAdded(character)local ControllerManager = character:FindFirstChildWhichIsA("ControllerManager")if ControllerManager thenlocal GroundController = ControllerManager:FindFirstChild("GroundController")if GroundController then-- 移動速度と回転速度を2倍にするGroundController.MoveSpeedFactor *= 2GroundController.TurnSpeedFactor *= 2-- わずかな加速と減速を追加GroundController.AccelerationTime = 0.2GroundController.DecelerationTime = 0.4endendendlocal function onPlayerAdded(player)if player.Character thenonCharacterAdded(player.Character)endplayer.CharacterAdded:Connect(onCharacterAdded)endPlayers.PlayerAdded:Connect(onPlayerAdded)