Dev/Unity
-
[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..
-
[Unity] 스프라이트 시트(아틀라스)를 사용하는 이유Dev/Unity 2025. 1. 17. 16:46
위 사진은 이미지에 따른 게임 stats 창이다. "1번 -> 2번"으로 갈 때와 "1번 -> 3번"으로 갈 때의 차이를 보면 똑같이 이미지가 1개 추가됐지만 Batches 값이 다른 것을 볼 수 있다.먼저, Batch와 드로우 콜에 대해 알아보자.1. 드로우 콜(Draw Call)CPU → GPU 명령드로우 콜은 “이 오브젝트를 그려라”라는 명령을 CPU가 GPU에게 전달하는 과정을 의미한다.한 번의 드로우 콜이 발생할 때마다 CPU와 GPU 사이에 통신 비용이 들기 때문에, 드로우 콜이 많아질수록 전체 성능(프레임률)에 부담이 된다. 2. 배치(Batch)여러 오브젝트를 한 번에 묶어 그리는 것Unity에서 “Batch”는 “한 번에 그려질 오브젝트 그룹”을 의미한다.배치 1개 = 일반적으로 드로우 ..
-
[Unity] 캐릭터 대각선 이동 시 속도 증가 문제Dev/Unity 2024. 11. 28. 10:54
캐릭터 이동 방법 1. Position 이동using System.Collections;using System.Collections.Generic;using UnityEngine;public class ExampleClass : MonoBehaviour{ public float moveSpeed = 5f; void Update() { if (Input.GetKey(KeyCode.W)) { transform.position += Vector3.forward * Time.deltaTime * moveSpeed; } if (Input.GetKey(KeyCode.S)) { transform.po..