🎮 주제 : Pillar와 Bee — Rigidbody, Is Kinematic, Constraints 완전 이해
태그 : #Unity #Rigidbody #IsKinematic #Constraints #Trigger #Transform
📌 학습 요약
- Rigidbody의 본질 : 오브젝트가 유니티 물리 엔진(Physics Engine)의 계산 대상이 되게 하며, 중력·관성·충돌 등의 물리 효과를 부여함
- Is Kinematic의 활용 : 물리 엔진의 계산에서 제외시키고 스크립트(transform)를 통해 직접 위치와 회전을 제어하고자 할 때 사용함
- Constraints와 제약 : 물리 연산은 유지하되 특정 축의 움직임이나 회전을 잠글 때 사용하며, Is Kinematic이 켜진 상태에서는 의미가 없음을 이해함
- 오브젝트 구성 전략 : 고정된 감지체(Pillar)와 직접 이동하는 객체(Bee)의 컴포넌트 조합을 통해 효율적인 충돌 시스템 구축
🛠 주요 기능 및 구현 상세
1. 물리 엔진 개입 여부에 따른 이동 제어
- 물리 제어 (OFF) : 중력, 마찰력 등 외부의 힘에 의해 자연스럽게 움직여야 하는 객체에 적합함
- 직접 제어 (ON) : AI의 경로 이동, 카메라 연출 등 스크립트의 의도대로 정확히 움직여야 하는 객체에 적합함
2. Bee와 Pillar의 충돌 메커니즘
- 감지 방식 : Pillar의 Collider를 Is Trigger로 설정하여 물리적 밀려남 없이 Bee의 진입만을 감지함
- 삭제 로직 : OnTriggerEnter에서 태그 비교를 통해 타겟에 도달한 Bee를 즉시 제거하여 메모리 관리 및 연산 최적화
🛠 주요 코드 및 구현 설명
직접 이동 기반의 벌 AI (Bee.cs) - C#
using UnityEngine;
public class Bee : MonoBehaviour
{
[SerializeField] float speed = 5f;
[SerializeField] Transform target;
void Start()
{
// 태그를 이용해 목표 지점(Pillar) 탐색
GameObject pillar = GameObject.FindWithTag("Pillar");
if (pillar != null)
target = pillar.transform;
}
void Update()
{
if (target != null)
{
// 1. 목표 방향을 바라보게 회전
transform.LookAt(target);
// 2. 물리 엔진이 아닌 transform을 통한 직접 이동 (Is Kinematic 권장 구조)
transform.position += transform.forward * speed * Time.deltaTime;
}
}
private void OnTriggerEnter(Collider other)
{
// 3. Pillar와 접촉 시 객체 제거
if (other.CompareTag("Pillar"))
{
Destroy(gameObject);
}
}
}
✅ 문법 및 개념 요약 정리
경우 계산
| Is Kinematic = OFF | 물리 엔진이 모든 힘(중력 등)을 계산하여 적용 |
| Is Kinematic = ON | 물리 엔진 계산 제외, transform으로만 제어 가능 |
| Constraints | 물리 연산 중 특정 축의 이동/회전을 고정함 |
| LookAt | 전달받은 Transform 방향으로 forward 축을 즉시 회전 |
✨ 느낀 점
- 단순히 물체를 움직이는 기능을 넘어, 물리 엔진이 개입하는 시점과 제외되는 시점을 구분하는 것이 최적화의 핵심임을 깨달음
- Is Kinematic이 켜진 상태에서 Constraints를 설정하는 것은 불필요한 연산 낭비임을 이해하여 컴포넌트 설정의 효율성을 높임
- transform.forward와 Time.deltaTime의 조합이 물리 엔진 없이도 얼마나 일관된 이동을 보장하는지 체감함
'SBS아카데미 > 유니티' 카테고리의 다른 글
| [Unity - TIL] PlayFab과 Photon 연동을 통한 로그인 및 로비 연결 흐름 이해 (0) | 2025.11.13 |
|---|---|
| [Unity - TIL] Photon Network와 서버 구조 및 로그인 UI 설계 (0) | 2025.11.12 |
| [Unity - TIL] 데코레이터 패턴을 활용한 디버프 시스템 구현 (0) | 2025.11.04 |
| [Unity - TIL] 마우스 클릭 이동 구현과 충돌 감지 및 디버프 시스템 설계 (0) | 2025.10.31 |
| [Unity - TIL] 유니티 상태 관리, 대기 시간 처리 및 객체 생성 최적화 학습 (0) | 2025.10.29 |