Simple KCC
개요
Simple KCC는 사용자 친화적이고 직관적인 3D 캐릭터 컨트롤러 애드온으로 Fusion을 사용하여 게임 프로젝트에 심플하고 사용하기 쉬운 캐릭터를 구현할 수 있도록 설계되었습니다.
매끄럽고 응답성이 뛰어난 캐릭터 컨트롤러를 만드는 것은 게임 프로젝트의 중요한 측면입니다. 기존의 캐릭터 컨트롤러 솔루션은 복잡하고 통합하기 어려울 수 있으며, 특히 간소화되고 효율적인 워크플로를 원하는 개발자들에게는 더욱 그렇습니다. 이 점에서 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 애드온을 게임 프로젝트에 처음부터 통합하는 과정을 안내해 드립니다.
- Simple KCC 애드온 패키지를 Fusion 2.0 프로젝트로 가져옵니다.
- 플레이어 프리팹을 생성합니다.
NetworkObject
와SimpleKCC
컴포넌트를 루트 게임 객체에 추가합니다.RigidBody
컴포넌트의Is Kinematic
옵션을 활성화합니다.
- 파라미터(반지름, 높이, 충돌 마스크 등)를 구성합니다. 자세한 내용은 구성 섹션에서 확인하십시오.
- 플레이어 프리팹을 스폰 매니저에게 연결합니다.
- 코드로 캐릭터와 함께 이동합니다. 자세한 내용은 이동 섹션에서 확인하실 수 있습니다.
구성
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
- 초당 접지 스냅 속도.
이동
- 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
- 캐시 된트랜스폼
컴포넌트에 대한 참조.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가 최대 접지각(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)
-Settings
의Is Trigger
플래그를 업데이트하고 즉시 콜라이더 동기화.void SetColliderLayer(int layer)
-Settings
의Collider Layer
를 업데이트하고 즉시 콜라이더 동기화.void SetCollisionLayerMask(LayerMask layerMask)
-Settings
의Collision 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