7/16 물리,사운드 및 이펙트

댓글 0
댓글을 작성하려면 로그인이 필요합니다.
아직 댓글이 없습니다. 첫 번째 댓글을 작성해보세요!

댓글을 작성하려면 로그인이 필요합니다.
아직 댓글이 없습니다. 첫 번째 댓글을 작성해보세요!

Force / Impuls

| 구분 | ForceMode.Force | ForceMode.Impulse |
|---|---|---|
| 의미 | 지속적으로 힘을 가함 | 순간적으로 충격을 가함 |
| 적용 방식 | 여러 물리 프레임에 걸쳐 사용 | 보통 한 번만 호출 |
| 질량 영향 | 받음 | 받음 |
| 시간 영향 | FixedDeltaTime의 영향을 받음 | 시간 간격과 무관하게 즉시 적용 |
| 주요 용도 | 이동, 가속, 추진력, 바람 | 점프, 폭발, 총알 피격, 넉백 |
| 호출 위치 | 주로 FixedUpdate() | 이벤트 발생 시 한 번 호출 |
| 느낌 | 서서히 빨라짐 | 속도가 즉시 크게 변함 |
힘을 계속 가하면 물체가 점점 가속됩니다.
void FixedUpdate()
{
rb.AddForce(Vector3.forward * 10f, ForceMode.Force);
}
자동차 엔진, 로켓 추진력, 바람에 밀리는 물체, 물리 기반 캐릭터 이동
짧은 순간에 강한 충격을 가합니다.
void Jump()
{
rb.AddForce(Vector3.up * 5f, ForceMode.Impulse);
}
점프, 폭발, 총알에 맞았을 때, 적을 밀쳐내는 넉백
Rigidbody 주요 기능 정리
힘과 회전력 계열
| 메서드 | 기능 | 대표 용도 |
|---|---|---|
AddForce() | 월드 좌표 기준으로 힘 적용 | 이동, 점프 |
AddRelativeForce() | 물체의 로컬 좌표 기준으로 힘 적용 | 자동차, 비행기, 로켓 |
AddTorque() | 월드 좌표 기준 회전력 적용 | 바퀴 회전, 물체 굴리기 |
AddRelativeTorque() | 로컬 좌표 기준 회전력 적용 | 비행체 회전 |
AddForceAtPosition() | 특정 위치에 힘 적용 | 문 밀기, 물체 한쪽 타격 |
AddExplosionForce() | 폭발 중심에서 바깥쪽으로 힘 적용 | 폭탄, 충격파 |
Rigidbody 인스펙터 값: 추가 물리적 성질
| 값 | 의미 | 참고 |
|---|---|---|
Mass | 질량(kg), 기본값 1 | 크면 같은 힘에 덜 움직이고, 충돌 시 상대를 더 세게 밀어냄 |
Linear Damping | 이동 시 받는 공기 저항 (구 Drag) | 0이면 저항 없이 관성으로 영원히 이동 |
Angular Damping | 회전 시 받는 저항 (구 Angular Drag) | 0이면 저항 없이 영원히 회전 |
Use Gravity | 중력 적용 여부 | 끄면 Project Settings의 중력(-9.81 m/s²)을 안 받음 |
Is Kinematic | 힘 계산 무시 | 켜도 여전히 물리 오브젝트라, 다른 Rigidbody에는 영향을 줌 |
Freeze (Constraints) | 체크한 축은 이동·회전이 일어나지 않음 | 캐릭터가 넘어지지 않게 회전 X·Z만 고정하는 식으로 사용 |
Layer Overrides | 이 오브젝트만 특정 레이어와 충돌 여부를 예외 설정 | 4절에서 배우는 Layer/Collision Matrix를 개별 오브젝 |
튀는 재질: Physic Material

