Simple KCC
概要
Simple KCC はユーザーフレンドリーで直感的な3Dキャラクターコントローラアドオンです。シンプルで使いやすいキャラクターを Fusion を使用したゲームプロジェクトにもたらすように設計されています。
スムーズで反応の良いキャラクタコントローラを作成することは、ゲームプロジェクトにおいて非常に重要です。特に合理的で効率的なワークフローを求める開発者にとって、従来のキャラクタコントローラソリューションは複雑で統合が難しい場合があります。そこで、Simple KCC が輝きを放ちます。キャラクター移動のためのシンプルかつ強力なソリューションを提供しているのです。
Features
特徴
- 簡単な統合と設定。
- 位置とルック回転(ピッチ+ヨー)のコントロール。
- カプセルベースの物理クエリとディペネトレーション。
- 速度ベースの動き。
- 重力のサポート。
- ジャンプのサポート。
- 基本的な地面検出。
- 連続衝突検出(CCD)。
- コライダー用に独立したゲームオブジェクト(子ゲームオブジェクトとして実行時に作成)。
- 子コライダーの無視をサポート。
- ステップ検出と地面スナップ。
- プラットフォーム非依存、モバイルフレンドリー。
- ネットワークとパフォーマンスの最適化。
- プーリング対応。
- コメント付きサンプルとテストプレイグラウンド。
ダウンロード - サンプル
Version | Release Date | Download | |
---|---|---|---|
2.0.14 | Jul 16, 2024 | Fusion Simple KCC Sample 2.0.14 Build 602 |
ダウンロード - アドオン
Version | Release Date | Download | |
---|---|---|---|
2.0.11 | Jul 16, 2024 | Fusion Simple KCC 2.0.11 Build 603 |
動作環境
- 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