본문 바로가기
Unity/기초

Raycast, Physics, Rigidbody

by 롤다 2024. 2. 8.

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