Bounciness | 튀는 정도 (0 = 안 튐, 1 = 거의 그대로 튐) | 0 / 0.5 / 0.9 비교 |
Dynamic Friction | 움직일 때 마찰 (작을수록 미끄러움) | 0으로 두면 얼음판처럼 됩니다 |
Raycast는 특정 위치에서 특정 방향으로 보이지 않는 직선을 발사하여 Collider와 충돌하는지 검사하는 기능입니다.
시작 위치 ───────────────▶ 방향
충돌 지점
Physics.Raycast(
origin,
direction,
out hit,
maxDistance,
layerMask,
queryTriggerInteraction
);
| 매개변수 | 자료형 | 의미 |
|---|---|---|
origin | Vector3 | Ray가 시작되는 월드 좌표 |
direction | Vector3 | Ray를 발사할 방향 |
out hit | RaycastHit | 충돌한 물체의 상세 정보 |
maxDistance | float | Ray의 최대 거리 |
layerMask | int, LayerMask | 검사할 레이어 |
queryTriggerInteraction | enum | Trigger 감지 여부 |
| 반환값 | bool | 충돌하면 true, 아니면 false |
Raycast는 화면에 보이지 않으므로, 확인용으로 Debug.DrawRay를 함께 씁니다.
Debug.DrawRay(transform.position, Vector3.forward * 10f, Color.red);
Raycast 활용
| 활용 | 설명 |
|---|---|
| 바닥 감지 | 캐릭터가 땅에 서 있는지 확인해 점프 가능 여부를 정합니다 |
| 시선 처리 | 적이 플레이어를 볼 수 있는지(중간에 벽이 없는지) 확인합니다 |
| 즉시 명중(Hitscan) | 총알이 날아가는 시간 없이 조준 즉시 맞은 것으로 처리합니다 |
Layer: 오브젝트를 그룹으로 관리하기
오브젝트가 많아지면 "이 그룹끼리는 부딪히고, 저 그룹끼리는 무시하자"는 규칙이 필요해집니다. Layer는 오브젝트를 이름 붙은 그룹으로 나누는 시스템이고, 주로 두 곳에 씁니다.
| 기능 | 역할 | 예시 |
|---|---|---|
| Collision Matrix | 특정 레이어끼리만 충돌하게 설정 | Player와 Monster는 부딪히지만, Player와 FriendlyBullet(아군 총알)은 무시 |
| LayerMask (Raycast 필터) | Raycast가 특정 레이어만 감지하거나 무시하게 설정 | 투명벽 레이어는 이동은 막지만, 총알 Raycast는 통과 |

edit -> project settings -> physics -> settings -> layer collision matrix
Edit
→ Project Settings
→ Physics
→ Settings
→ Layer Collision Matrix
Layer Collision Matrix는 어떤 레이어끼리 물리 충돌을 계산할지 설정하는 표입니다.
예를 들어 Player와 Enemy의 체크를 해제하면, 두 레이어의 Collider가 서로 겹쳐도 물리 충돌을 처리하지 않습니다.
체크를 해제하면 발생하는 결과 -> 두 오브젝트 사이에 OnCollision / OnTrigger 이벤트가 발생하지 않음
LayerMask는 여러 Layer 중에서 “어떤 레이어를 검사할지” 선택하는 필터입니다.
// Enemy만 검사
int mask = LayerMask.GetMask("Enemy");
// Enemy와 Wall 검사
int mask = LayerMask.GetMask("Enemy", "Wall");
// Player를 제외한 모든 레이어 검사
int mask = ~LayerMask.GetMask("Player");
Physics Material

| 속성 | 범위 | 설명 | 값이 낮을 때 | 값이 높을 때 |
|---|---|---|---|---|
Dynamic Friction | 0~1 | 움직이거나 미끄러질 때의 마찰력 | 얼음처럼 잘 미끄러짐 | 빠르게 감속함 |
Static Friction | 0~1 | 정지한 물체가 움직이기 시작할 때의 마찰력 | 작은 힘에도 움직임 | 움직이기 어려움 |
Bounciness | 0~1 | 충돌했을 때 튀는 정도 | 거의 튀지 않음 | 고무공처럼 튐 |
Friction Combine | 선택 | 충돌한 두 표면의 마찰값 계산 방식 | 아래 표 참고 | — |
Bounce Combine | 선택 | 충돌한 두 표면의 탄성값 계산 방식 | 아래 표 참고 | — |
Sound
Unity에서 소리가 나려면 세 부품이 필요합니다. 음악 감상에 비유하면 음원 파일, 스피커, 귀입니다.
| 부품 | 역할 | 위치 |
|---|---|---|
AudioClip | 음원 파일 (mp3, wav) | Project 창의 에셋 |
AudioSource | 소리를 재생하는 스피커 | 소리 낼 오브젝트에 붙임 |
AudioListener | 소리를 듣는 귀 | Main Camera에 기본으로 있음 |
AudioSource를 3D로 변경한다는 것은 소리가 게임 월드의 위치를 가지게 된다는 뜻입니다.
| 설정 | 동작 |
|---|---|
2D | 오브젝트 위치와 상관없이 일정한 크기로 들림 |
3D | 소리가 나는 위치와 카메라 사이의 거리·방향에 따라 달라짐 |
Spatial Blend 0.5 | 2D와 3D 효과가 절반씩 혼합됨 |
| 구분 | 역할 |
|---|---|
AudioClip | 실제 음원 파일 |
AudioSource | 음원을 재생하는 컴포넌트 |
AudioMixer | 여러 AudioSource의 출력과 볼륨, 효과를 통합 관리 |
AudioListener | 최종적으로 소리를 듣는 위치, 일반적으로 Main Camera |
소리의 흐름은 다음과 같습니다.
Explosion AudioSource
↓
AudioMixer의 SFX 그룹
↓
Master 그룹
↓
AudioListener
↓
스피커
이펙트: ParticleSystem

