Q.Slerp가 뭐야?

A.

Slerp는 구면선형보간(Spherically interpolate)을 의미한다.

구면선형보간은 두 지점 사이의 위치를 파악하는 선형보간(lerp)와 같지만 직선이 아닌 곡선으로 파악을한다.

 

이미지 출처 : https://gnaseel.tistory.com/14

Q.Slerp가 무슨뜻인지 알겠어, 그럼 Unity에서 어떡해 써??

A.

time 내에서 0 ~ 1 로 분할한뒤 위치를 적용시켜준다.

Vector3 start;
Vector3 end;
float time;

transform.position = Vector3.Lerp(start,end,time); // 선형 보간 

transform.position  = Vector3.SLerp(start,end,time); // 선형 보간

 

Lerp 레퍼런스

https://docs.unity3d.com/ScriptReference/Vector3.Lerp.html

 

Unity - Scripting API: Vector3.Lerp

Interpolates between the points a and b by the interpolant t. The parameter t is clamped to the range [0, 1]. This is most commonly used to find a point some fraction of the way along a line between two endpoints (e.g. to move an object gradually between t

docs.unity3d.com

Slerp 레퍼런스

https://docs.unity3d.com/ScriptReference/Vector3.Slerp.html

 

Unity - Scripting API: Vector3.Slerp

Interpolates between a and b by amount t. The difference between this and linear interpolation (aka, "lerp") is that the vectors are treated as directions rather than points in space. The direction of the returned vector is interpolated by the angle and it

docs.unity3d.com

 

Q.Slerp를 이용해서 Unity2D 객체 회전시키기 

A.회전을 바로 하는게 아닌 구면 보간을 이용하여 자연스러운 회전을 만들고싶을때 사용된다.

 

이미지 출처 : https://blog.naver.com/eaya13/222170877065

왼쪽이 3D 월드 좌표축 , 오른쪽이 2D월드 좌표축이다.

즉, 유니티 2D에서 회전을 적용시키고 싶으면 x 축이 아닌 z축을 회전 시켜야되는것이다. 

왼쪽 : x축으로 회전 , 오른쪽 : z축으로 회전

 

    private void Rotate(float inputX)
    {
    	//AngleAxis() : axis를 중심으로 angle(inputX)만큼 회전시킨 쿼터니언을 반환한다.
        Quaternion Rot = Quaternion.AngleAxis((inputX), Vector3.forward);

        transform.rotation = Quaternion.Slerp(transform.rotation, Rot, ROTATIONSPEED);
    }

 

'Unity > Unity2D' 카테고리의 다른 글

Unity2D :: 타일맵을 이용한 오브젝트 꾸미기  (0) 2024.10.07

https://0x72.itch.io/dungeontileset-ii

 

16x16 DungeonTileset II by 0x72

A free tileset + animated characters + weapons + others.

0x72.itch.io

타일맵 공부를 위해 해당 에셋으 사용하였습니다.

 

Q.게임 월드에 타일맵을 어떡해 생성해요?

A.하이어라키 창 우클릭 - 2D Object - TileMap - 원하는 타일맵 선택(해당 글에서는 Rectangular)

Rectangular : 흔히 아는 직각 모양의 타일맵

Hexagonal : 문명 게임의 육각형 타일맵을 제공

IsoMetric : 대각선 방향 + 위에서 아래로 바라보는 방향의 타일맵 제공

하이어라키창 우클릭 후 타일맵 생성

 

생성시에 Grid와 그 자식으로 Tilemap이 생성된다.

위의 Tilemap 오브젝트하나의 레이어 처럼 사용 될것이다. 

Grid 컴포넌트
Tilemap컴포넌트 , Tilemap Renderer에서 Order in Layer 를 변경하여 레이어 순서를 변경 가능

 

Q.어떡해 Tile을 생성해?

A.우리가 가지고 있는 Asset을 이용해서 Tile Palette를 만들어줘야한다.

말그대  물감을 짜서 그림그릴떄 사용하는 파렛트를 말하는것이다.

 

Tile Palette 생성은 프로젝트 창 우클릭 - Create - 2D - Tile Palette - 원하는 타일맵 파레트 선택

(해당 글은 Rectangular Palette를 선택)

Tile Palette를 Project 창에 생성된 모습

 

Tile Pallete를 생성 했으면 그 안에 스프라이트(물감)를 넣어야 된다.

 

팔렛트에 스프라이트 타일을 추가하는 방법

 

타일 팔렛트에 추가한 경우 프로젝트 창에 타일 스프라이트들이 추가 되있는 모습

 

>>실수로 스프라이트를 중복으로 넣었거나 잘못 배치한 경우

더보기
현재 똑같은 스프라이트가 2개가 들어가 있는 경우

 

팔렛트 배치를 잘못하거나 중복 스프라이트가 들어가거나 아니면 월드에 타일을 배치할때 잘못했을떄가 있을것이다.

 

그럴떄 당황하지 말고 타일 팔렛트의 펜 도구를 한번 클릭 후

타일 팔렛트의 펜 도구

 

Shift + 지우고 싶은 타일 클릭을 하게 되면 해당 타일이 사라지게 된다.

중복 스프라이트가 지워진 모습

Q.그럼 타일맵 레이어는 어떡해 추가해요?

A.Grid에 자식으로 타일팔렛트 오브젝트를 추가하고, 타일 팔렛트에서 설정하고 배치하면된다.

 

BackDeco를 선택 후 배치하면

Back과 BackDeco가 배치된 범위가 주황색 선으로 표시가 된다.

 

Q.타일에 충돌처리는 어떡해 해요?

A.Tile Collider 컴포넌트를 추가하면된다. 

Collider 레이어를 만들고 해당 TileMap 오브젝트의 Renderer를 비활성화 시키면된다.

 

Collider 타일맵 오브젝트를 생성하고 Tilemap Collider2D 컴포넌트를 추가하면 Scene 뷰에 콜라이더가 표시된다.

 

일반 오브젝트에 적용되는 콜라이더와 똑같이 스프라이트 크기에 맞춰 콜라이더가 생성된다.

물론 offset을 건들여 수정도 가능하다.

 

Render를 비활성화하면 이런 모습이 된다.
벽에 충돌하여 뚫지 못하고 지나가는 모습을 보여준다.

+ Recent posts