01. Raycast
- 레이캐스트. 눈에 보이지 않는 광선을 쏴서 물리적 충돌을 감지한다.
- targetDir(목적지 - 시작).normalized
- 최적화하여 배열 설정
- public LayerMask enemyMask;
- 관통하고 싶으면 Physics.RaycastAll을 쓰면 된다.
- transform.position은 오브젝트의 Pivot을 기준
- Physics2D.Linecast(시작 position, 종료 position, layermask);
// 적에게 공격을 한 후에 그 지점에서 타겟 방향으로 적을 찾아야 하는 경우 공격한 적을 포함해서 적을 찾기
// results 배열을 재사용해서 최적화
RaycastHit2D[] results = new RaycastHit2D[2];
var hits = Physics2D.RaycastNonAlloc(transform.position, targetDir, results, 10, enemyMask);
if (hits > 1)
{
check = true;
}
// Raycast가 wall에 hit가 true 일때 타겟각도에 대해 반사각을 구하기
RaycastHit2D hit = Physics2D.Raycast(transform.position, targetDir, 3, wallMask);
if (hit)
{
var dir = Vector2.Reflect(targetDir, hit.normal);
}
02. Physics
// 적에게 공격을 한 후에 그 지점에서 5반경에 포함된 다른 적을 찾아야 하는 경우,
// 공격한 적을 포함해서 1을 초과한 적 찾기
// results_ 배열을 재사용해서 최적화
Collider2D[] results_ = new Collider2D[2];
var colls = Physics2D.OverlapCircleNonAlloc(transform.position, 5, results_, enemyMask);
if (colls > 1)
{
check_ = true;
}
03. Rigidbody
Body Type
- 다이나믹(Dynamic): 주변의 모든 물체와 상호작용
- 키네마틱(Kinematic): 중력과 힘이 없이 없고 스크립트에 의해 이동
- 스태틱(Static): 움직이지 않는 물체
Mass: 1Mass는 1Kg
Linear Drag: 움직임에 영향을 미치는 저항계수
Angular Drag: 회전 움직임에 영향을 미치는 저항계수
Collision Detection
- Discrete: 물체와 물체가 부딪혔을 때, 빠르게 부딪힌다면 서로 겹치거나 통과할 수 있는 타입
- Continuous: 서로 겹치거나 통과하지 않습니다. 대신 Discrete보다 더 많은 CPU 시간을 사용
Interpolate
- None: 움직임에 부드러움을 미적용
- Interpolate: 게임 오브젝트의 이전 프레임의 위치를 기반하여, 부드럽게 움직임
- Extrapolate: 게임 오브젝트의 다음 프레임의 위치를 추정하여, 부드럽게 움직임
'Unity > 기초' 카테고리의 다른 글
List, Dictionary (0) | 2024.02.08 |
---|---|
클릭, 터치 상태에 따른 이벤트 (0) | 2024.02.08 |
Move, Rotation, Quaternion (0) | 2024.02.08 |
Physics Joints in Unity 2D(물리관절) (0) | 2024.02.08 |
Event Function Sequence 실행 순서 이벤트 함수 (1) | 2024.02.08 |