This document is about: FUSION 2
SWITCH TO

Simple KCC

Level 4

개요

Simple KCC는 사용자 친화적이고 직관적인 3D 캐릭터 컨트롤러 애드온으로 Fusion을 사용하여 게임 프로젝트에 심플하고 사용하기 쉬운 캐릭터를 구현할 수 있도록 설계되었습니다.

매끄럽고 응답성이 뛰어난 캐릭터 컨트롤러를 만드는 것은 게임 프로젝트의 중요한 측면입니다. 기존의 캐릭터 컨트롤러 솔루션은 복잡하고 통합하기 어려울 수 있으며, 특히 간소화되고 효율적인 워크플로를 원하는 개발자들에게는 더욱 그렇습니다. 이 점에서 Simple KCC는 캐릭터 이동을 위한 단순하면서도 강력한 솔루션을 제공합니다.

이 애드온은 클라이언트/서버 그리고 공유 모드와 호환됩니다
Simple KCC

특징

  • 간편한 통합 및 구성.
  • 위치를 제어하고 회전을 바라봅니다(피치 + 요).
  • 캡슐 기반 물리 쿼리 및 관통 해제.
  • 속도 기반 이동.
  • 중력을 지원
  • 점프 지원.
  • 기본적인 지상 감지.
  • 바로 사용할 수 있는 지속 충돌 감지(Continuous collision detection, CCD).
  • 콜라이더를 위한 별도의 게임 객체(런타임에 하위 게임 오브젝트로 생성됨).
  • 하위 콜라이더 무시 지원.
  • 스텝 감지 및 접지 스내핑.
  • 플랫폼에 구애받지 않고 모바일 친화적.
  • 네트워크 및 성능 최적화.
  • 풀링 호환.
  • 테스트 플레이그라운드와 함께 샘플에 대한 완전한 설명.

다운로드 - 샘플

버전 릴리즈 일자 다운로드
2.0.2 2023년 9월 8일 Fusion Simple KCC 샘플 2.0.2 빌드 257

다운로드 - 애드온

버전 릴리즈 일자 다운로드
2.0.12 Aug 19, 2024 Fusion Simple KCC 2.0.12 Build 618

필요 사양

  • 유니티 2021.3
  • Fusion AppId: 샘플 실행을 위해서, 먼저 PhotonEngine 관리 화면에서 Fusion AppId를 생성하고 Real Time 설정(유니티 편집기의 Fusion 메뉴에서 선택)에서 App Id Fusion을 붙여 넣습니다. 첫 번째 단계 섹션의 지침을 계속하세요.

샘플 컨트롤

  • 이동 W, S, A, D, 점프 SPACE , 보기 Mouse.
  • ENTER 키를 사용하여 유니티 에디터 내부에서 커서를 잠그거나 놓습니다.

Assets/Scenes/Playground를 오픈하고 플레이합니다. 씬은 평가(캐릭터와 파라미터의 동작 방식) 또는 게임의 움직임 프로토타입에 사용할 수 있습니다.

첫 번째 단계

Simple KCC부터 시작하는 가장 좋은 방법은 미리 구성되어 여러 플레이어와 함께 테스트할 수 있는 샘플 프로젝트를 다운로드하는 것입니다.

다음 단계별 가이드에서는 Simple KCC 애드온을 게임 프로젝트에 처음부터 통합하는 과정을 안내해 드립니다.

  1. Simple KCC 애드온 패키지를 Fusion 2.0 프로젝트로 가져옵니다.
Simple KCC 패키지 임포트
  1. 플레이어 프리팹을 생성합니다.
플레이어 프리팹 생성
  1. NetworkObjectSimpleKCC 컴포넌트를 루트 게임 객체에 추가합니다. RigidBody 컴포넌트의 Is Kinematic 옵션을 활성화합니다.
컴포넌트 추가
  1. 파라미터(반지름, 높이, 충돌 마스크 등)를 구성합니다. 자세한 내용은 구성 섹션에서 확인하십시오.
  2. 플레이어 프리팹을 스폰 매니저에게 연결합니다.
플레이어 프리팹 연결
  1. 코드로 캐릭터와 함께 이동합니다. 자세한 내용은 이동 섹션에서 확인하실 수 있습니다.

구성

Simple KCC 컴포넌트 인스펙터는 행동을 미세 조정할 수 있는 일련의 옵션을 제공합니다.

Simple KCC 설정