Time.deltaTime VS Time.unscaledDeltaTime
| 구분 | Time.deltaTime | Time.unscaledDeltaTime |
|---|---|---|
| 의미 | 게임 시간 기준 프레임 간격 | 현실 시간 기준 프레임 간격 |
timeScale 영향 | 받음 | 받지 않음 |
timeScale = 1 | 정상적으로 증가 | 정상적으로 증가 |
timeScale = 0.5 | 절반으로 감소 | 변화 없음 |
timeScale = 0 | 0 | 계속 증가 |
| 게임 일시정지 | 함께 멈춤 | 일시정지 중에도 작동 |
| 주요 용도 | 캐릭터 이동, 게임 타이머, 게임 효과 | 일시정지 UI, 메뉴 애니메이션, 현실 시간 타이머 |
정리 질문 (퀴즈)
ForceMode.Force와 ForceMode.Impulse의 차이는 무엇인가요? -> 서서히 힘을 주는 방식, 즉시 힘을 주는 방식
공이 튀는 정도는 어디서 조절하나요? -> Physics Material의 Bounciness
소리가 나기 위한 세 가지 부품은 무엇인가요? -> audio listener, audio source, audio clip
AudioSource와 ParticleSystem에서 Play On Awake를 끄는 이유는 무엇인가요? -> Play On Awake 이 켜져 있으면 씬에 존재하게될 때, 반드시 실행되기 때문에
재생 전에 null 확인을 하는 이유는 무엇인가요? -> AudioClip이나 컴포넌트가 할당되지 않았을 때 발생하는 NullReferenceException을 방지하기 위해서
질량 2인 공에 Impulse 6을 주면 속도는 얼마가 되나요? 근거 공식은? -> Impulse 6 / Mass 2 = 3, F = m*a (힘 = 질량 × 가속도)
Raycast가 작은 물체를 놓칠 수 있는 이유와 대안은 무엇인가요? -> Raycast는 굵기가 없는 한 줄의 광선이라 작은 Collider를 비껴갈 수 있으므로, 반지름을 가진 SphereCast나 CapsuleCast를 사용할 수 있습니다.
Layer의 Collision Matrix와 LayerMask는 각각 어디에 쓰이나요? -> Collision Matrix는 레이어 간 물리 충돌 여부를 전역으로 정하고, LayerMask는 Raycast 등이 검사할 레이어만 선택할 때 사용
Is Kinematic을 켜도 다른 Rigidbody에 영향을 줄 수 있는 이유는 무엇인가요? -> 물리 연산을 안해도 충돌은 감지되기 때문에
XR을 활용한 게임 개발 3기(유니티) 수강생입니다. 곧 수료 하지만 앞으로 이곳에 가끔 저의 개발 경험이 나 지식 기록할까 합니다. 더 나아가 이 사이트가 제 개인위키의 역할을 할 수 있으면 좋겠습니다. 한국 게임 시장을 흔들겠습니다

게임 광고 수익은 단순히 광고를 붙이는 것이 아니라, 여러 광고 네트워크를 경쟁시켜 가장 높은 수익을 만드는 구조입니다.

안녕하세요. 플밍 4기 입니다. 게임 개발을 배우기 전 네트워크 엔지니어 도메인에서 익히고 배웠던 네트워크 이론에 대한 기초 입니다. 학습에 도움이 되길 바라며 공유 드립니다.