[리뷰] 한 권으로 배우는 게임 프로그래밍

2025. 4. 15. 12:00·책/리뷰

https://www.yes24.com/product/goods/135854770

 

한 권으로 배우는 게임 프로그래밍 - 예스24

게임 개발자에게 필요한 것은화려한 포트폴리오가 아닌 체계적인 이론 지식!이 책은 특정 엔진이나 기술에 국한되지 않고 게임 개발의 전반적인 개념과 지식을 다룬다. 이를 통해 게임 세계가

www.yes24.com

 

이 책은 cs에서 배우는 수학, 자료구조, 알고리즘 등을 게임 개발에서는 어떤 식으로 쓰는지 알려주는 책으로, 이름 그대로 한 권에 모든 내용을 압축해서 작성한 책입니다. 

삽화가 귀여우며 어려운 내용들도 다소 쉽게 작성되어서 처음 입문할때 이런걸 알아야되는구나 하면서 공부하면 좋을 책이라고 생각합니다. 그러다보니 자세한 내용들은 부족하다고 느껴 관련 키워드들을 따로 공부하면 좋을 것 같습니다.

책을 읽으면서 개인적으로 정리하면 좋겠다고 생각한 부분은 아래에 정리했습니다.

 

 

2.2.6 캐릭터의 이동 구현

점프

  • 점프 입력이 들어온 이후로 지난 시간 t
  • 점프에 준 힘 f
  • 중력가속도 g

자유낙하 속도 공식은 다음과 같다.

$v=v_0+gt$ ( $v$는 속도, $v_0$는 초기 속도로 이 경우에 0 )

점프한 캐릭터의 높이 = $v_0t - \frac{1}{2}gt^2$

 

if (!_isOnGround || _isOnJump)
{
	float t = Time.time - _airborneStartTime;
	Vector3 newPosition = transform.position;
	float heightChange = _airborneStartVelocity * t - GRAVITY * t * t / 2;
	newPosition.y = heightChange + _airborneStartHeight;
	transform.position = newPosition;
}

 

2.3.6 원형 이동

캐릭터 주위를 원형으로 도는 펫의 코드는 삼각함수로 간단하게 작성할 수 있다.

using UnityEngine;
public class PetMover : MonoBehaviour
{
    private float _currentAngle = 0f;
    private float _movingSpeed = 3f;
    private float _movingRadius = 2f;
    private void Update()
    {
        // 1. 각도를 계산한다.
        _currentAngle += _movingSpeed * Time.deltaTime;
        // 2. 각도에 따라 위치를 계산한다.
        var currentPosition = new Vector3(_movingRadius * Mathf.Cos(_currentAngle), _movingRadius * Mathf.Sin(_currentAngle), 0f);
        // 3. 위치를 설정한다.
        transform.localPosition = currentPosition;
    }
}

 

원과 관련된 문제를 마주했을 때, 삼각함수를 자연스럽게 떠올리고 관련 정보를 찾아볼 수 있게 되었다면 이번 과정에서 알아야 할 내용을 모두 얻은 것이다.
언제나 기억하자. 공식이나 개념을 달달 외우는 것보단 문제의 해결법으로 떠올릴 선택지를 늘리는 것이 더 중요하다는 사실을!

 

 

2.5.1 Easing 그래프

Easing 그래프는 주로 시간에 따른 값을 조정하는 데 사용하며, 그래프에 따라 어떤 느낌으로 값이 변환하는지 시각적 정보를 제공하는 사이트도 꽤 있다.

 

3.6 충돌 처리 알고리즘

3.6.1 원형 충돌 알고리즘

출처 : https://eunsikk.tistory.com/22

원형 충돌 알고리즘은 가장 간단한 충돌 검출 방법으로, 원형 충돌체 사이의 충돌 여부를 검사하는 방법이다. 간단하게 두 반지름의 길이 합보다 중심 사이의 거리가 짧으면 충돌로 감지한다.

그런데 이러한 방식은 옛날 2D 게임에서 주로 사용하던 타일 스타일의 4방향 게임엔 적합하지 않은 것도 같다. 그럼 어떻게 처리해야 좋을까?

 