파라미터:

  • Shape - 캐릭터 물리 행동 정의.
    • None - 내부 물리 쿼리 건너뜀, 콜라이더가 스폰 해제됨.
    • Capsule - 전체 물리 처리, 캡슐 콜라이더 스폰.
  • Is Trigger - 켜져 있으면 콜라이더는 논-블로킹입니다.
  • Radius - 콜라이더 반지름.
  • Height - 콜라이더 높이.
  • Extent - 지면 탐지 및 기타 기능에 대한 추가 반경 범위를 정의합니다. 권장 범위는 반경의 1-2%입니다.
  • Collider Layer - 콜라이더 게임 객체의 레이어.
  • Collision Layer Mask - 캐릭터가 충돌하는 레이어 마스크.
  • Teleport Threshold - 이동을 즉시(텔레포트)로 처리하기 위해 캐릭터가 한 번의 틱으로 이동해야 하는 최소 거리를 정의합니다.
  • 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);
}
  1. 이동과 캐릭터의 룩.

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);
    }
}
  1. 카메라 동기화.

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 - 캐시 된 트랜스폼 컴포넌트에 대한 참조.
  • Rigidbody Rigidbody - 붙여진 Rigidbody 컴포넌트 참조
  • CapsuleCollider Collider - KCC 콜라이더 참조. ShapeEKCCShape.None으로 설정되면 null일 수 있습니다.
  • KCCSettings Settings - 기본 KCC 설정.
  • Vector3 Position - Transform으로 전파되는 계산된 위치.
  • Quaternion LookRotation - 룩 PitchYaw의 조합.
  • Vector3 LookDirection - 룩 회전에 기반한 룩 방향.
  • Quaternion TransformRotation - Yaw 룩 회전을 기반으로 한 트랜스폼 회전.
  • Vector3 TransformDirection - 트랜스폼 회전에 따라 트랜스폼 방향 변환.
  • float RealSpeed - 실제 위치 변화로부터 계산된 속도.
  • Vector3 RealVelocity - 실제 위치 변화로부터 계산된 속도.
  • bool HasJumped - KCC가 현재 틱에서 점프했음을 나타내는 플래그.
  • bool IsGrounded - KCC가 최대 접지각(MaxGround Angle)보다 낮은 정상 각도의 콜라이더를 터치하고 있음을 나타내는 플래그.
  • Vector3 GroundNormal - 모든 터치 콜라이더의 결합 노멀. 위쪽 방향에서 덜떨어진 노멀이 최종 정상에 더 큰 영향을 미칩니다.
  • Func<KCC, Collider, bool> ResolveCollision - 사용자 지정 콜라이더 리졸버 콜백. 추가 필터링을 적용을 위해 사용합니다.

메소드

  • void SetActive(bool isActive) - KCC의 실행 제어.

  • void SetPosition(Vector3 position) - KCC의 위치 설정하고 트랜스폼 즉시 동기화.

  • 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) - SettingsIs Trigger 플래그를 업데이트하고 즉시 콜라이더 동기화.

  • void SetColliderLayer(int layer) - SettingsCollider Layer를 업데이트하고 즉시 콜라이더 동기화.

  • void SetCollisionLayerMask(LayerMask layerMask) - SettingsCollision Layer Mask 업데이트.

  • void SetMaxGroundAngle(float maxGroundAngle) - 최대 보행 가능한 지면 각도(도)를 설정합니다.

  • void RefreshChildColliders() - 충돌 필터링에 사용되는 자식 콜라이더 목록 새로 고침. 하위 콜라이더는 완전히 무시되며 트리거는 유효한 충돌로 처리됩니다.

  • Vector2 GetLookRotation(bool pitch = true, bool yaw = true) - 현재 룰 회전을 리턴.

  • void SetLookRotation(float pitch, float yaw) - pitch와 yaw 룩 회전 설정. 값들은 <-90, 90> (pitch) 그리고 <-180, 180> (yaw)로 클램프됩니다.

  • void SetLookRotation(Vector2 lookRotation) - pitch와 yaw 룩 회전 설정. 값들은 <-90, 90> (pitch) 그리고 <-180, 180> (yaw)로 클램프 됩니다.

  • void SetLookRotation(Quaternion lookRotation, bool preservePitch = false, bool preserveYaw = false) - pitch와 yaw 룩 회전 설정. 롤은 무시됩니다 (미지원). 값들은 <-90, 90> (pitch) 그리고 <-180, 180> (yaw)로 클램프 됩니다.

  • void AddLookRotation(float pitchDelta, float yawDelta) - pitch와 yaw 룩 회전 추가. 결과 값들은 <-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) - pitch (x) 그리고 yaw (y) 룩 회전 추가. 결과 값들은 <-90, 90> (pitch) 그리고 <-180, 180> (yaw)로 클램프 됩니다.

  • void AddLookRotation(Vector2 lookRotationDelta, float minPitch, float maxPitch) - pitch (x) 그리고 yaw (y) 룩 회전 추가. 결과 값들은 <minPitch, maxPitch> (pitch) 그리고 <-180, 180> (yaw)로 클램프 됩니다.

  • void Move(Vector3 kinematicVelocity = default, Vector3 jumpImpulse = default) - 이동 함수. KCC는 0의 속도로 움직일 수 있습니다 - 중첩된 기하학, 중력,...

  • void Log(params object[] messages) - 프레임/틱 메타데이터와 같이 정보 메시지를 콘솔에 로그를 남깁니다.

고급 KCC

Simple KCC의 단순성과 사용 편의성을 즐기셨지만 더 많은 기능과 사용자 정의 옵션을 원하신다면 **고급 KCC**를 자유롭게 확인해보세요.

**Advanced KCC**는 Simple KCC의 자유 버전으로 캐릭터 움직임과 많은 강력한 기능을 정확하게 제어합니다.

💡 또한 입력 스무딩, 디버깅 등 확인할 만한 일반적인 항목도 포함되어 있습니다.

Back to top