분류 전체보기
-
[C++] 2206번 벽 부수고 이동하기Algorithm/Baekjoon 2025. 3. 11. 15:51
문제https://www.acmicpc.net/problem/2206 코드#include #include #include #include using namespace std;/** * BFS를 사용하여 (0,0)에서 (n-1,m-1)까지 이동하는 최단 거리 계산 * 벽(1)을 한 번만 부술 수 있는 조건을 포함 * * @param n : 행 개수 * @param m : 열 개수 * @param board : 주어진 맵 (0: 이동 가능, 1: 벽) * @return 최단 거리 (이동 불가능할 경우 -1 반환) */int bfs(const int& n, const int& m, vector& board) { // 상, 하, 좌, 우 이동 방향 정의 int dx[4] = { -1, 1, 0 ..
-
[Chapter 3] 자원 관리C++ Theory/Effective C++ 2025. 2. 19. 17:43
1. 자원 관리에는 객체가 그만자원 누출을 막기 위해, 생성자 안에서 자원을 획득하고 소멸자에서 그것을 해제하는 RAII(Resource Acquisition Is Initialization)객체를 사용하자.일반적으로 널리 쓰이는 RAII 클래스는 tr1::shared_ptr 그리고 auto_ptr이다. 이 둘 가운데 tr1::shared_ptr이 복사 시의 동작이 직관적이기 때문에 대개 더 좋다. 반면, auto_ptr은 복사되는 객체(원본 객체)를 null로 만들어 버린다.
-
[Chapter 2] 생성자, 소멸자 및 대입 연산자C++ Theory/Effective C++ 2025. 2. 15. 18:18
1. C++가 은근슬쩍 만들어 호출해 버리는 함수들에 촉각을 세우자컴파일러는 경우에 따라 클래스에 대해 기본 생성자, 복사 생성자, 복사 대입 연산자, 소멸자를 암시적으로 만들어 놓을 수 있다.더보기// 컴파일러는 코드에서 복사 대입 연산자가 필요하다고 판단되면// 해당 함수를 컴파일 시점에 생성한다.class MyClass {public: int data;};int main() { MyClass obj1; MyClass obj2; obj1.data = 10; obj2 = obj1; // 여기서 컴파일러가 생성한 복사 대입 연산자가 호출한다. return 0;}// 그래서 우리가 작성한 위 코드가 코드 영역에는 아래와 같이 작성되어 있다.class MyClass {publ..
-
[Unity] 벽 관통 문제Dev/Unity 2025. 2. 12. 13:38
게임 개발 중 캐릭터가 벽을 관통하는 현상을 겪은 적이 있다. 이번 글에서는 Raycast를 활용하여 벽과의 충돌을 감지하고, 그에 따라 이동을 제한하는 방법을 소개한다. 먼저, 주요 함수들을 살펴보자.void StopAtWall(){ isBorder = Physics.Raycast(transform.position, transform.forward, 5, LayerMask.GetMask("Wall"));}void Move(){ ... if (!isBorder) transform.position += moveVec * moveSpeed * (walkDown ? 0.3f : 1f) * Time.deltaTime; ...}void FixedUpdate(){ ... ..
-
[Unity] 플레이어 자동 회전 문제Dev/Unity 2025. 2. 12. 13:30
게임 개발 중에, 아무 키도 누르지 않았는데 캐릭터가 자동으로 회전하는 현상이 발생했다. 문제 원인캐릭터의 Rigidbody가 외부 충돌로 인해 회전력을 받아서 문제가 발생했다.예를 들어, 총알 발사 구현 과정에서 탄피(BulletCase)가 캐릭터 위에 닿으면서, 의도치 않게 캐릭터가 회전하게 된 것이다. 해결 방법1. Layer Collision Matrix를 통한 충돌 제거Unity Project Settings > Physics 내의 Layer Collision Matrix에서 BulletCase와 Player 간의 충돌을 무시하도록 설정이렇게 하면 탄피가 캐릭터와 충돌하지 않아서 불필요한 회전이 발생하는 것을 근본적으로 차단할 수 있다. 2. Rigidbody 회전 제어 로직 추가Transfor..
-
[Unity] Layer Collision Matrix 적용 안될 때Dev/Unity 2025. 1. 23. 18:16
Player 피격 이벤트 구현 시 Player와 Enemy의 Layer Collision Matrix를 체크 해제 해도 충돌이 발생하는 경우가 있다. 문제 원인Player에 있는 Platform Effecter 2D의 "Use Collider Mask" 옵션이 켜져 있으면 Layer Collision Matrix와 독립적으로 작동하며, 충돌 레이어를 직접 제어할 수 있기 때문에 예상치 못한 충돌이 발생할 수 있다. Platform Effector 2D와 Use Collider MaskPlatform Effector 2D는 특정 물리적인 동작을 제어하는 컴포넌트로, 일반적으로 "일방 통행 플랫폼"을 구현할 때 사용된다.예: 아래에서 위로는 통과 가능하지만, 위에서 아래로는 충돌하는 플랫폼.Use Colli..
-
[Unity] 플랫포머에서 캐릭터 끼임 문제Dev/Unity 2025. 1. 23. 15:29
캐릭터가 평평한 바닥에서 이동 중 어딘가에 걸린 것처럼 움직이지 않는 문제가 발생한다. 특히, Rigidbody의 Freeze Rotation Z를 활성화하면 캐릭터가 끼인 것처럼 멈춘다. 문제 원인이 현상은 플랫폼을 구성하는 여러 개의 Box Collider 사이에 보이지 않는 작은 틈이 존재하여, 캐릭터가 그 틈에 걸려 발생하는 것으로 보인다. 해결 방법플랫폼의 기존 콜라이더에서 Used By Composite를 체크하고 콜라이더를 하나로 합쳐주는 Composite Collider를 추가한다. 그러면 Rigidbody도 같이 생길텐데, 이 때 Rigidbody의 Body Type을 Static으로 바꿔 플랫폼을 고정시켜 주자.
-
[Unity] 캐릭터가 벽에 붙는 현상Dev/Unity 2025. 1. 23. 13:32
transform.Translate를 사용할 때는 문제 없지만, Rigidbody.AddForce, Rigidbody.velocity같은 물리적으로 작동하는 함수로 이동할 때 해당 현상이 발생한다. 문제 원인이런 현상이 발생하는 근본적인 이유는 벽과의 마찰력 때문이다. 마찰력을 0으로 만들면 이런 현상이 발생하지 않는다. 하지만 캐릭터 자체의 마찰력을 0으로 만들면, 지면에서 움직일 때 멈추지 않고 미끄러지므로 측면의 마찰력만 0으로 만들어야 문제가 해결된다. 해결 방법1. Platform Effector 2D 추가 캐릭터에 Platform Effector 2D를 추가해주고, 기존의 Collider 2D의 Used By Effector를 체크해준다.Platform Effector 2D의 Use One..