11.11 - TIL

김혁·2025년 11월 11일

TIL

목록 보기
54/84
post-thumbnail

오늘의 코드카타

오늘의 공부

팀 프로젝트 진행 내용

1. 점프 PSD 수정

  • 위와 같이 점프를 진행할 때, 공중에 걷는 듯한 모션이 보임
  • Rewind Debugger를 활용해서 보니, Jump_F_Off_Run_Rfoot, Jump_F_Off_Run_Lfoot이 번갈아가면서 자주 스위칭됨
  • 해당 액션은 PSD_Jump 에셋을 통해 재생되고 있었는데, 기존의 애니메이션을 더 유지하게끔 해서 자연스럽게 하고자 함
    -> 따라서 PSD_Jump 에셋의 Continuing Pose Cost Bias를 -0.05에서 -0.5로 증가시킴

2. 앉기 기능 구현

  • CharacterMovement 컴포넌트에 존재하는 Crouch()를 통해 앉기 기능을 구현하려고 함
  • 해당 함수를 사용하기 위해서는 CanCrouch = true로 해줘야 해당 함수를 사용할 수 있음
  • 블루프린트에서 CanCrouch는 아래와 같이 CharacterMovement에서 체크할 수 있음
  • c++에서는 GetCharacterMovement()->NavAgentProps.bCanCrouch = true;를 통해 활성화할 수 있음

  • 앉아있는 상태에서 절벽 같은 데에서 이동하게 되면 투명 벽에 막혀있듯이 공중을 걷게 됨
  • 따라서 GetCharacterMovement()->bCanWalkOffLedgesWhenCrouching = true;를 통해 설정 변경
bCanWalkOffLedgesWhenCrouching = falsebCanWalkOffLedgesWhenCrouching = true

  • 앉는 동작을 하게 되면 카메라 이동이 뚝뚝 끊어지는 현상이 있다. 이는 캡슐 컴포넌트 높이를 순간적으로 변경하기 때문에 뒤에 보고 있던 카메라가 한 번에 이동해서 끊어지게 보이게 된 것이다.
  • 이를 해결하기 위해서는 Spring Arm Component의 bEnableCameraLag = true로 설정을 해서 카메라 이동을 보간하여 자연스러운 카메라 이동을 연출

오늘의 CS

컨텍스트 스위칭

  • 멀티 프로세스 환경에서 인터럽트가 발생하면 CPU가 처리 중인 프로세스를 바꾸는 것
  • 이를 통해 CPU가 여러 프로세스/스레드를 번갈아 사용할 수 있음
  • 레지스터에 로드하는 동안 CPU가 일을 못하기 때문에 오버헤드가 발생함

실행과정

  1. CPU가 P1을 처리하던 중 인터럽트 발생
  2. CPU 스케줄러는 레지스터에 있는 실행 중이던 프로세스의 상태를 PCB에 저장
  3. P2의 PCB에 있는 정보를 가져와 레지스터에 로드하고 CPU는 P2를 처리함
  4. P2 처리가 끝나면 다시 P1을 레지스터에 로드하고 프로세스를 계속 실행

PCB (Process Control Block)

  • OS가 프로세스를 관리하는 데 필요한 정보를 가지고 있는 자료구조
  • 각각의 프로세스는 고유한 PCB를 가지며, 레지스터 값, 프로그램 카운터, 스택 포인터 등을 저장

TCB (Thread Control Block)

  • 스레드를 관리하는 데 필요한 정보를 가지고 있는 자료구조
  • 스레드 고유의 프로그램 카운터, 레지스터 값, 스택 포인터 등을 저장

스레드 컨텍스트 스위칭이 비용이 적은 이유

  • 스레드는 가상 주소 공간을 공유하고 있기 때문에 스위칭이 발생해도 페이지 테이블 교체나 TLB 무효화가 필요하지 않음
  • 프로세스는 주소 공간 전체가 바뀌므로 MMU의 페이지 테이블 포인터를 새로 로드해야 하고, 캐시 정보도 초기화되기 때문에 상대적으로 많은 비용이 필요함
profile
게임 개발자를 향해..

0개의 댓글