오늘의 학습 키워드

Quaternion, LayerMask, 연산자 우선순위

 

공부한 내용

Quaternion과 벡터의 곱셈

쿼터니언과 벡터를 곱하면 다음과 같은 작업이 이루어진다.

1. 벡터를 쿼터니언으로 변환 : v = (x,y,z)인 벡터는 (0,x,y,z)의 쿼터니언으로 변환됨

2. 이렇게 변환된 쿼터니언을 원래의 쿼터니언 q와 그 켤레 쿼터니언 q'의 사이에 두고 곱셈을 수행(qvq)한다. (순서 중요 ! => 순서에 따라서 값이 달라짐)

3. 결과 쿼터니언의 (x,y,z)요소는 원래 벡터 v가 쿼터니언 q에 의해 회전한 후의 좌표를 나타냄

아래 예시는 벡터 v를 축으로 degree만큼 회전한 벡터 값이 나온다.

private static Vector2 RotateVector2(Vector2 v, float degree)
{
    // 벡터와 쿼터니언을 곱하면 벡터에서 쿼터니언으로 회전한 벡터 값이 나온다.
    return Quaternion.Euler(0, 0, degree) * v;
}

 

레이어마스크와 비트 연산과 쉬프트 연산

게임 오브젝트에는 레이어가 있는데 레이어 마스크레이어를 비트 마스크로 포맷한 정수이다.

예시로 레이어가 6이라면 레이어 마스크는 비트 연산을 통해 64가 된다.

레이어

근데 아래의 상황에서 한 가지 의문점이 생겼다. 

| 비트 연산이 << 쉬프트 연산보다 먼저 일어나면 문제가 생기는 것이 아닐까? 라는 의문이었다.

괄호를 넣더라도 안 넣더라도 결과가 같기 때문에 무슨 이유가 있을 것이라고 생각했다.

그래서 어떤 게 더 빠른지 찾아보게 되었다.

답은 연산자 우선순위라는 것이 있었고 어렴풋이 예전에 공부했던 기억이 났다.

쉬프트 연산자가  [|, &, ^] 비트 연산자보다는 빠르고 [~] 비트 연산자보다는 느리다고 한다.

levelCollisionLayer.value == (levelCollisionLayer | 1 << collision.gameObject.layer)

 

 

오늘의 회고

 오늘은 유니티 컨퍼런스를 듣는 시간이 있었다. 내가 주목해서 봤던 것은 ProBuilder나 ChatGPT를 이용해 플랫포머 기획부터 개발까지 하는 것이었다. ProBuilder는 프로토타입을 만들기에 좋은 에셋인 것 같았고 ChatGPT는 클라이언트 입장에서 기획쪽에서 도움을 받아 개발에 집중할 수 있을 것 같았다. 나중에 프로젝트를 만든다면 ChatGPT의 도움을 받는 것도 괜찮다고 생각한다.

 다음 주는 유니티 심화 개인 과제가 주어지는 주이다. 정말 배울 것이 많고 질문할 것도 많아서 엄청나게 성장할 수 있는 기회라고 생각한다. 다음 주 열심히 해보자. 파이팅!

 

 

참고 : 

http://www.tcpschool.com/codingmath/priority

 

코딩교육 티씨피스쿨

4차산업혁명, 코딩교육, 소프트웨어교육, 코딩기초, SW코딩, 기초코딩부터 자바 파이썬 등

tcpschool.com

https://docs.unity3d.com/kr/2022.2/Manual/layers-and-layermasks.html

 

레이어와 레이어마스크 - Unity 매뉴얼

모든 게임 오브젝트는 단일 레이어에 존재하지만 API가 영향을 미치는 레이어를 설정할 수 있는 Unity API는 레이어를 직접 사용하지 않습니다. 대신 레이어마스크를 사용합니다.

docs.unity3d.com

 

+ Recent posts