3.6.2 AABB 알고리즘

출처 : https://forsave.tistory.com/148

AABB(Axis-Aligned Bounding Box) 알고리즘은 사각형 상자끼리의 충돌을 감지하는 방법이다.

  • A_max_x가 B_min_x보다 큰가?
  • A_min_x가 B_max_x보다 작은가?
  • A_max_y가 B_min_y보다 큰가?
  • A_min_y가 B_max_y보다 작은가?

이 네 가지 조건을 모두 만족하면 충돌했다 볼 수 있다. 이 방법은 특히 정적인 물체들 사이의 충돌을 감지할 때 활용하면 좋다.

하지만 총알이나 투사체와 같이 빠르게 이동하는 객체를 처리할 때, AABB 방식만을 사용하면 충돌 검출을 놓치게 되어 문제가 생길 수 있다. 이때는 Swept AABB 방식을 통해 해결한다.

 

3.6.3 Swept AABB 알고리즘

Swept AABB 알고리즘은 프레임과 프레임 사이에 물체를 통과하는 현상을 방지하는 데 쓰이는 기초적인 충돌 검사이다.

출처 : https://www.gamedev.net/tutorials/programming/general-and-gameplay-programming/swept-aabb-collision-detection-and-response-r3084/

이 알고리즘을 통해 사각형의 충돌을 더 정밀하게 감지할 수 있으며 특히 팩맨과 같은 게임에 효과적으로 적용할 수 있다. 하지만 다각형의 충돌에는 부자연스러운 부분이 있다.

 

3.6.4 OBB 알고리즘

OBB(Oriented Bounding Box) 알고리즘은 두 사각형 혹은 두 볼록 다각형 사이의 충돌을 정확하게 검출하는 데 사용되는 방법이다. 이는 SAT(Separating Axis Theorem)를 기반으로 하며, AABB가 상자에 대해 충돌을 검출하는 것과 달리 다각형에 대한 충돌을 검출할 수 있어서 더욱 정확한 충돌 처리가 가능하다.

 

4.2.4 객체의 포함과 상속

상속의 제약 사항

부모를 상속받는 자식은 여럿 존재할 수 있지만, 동시에 여러 부모로부터 상속받을 수는 없다.

상속받은 부모에게 동일한 구조의 명령이나 속성이 존재할 경우, 어느 부모의 것을 고를지 알 수 없기 때문에 생기는 문제를 ‘죽음의 다이아몬드(the deadly diamond of death)’라고 한다.

C++ 등 동시에 여러 부모를 상속받는 게 가능한 언어도 존재하나, 가능하다 하더라도 하지 않는 것이 바람직하다. 그럼에도 불구하고 여러 부모를 동시에 상속받아야 하는 상황이라면 대신 ‘인터페이스’를 이용해서 구현하는 것이 일반적이다

 

 

'책 > 리뷰' 카테고리의 다른 글

[리뷰] 누구나 자료 구조와 알고리즘  (1) 2025.01.09
'책/리뷰' 카테고리의 다른 글
  • [리뷰] 누구나 자료 구조와 알고리즘
개발자 밍
개발자 밍
dev0404 님의 블로그 입니다.
  • 개발자 밍
    Developer
    개발자 밍
  • 전체
    오늘
    어제
    • 분류 전체보기 (88)
      • 강의 (8)
        • UE Climbing System (3)
        • UE Dungeon (1)
        • HCI (4)
      • 책 (18)
        • 객체지향의 사실과 오해 (5)
        • Effective C++ (3)
        • 이득우의 게임 수학 (4)
        • 이것이 취업을 위한 컴퓨터 과학이다 (4)
        • 리뷰 (2)
      • C++ (2)
      • 알고리즘 (2)
      • 자료구조 (1)
      • Unreal (4)
      • 내일배움캠프 (52)
        • TIL (52)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    c++
    알고리즘
    객체지향
    그래픽스
    컴퓨터구조
    언리얼
    내일배움캠프
    게임수학
    자료구조
    Effective
    컴퓨터 구조
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
개발자 밍
[리뷰] 한 권으로 배우는 게임 프로그래밍
상단으로

티스토리툴바