Simple KCC
概要
Simple KCC はユーザーフレンドリーで直感的な3Dキャラクターコントローラアドオンです。シンプルで使いやすいキャラクターを Fusion を使用したゲームプロジェクトにもたらすように設計されています。
スムーズで反応の良いキャラクタコントローラを作成することは、ゲームプロジェクトにおいて非常に重要です。特に合理的で効率的なワークフローを求める開発者にとって、従来のキャラクタコントローラソリューションは複雑で統合が難しい場合があります。そこで、Simple KCC が輝きを放ちます。キャラクター移動のためのシンプルかつ強力なソリューションを提供しているのです。
Features
特徴
- 簡単な統合と設定。
- 位置とルック回転(ピッチ+ヨー)のコントロール。
- カプセルベースの物理クエリとディペネトレーション。
- 速度ベースの動き。
- 重力のサポート。
- ジャンプのサポート。
- 基本的な地面検出。
- 連続衝突検出(CCD)。
- コライダー用に独立したゲームオブジェクト(子ゲームオブジェクトとして実行時に作成)。
- 子コライダーの無視をサポート。
- ステップ検出と地面スナップ。
- プラットフォーム非依存、モバイルフレンドリー。
- ネットワークとパフォーマンスの最適化。
- プーリング対応。
- コメント付きサンプルとテストプレイグラウンド。
ダウンロード - サンプル
| Version | Release Date | Download |
|---|---|---|
| 2.0.17 | 5月 13, 2025 | Fusion Simple KCC Sample 2.0.17 |
| 2.0.16 | Fusion Simple KCC Sample 2.0.16 |
ダウンロード - アドオン
| Version | Release Date | Download |
|---|---|---|
| 2.0.14 | 5月 13, 2025 | Fusion Simple KCC 2.0.14 |
| 2.0.13 | Fusion Simple KCC 2.0.13 |
動作環境
- Unity 2021.3
サンプルを実行するには、まずPhotonEngine DashboardでFusion AppIdを作成し、Real Time SettingsのApp Id Fusionフィールドに貼り付けます。ファーストステップセクションの指示に従いましょう。
サンプルコントロール
- 移動には
W、S、A、D、ジャンプにはSPACE、見るにはMouseを使います。 - Unityエディタ内で
ENTERキーを使ってカーソルをロックするか離します。
Assets/Scenes/Playgroundを開いてプレイしてください。このシーンは評価(キャラクターとそのパラメータがどのように動作するか)や、ゲームの動きのプロトタイプに使うことができます。
最初のステップ
シンプルKCCを始めるには、あらかじめ設定され、複数のプレイヤーでテストできるように準備されたサンプルプロジェクトをダウンロードするのが一番です。
以下のステップバイステップガイドでは、Simple KCC アドオンをあなたのゲームプロジェクトにゼロから統合する手順を説明します。
- Simple KCCアドオンパッケージをFusion 2.0プロジェクトにインポートします。
- プレーヤープレハブを作成します。
NetworkObjectとSimpleKCCコンポーネントをルートゲームオブジェクトに追加します。RigidBodyコンポーネントのIs Kinematicオプションを有効にします。
- パラメータ(半径、高さ、コリジョンマスク、...)を設定します。詳細はConfigurationセクションを参照してください。
- プレーヤープレハブをスポーンマネージャにリンクします。
- コードからキャラクターと一緒に移動します。詳しくは移動のセクションを参照してください。
設定
Simple KCCコンポーネントのインスペクタには、動作を微調整するためのオプションが用意されています。
パラメータは以下の通りです:
- Shape - キャラクタの物理挙動を定義します。
- None - 内部物理クエリをスキップし、コライダーはデスポーンされる。
- Capsule - 完全に物理処理を行い、カプセルのコライダーを生成します。
Is Trigger- 有効にするとコライダーはノンブロッキングになる。Radius- コライダの半径。Height- コライダの高さ。Extent- 地面の検出やその他の機能のための追加の半径の範囲を定義する。推奨範囲は半径の1-2%です。Collider Layer- コライダーゲームオブジェクトのレイヤーです。Collision Layer Mask- キャラクタが衝突するレイヤーマスク。Teleport Threshold- キャラクタが1ティックで移動する最小距離を定義します。Anti Jitter Distance- ジッタを滑らかにするための位置距離の許容範囲を定義します。値を大きくすると、移動方向を切り替えるときに顕著な遅延が発生する可能性があります。 -X- 水平軸。Y- 垂直軸。Step Height- 障害物を踏む高さの最大値。Step Depth- ステップチェックの最大深さ。Step Speed- ステップアップに投影される未適用の移動量の乗数。障害物をより速く通過するのに役立ちます。Snap Distance- スナップの最大接地距離。Snap Speed- 1秒あたりの地面へのスナップ速度。
移動
- KCCのプロパティを初期化する。
C#
public override void Spawned()
{
// Set custom gravity.
_simpleKCC.SetGravity(Physics.gravity * 4.0f);
}
- キャラクターの動きと見た目
C#
public override void FixedUpdateNetwork()
{
if (Runner.TryGetInputForPlayer(Object.InputAuthority, out GameplayInput input) == true)
{
// Apply look rotation delta. This propagates to Transform component immediately.
_simpleKCC.AddLookRotation(input.LookRotationDelta);
// Set default world space velocity and jump impulse.
Vector3 moveVelocity = _simpleKCC.TransformRotation * new Vector3(input.MoveDirection.x, 0.0f, input.MoveDirection.y) * 10.0f;
Vector3 jumpImpulse = default;
if (input.Jump == true && _simpleKCC.IsGrounded == true)
{
// Set world space jump vector.
jumpImpulse = Vector3.up * 10.0f;
}
_simpleKCC.Move(moveVelocity, jumpImpulse);
}
}
- カメラの同期
C#
public void LateUpdate()
{
// Only InputAuthority needs to update camera.
if (Object == null || Object.HasInputAuthority == false)
return;
// Update camera pivot and transfer properties from camera handle to Main Camera.
// LateUpdate() is called after all Render() calls - the character is already interpolated.
Vector2 pitchRotation = _simpleKCC.GetLookRotation(true, false);
_cameraPivot.localRotation = Quaternion.Euler(pitchRotation);
Camera.main.transform.SetPositionAndRotation(_cameraHandle.position, _cameraHandle.rotation);
}
API 概要
プロパティ
bool IsActive- KCC の実行を制御する。Transform Transform- キャッシュされているTransformコンポーネントへの参照。Rigidbody Rigidbody- アタッチされているRigidbodyコンポーネントへの参照。CapsuleCollider Collider- KCC コライダへのリファレンス。ShapeがEKCCShape.Noneに設定されている場合は null になります。KCCSettings Settings- KCCの基本設定。Vector3 Position-Transformに伝えられる計算された位置。Quaternion LookRotation-PitchとYawの組み合わせ。Vector3 LookDirection- ルック回転に基づくルック方向。Quaternion TransformRotation-Yawのルック回転に基づいた回転。Vector3 TransformDirection- トランスフォーム回転に基づいたトランスフォーム方向。float RealSpeed- 実際の位置の変化から計算された速度。Vector3 RealVelocity- 実際の位置の変化から計算された速度。bool HasJumped- 現在のティックで KCC がジャンプしたことを示すフラグ。bool IsGrounded- KCCがMaxGroundAngleよりも小さい法線角度のコライダに接触していることを示すフラグ。Vector3 GroundNormal- 接触しているすべてのコライダの法線を合計した値。上方向から遠い法線ほど最終的な法線に大きな影響を与える。Func<KCC, Collider, bool> ResolveCollision- カスタムのコリジョンリゾルバのコールバック。余分なフィルタリングを適用するために使用。
メソッド
void SetActive(bool isActive)- KCC の実行をコントロール。void SetPosition(Vector3 position)- KCC の位置を設定し、すぐにTransformを同期させる。void SetGravity(Vector3 gravity)- 重力ベクトルを設定する。void SetHeight(float height)-SettingsのHeightを更新し、直ちにColliderに同期する。void SetRadius(float radius)-SettingsのRadiusを更新し、直ちにColliderと同期する。void SetShape(EKCCShape shape, float radius = 0.0f, float height = 0.0f)-SettingsのShape、Radius(オプション)、Height(オプション) を更新し、直ちにColliderと同期する。void SetTrigger(bool isTrigger)-SettingsのIs Triggerフラグを更新し、直ちにColliderと同期する。void SetColliderLayer(int layer)-SettingsのCollider Layerを更新し、即座に Collider と同期する。void SetCollisionLayerMask(LayerMask layerMask)-Settingsのコリジョンレイヤーマスクを更新する。void SetMaxGroundAngle(float maxGroundAngle)- 歩行可能な地面の最大角度(度)を設定する。void RefreshChildColliders()- コリジョンフィルタリングに使う子コライダのリストを更新する。子コライダーは完全に無視され、トリガーは有効なコリジョンとして扱われる。Vector2 GetLookRotation(bool pitch = true, bool yaw = true)- 現在のルック回転を返す。void SetLookRotation(float pitch, float yaw)- ピッチとヨーのルック回転を設定する。値は <-90, 90> (pitch) と <-180, 180> (yaw) にクランプされる。void SetLookRotation(Vector2 lookRotation)- ピッチとヨーの回転を設定します。値は <-90, 90> (pitch) と <-180, 180> (yaw) にクランプされます。void SetLookRotation(Quaternion lookRotation, bool preservePitch = false, bool preserveYaw = false)- ピッチとヨーの回転を設定。ロールは無視される(サポートされていない)。値は <-90, 90> (pitch) と <-180, 180> (yaw) にクランプされます。void AddLookRotation(float pitchDelta, float yawDelta)- ピッチとヨーのルック回転を追加する。結果は <-90, 90> (pitch) と <-180, 180> (yaw) にクランプされる。void AddLookRotation(float pitchDelta, float yawDelta, float minPitch, float maxPitch)- ピッチとヨーのルック回転を追加する。結果の値は <minPitch, maxPitch> (pitch) と <-180, 180> (yaw) にクランプされる。void AddLookRotation(Vector2 lookRotationDelta)- ピッチ(x)とヨー(y)のルック回転を追加する。結果は <-90, 90> (pitch) と <-180, 180> (yaw) にクランプされる。void AddLookRotation(Vector2 lookRotationDelta, float minPitch, float maxPitch)- ピッチ(x)とヨー(y)のルック回転を追加する。結果の値は <minPitch, maxPitch> (pitch) と <-180, 180> (yaw) にクランプされる。void Move(Vector3 kinematicVelocity = default, Vector3 jumpImpulse = default)- 移動関数。KCCは速度ゼロで移動できす - 重なっているジオメトリや重力などに依存する。void Log(params object[] messages)- コンソールにフレームやティックのメタデータを含む情報メッセージを記録する。
Advanced KCC
もし Simple KCC のシンプルさと使いやすさに魅力を感じ、より多くの機能やカスタマイズオプションを試したいとお考えでしたら、Advanced KCC をご覧ください
。Advanced KCCはSimple KCC**の制限のないバージョンで、キャラクターの動きを正確にコントロールし、多くの強力な機能を提供します。
💡 また、Input Smoothing や Debugging など、チェックしておくべき一般的なトピックも含まれています。
Back to top