ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [TIL] 유니티 문법활용
    TIL 2024. 5. 22. 21:07

    유니티 문법활용

     

    목차 
    1. 코루틴 (Corutine)
    2. 충돌 (Collider, Rigidbody2D)
    3. RayCast

     

    코루틴 (Corutine)

    코루틴을 사용하면 작업을 다수의 프레임에 분산할 수 있다.

    Unity에서 코루틴은 실행을 일시 정지하고 제어를 Unity에 반환하지만 중단한 부분부터 다음 프레임을 계속할 수 있는 메서드이다.

     

    코루틴의 특징

    • 처리와 처리 사이에 대기 시간을 넣을 수 있다.
    • 여러 작업을 동시에 병렬처럼 보이도록 처리해 준다. (그러나 실제로는 병렬은 아니다.)

     

    코루틴을 실행 시키는 방법

    StartCorutine(코루틴 함수);  yield Return으로 반환

     

    1. 코루틴 함수 자체를 넣는다.

    ex) StartCorutine(코루틴 함수);

    2. string 으로 넣는다.

    ex) StartCorutine("코루틴 함수");

    3. 코루틴을 Ienumerator, Corutine 변수에 할당하여 넣는다.

    ex) Coruntine corutine;  corutine = StartCorutine(코루틴함수/"코루틴함수");

     

    코루틴을 중지시키는 방법

    StopCorutine(코루틴 함수);  

     

    String형식이나 함수() 형식을 파라미터로 넘긴 코루틴 또는

    Coruotine이나 Ienumerator에 할당한 코루틴도 정지가 가능하다.

     

     private void Start()
     {
         Corutine corutine;
         corutine = StartCorutine(Test());
         
         StopCorutine(corutine);
     }
     
    IEnumerator Test()
    {
        yield return null;  
    }

     

    yield

    제어권을 유니티한테 양보한다는 뜻으로 다음 업데이트가 끝날 떄 까지 제어권을 유니티 생명주기에 반환한다.

    yield의 종류

    yield return null : 해당 프레임의 Update문이 끝나면 해당 라인 다음 구문을 실행

    yield return new WaitForEndOfFrame : 한 프레임이 완전히 종료 될 떄(화면 렌더링 까지 끝날 때) 다음 구문 실행

    yield return new WaitForFixedUpdate() : 해당 프레임의 FIxedUpdate문이 끝나면 해당 라인 밑 부분 실행

    yield return new WaitForSeconds(value) : 파라미터 Value 값의 시간이 지나면 해당 라인 밑 부분 실행

    yield return new WaitForSecondsRealTime(value) : 파라미터 Value값의 실제 시간이 지나면 해당 라인 밑 부분 실행

    yield return new WaitUntil(Func<bool>) : 파라미터 (Func<bool>)의 결과가 true일 때 해당 라인 밑 부분 실행

    yield return new WaitWhile(Fun<bool>) : 파라미터 (Func<bool>)의 결과가 false일 때 해당 라인 밑 부분 실행

    yield return StartCorutine(): 새로 실행시킨 코루틴이 종료됨ㄴ 해당라인 밑 부분 실행

     

    WaitForSeconds(value)  와 WaitForSecondsRealTime(value) 의 차이점

    둘의 차이점은 Time.TimeScale의 영향을 받느냐 안받느냐이다.

    Seconds는 TimeScale의 값이 0일 경우 멈추게 되지만 RealTime은 멈추지 않고 계속 실행된다.

     

     

     

    코루틴을 쓸 때 알아 둘 점

    • 같은 코루틴 함수를 여러번 호출할 수 있다.
    • 코루틴 내부에서 코루틴을 호출할 수 있다.
    • 코루틴을 string으로 실행 할 경우 오타가 안나게 조심해야 한다.
    • 오브젝트가 꺼지거나 삭제되면 코루틴도 멈춤다. 
    • 코루틴은 비동기가 아니다.(= 병렬 처리가 아니다.)
    코루틴은 직렬이 엄청 빨라서 병렬처럼 보일 뿐이다 

     

     

    충돌

    Collider2D

    • Edit Collider : 콜라이더 사이즈를 조절할 수 있게 해주는 옵션
    • IsTrigger: 콜라이더가 충돌 체크만하고 물리적 작용을 하지 않는다.
    • UseByEffector: 해당 콜라이더를 이펙터의 영향을 받도록 해주는 옵션
    • UsedByComoisute: 해당 콜라이더가 자식 콜라이더와 합쳐서 하나의 콜라이더 처럼 사용될 수 있다.
    • Auto Tiling: spriterenderer의 DrawMode가 Tiled로 설정되어 있을때 Collider의 모양도 자동으로 갱신되게 해준다.
    • Offset: 콜라이더의 위치 조절
    • Size: 콜라이더의 사이즈 조절
    • EdgeRadius : 모서리를 둥글게 깎아준다.

    Rigidbody 2D

    Body Type 

    Dynamic : 모든 타입과 충돌하고 중력과 힘의 영향을 받는다

    Kinematic : 물리적인 계산은 안하지만 충돌 체크는 한다.

    Static : Static으로 설정할 경우 움직이지 않는다.

     

    • Material : PhysicMaterial  적용 옵션
    • Simulated : 물리 계산 실행 옵션
    • UseAutoMass : 질량 자동 계산 옵션
    • Linear Drag : 선형 움직임 저항 옵션
    • Angular Drag : 회전 움직임 저항 옵션
    • Gravity Scale: 중력 값 옵션
    • Collision Detection: 충돌 감지 옵션
    • Sleep Mode: 오브젝트 휴면 상태 옵션
    • InterPplate: 물리 업데이트 보간 옵션

    Physics Material

    Friction : 마찰력

    Bounciness: 탄성력

     

    OnCollision2D, OnTrigger2D

    한 쪽이라도 트리거가 켜져있다면 OnTrigger2D 이다.

    충돌감지 confuse 움직임을 무조건 막아야할 떄

     

    Raycast

    출발점부터 내가 설정한 방향으로 ray를 쏴서 찾는 물체가 있는지 없는지 찾아주는 기능으로

    약간 레이저 포인트와 유사하다고 생각이 되었다.

    Raycast(Vector2 origin, Vector2 direction, float distance); 
    Raycast(시작 지점, 쏠 방향, 거리); 

     

    Raycast를 통해 찾으려는 오브젝트는 Collider가 붙어있어야 감지할 수있다.
    특정 오브젝트만을 감지하고싶다면 레이어나 태그를 설정해서 찾아야한다.

     

    RayCastAll , BoxCastAll

    모든 충돌한 물체를 반환하지만

     

    RayCast는 한 개의 RayCastHit만을 반환한다

     

     

    레이캐스트 종류

    한 줄로 쓰는 일반적인 ray와 다르게 범위를 감지할 수 있다.

     

    BoxCast 

    CapsuleCast

    SphereCast

     

    Debug.DrawRay

    일반적으로 레이캐스트는 시각화되어있지 않지만 내가 잘 적고 적용했는지가 궁금할 때 DrawRay를 사용하면

    시각화 하여 보여준다.

    Debug.DrawRay(transform.position, forward, Color.green);
    Debug.DrawRay(시작위치, 방향, 색깔);

     

     

     

     

     

    2024.05.30 튜터님 피드백 받고 잘못되었던 정보 몇가지 수정했습니다! 감사합니다!

    'TIL' 카테고리의 다른 글

    [TIL] 유니티 숙련주차 1  (0) 2024.05.24
    [TIL] 객체지향 코드 설계 2  (0) 2024.05.23
    [TIL] VS Code / VisualStudio  (0) 2024.05.21
    [TIL] DOTween 사용  (0) 2024.05.20
    [TIL] Interface 상속과 Json에 관하여  (0) 2024.05.17
Designed by Tistory.