-
[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