250130

RTFM·2025년 1월 30일

개발 일지

목록 보기
67/350

✅ 오늘 한 일


  • Random Study : First Perspective
  • Project knapsack


📝 배운 것들


🏷️ Unity :: Cinemachine : Aim 모드

  1. Do nothing : 카메라가 대상을 바라보지 않고, 별도의 조정 없이 고정된 상태로 유지됩니다.
  2. Composer : 자동으로 목표 오브젝트를 따라가며 화면에서 적절한 위치에 유지되도록 합니다. 카메라가 부드럽게 따라가는 효과가 있습니다.
  3. Group Composer : 여러 개의 대상을 포함하는 그룹을 추적하는 기능입니다. 그룹 내 대상의 위치를 조정하여 카메라가 자연스럽게 움직이도록 합니다.
  4. Hard Look At : 카메라가 항상 목표 오브젝트를 정확하게 바라보도록 강제하는 방식입니다. 회전이 즉각적으로 적용되며 자연스러운 움직임 없이 즉시 방향을 맞춥니다.
  5. POV : 1인칭 혹은 3인칭 조작 방식에서 사용되며, 플레이어 입력(마우스 또는 컨트롤러)을 기반으로 카메라가 회전합니다. FPS(1인칭 슈팅 게임) 또는 TPS(3인칭 액션 게임) 카메라에서 많이 사용됩니다.
  6. Same As Follow Target : 카메라가 설정된 대상의 회전을 그대로 따라갑니다.

🏷️ Unity : Input.GetAxis()와 Input.GetAxisRaw() 차이

Input.GetAxis() : 사용자가 키를 누르면 값이 0에서 1로 서서히 증가하며, 키를 떼면 1에서 0으로 서서히 감소합니다.
Input.GetAxisRaw() : 키를 누르는 순간 1이 되고, 키를 떼면 즉시 0으로 돌아갑니다.

🏷️ Unity : 왜 CharacterController가 필요한가?

Rigidbody 기반 이동의 문제점

  • Rigidbody는 물리 법칙을 강제 적용 (중력, 힘, 마찰, 반동 등)
  • 조작이 어려움 → 점프, 계단 이동, 벽 충돌을 세밀하게 조정하기 어려움
  • 고속 이동 시 터널링 문제 발생 (벽을 뚫고 지나가는 현상)
  • 불필요한 물리 연산으로 성능 저하 가능

CharacterController의 역할

✅ 정확한 충돌 감지 (벽 통과 방지)
✅ 중력, 계단 이동, 경사면 처리 가능
✅ Rigidbody 없이도 이동 및 점프 구현 가능
✅ 플레이어 이동을 세밀하게 조정 가능
✅ 물리 연산이 불필요하여 성능 최적화 가능

CharacterController vs Rigidbody 비교

기능CharacterControllerRigidbody
물리 연산❌ 적용되지 않음✅ 중력, 마찰력, 충돌 반응
충돌 감지✅ 직접 Raycast로 감지✅ 물리 엔진이 자동 감지
중력 적용✅ 직접 코드로 조절✅ 자동 적용됨
점프 구현✅ 쉽게 구현 가능⚠️ velocity 조정 필요
경사면 이동✅ 자연스럽게 이동 가능⚠️ 미끄러질 가능성 있음
빠른 이동✅ 터널링 없음⚠️ 빠른 속도에서 벽 통과 가능
퍼포먼스✅ 최적화됨 (불필요한 물리 계산 없음)❌ 불필요한 물리 연산 부담


🎮 Random Study


First Perspective

버츄얼 카메라 Follow 하면 이상한 곳 안 가버리도록 : Virtual Camera > Body > Hard Lock To Target

        // 월드 좌표계 기준 이동
        Vector3 position = rb.position + new Vector3(horizontal, 0, vertical) * moveSpeed * Time.deltaTime;
        rb.MovePosition(position);

        // 로컬 좌표계 기준 이동
        Vector3 moveDirection = transform.forward * vertical + transform.right * horizontal;
        Vector3 newPosition = rb.position + moveDirection * moveSpeed * Time.deltaTime;
        rb.MovePosition(newPosition);
        
        // 카메라 기준 이동
        Transform cameraTransform = Camera.main.transform;
        Vector3 moveDirection = cameraTransform.forward * vertical + cameraTransform.right * horizontal;
        moveDirection.y = 0;
        rb.velocity = moveDirection * moveSpeed;

fps 카메라 & 이동 만들기

  • 회전에는 마우스만 관여한다
  • 회전은 360도 다 가능해야 한다
  • 이동은 카메라 방향 기준이다
  • 카메라가 모델의 회전을 따라가면 안되고, 모델이 카메라의 회전을 따라가야 한다
  • Input.GetAxis 쓰면 딜레이 생긴다. Input.GetAxisRaw 쓰기.

모델이 직접 보이게 하려면 손만 띄워놓거나 전체 모델 구현해놓고 작은 원으로 머리를 감싸서 그 궤적을 카메라가 돌게 해야 될 것 같은데 일단 굳이



🎮 Project knapsack


knapsack collapse

Rigidbody 기반으로 프로토타이핑 했더니 개수가 많아지면 땅으로 쳐박힘

플레이어 rigidbody를 kinematic으로 만들고 이동 로직은 따로 구현하여 해결

    private void Move()
    {
        velocity.x = Input.GetAxisRaw("Horizontal") * speed;
        velocity.y += gravity * Time.deltaTime;

        if (isGrounded())
        {
            velocity.y = 0;
        }
        if (Input.GetKeyDown(KeyCode.Space))
        {
            velocity.y += 10 * jumpForce;
        }

        rb.MovePosition(rb.position + velocity * Time.deltaTime);
    }

남은 문제

  • 점프하고 내려올 때 가끔 땅에 쳐박힘 (오브젝트를 밟으면 무조건 쳐박힘)
  • 스페이스바를 자꾸 씹음

0개의 댓글