본문 바로가기

취미로 하는 게임코딩_gameCodingAsHobby

유니티 각개격파_019_스크린 좌표를 월드 좌표로 변환하기 이전 글에서 스크린 좌표계에서 사용하는 위치와 월드 좌표에서 사용하는 위치는 다르다고 했다. 그래서 월드 좌표에 있는 게임오브젝트와 스크린 좌표계를 사용하는 마우스 포인트의 위치는 서로 상호작용할 수 없다. 여기서는 마우스 포인트 위치를 월드 좌표로 변환하는 코드를 알아본다. 먼저 2D 환경 부터 테스트 해보자. 유니티 허브를 실행한 후 3D 모드의 프로젝트를 하나 만든다. 처음에는 2D 환경으로 테스트 하기 때문에 글을 참고해서 2D환경으로 수정한다. 귀찮으면 그냥 2D 타입으로 프로젝트를 만들고, 3D 타입으로 테스트 할 때는 다시 하나 더 만들어도 상관없다. 여기서는 3D환경을 2D 환경으로 수정하여 테스트 한다. Layout을 2by3으로 바꾼다. Hierarchy창에 Sphere를 하나 만든다... 더보기
유니티 각개격파_018_3D 환경에서 2D로 변경하기 프로젝트를 만들 때 2D 또는 3D를 선택할 수 있다. 여기서는 3D와 2D 환경의 차이를 알아보기 위해 3D 프로젝트를 2D 프로젝트로 변경해 본다. 3D 프로젝트를 하나 만든다. 기본 화면은 위와 같다. 3D 환경은 특징은 다음과 같다. 1. Light(빛) 오브젝트가 기본으로 설정된다. 2. Gizmos(기즈모)라는 좌표 도구가 있다. 3. Scene(씬) 화면이 원근감 있게 보인다. 위 화면은 2D 프로젝트의 첫화면이다. Light오브젝트가 없고 Gizmos 도구가 없다. Scene화면은 원근감 없이 일정하게 보인다. 이제 3D 화면을 2D 화면으로 바꿔보자. 씬 화면에 2D 보기와 3D보기로 바꿔주는 버튼이 있다. 클릭하면 오른쪽에 있던 Gizmos(기즈모) 가 사라지고 격자 모양도 원근감이 없.. 더보기
유니티 각개격파_017_Texture Compression_텍스처 압축 게임에 사용할 sprite(스프라이트; 이미지)를 사용하려고 할 때 이미지를 선택하면 Inspector창에 아래와 같은 메시지가 뜨는 경우가 있다. 1. Only POT texture can be compressed if mip-maps are enabled 밉맵이 활성화 된 경우 POT 텍스처만 압축 할 수 있습니다. 2. Only textures with width/height being multiple of 4 can be compressed to ETC1 format 너비 / 높이가 4의 배수인 텍스처 만 ETC1 (또는 ETC2) 형식으로 압축 할 수 있습니다. 3. Only POT textures can be compressed to ETC1 format POT 텍스처만 ETC1 형식으로 압축.. 더보기
유니티와 C# 개념 정리_002_MonoBehaviour, Awake, Start , Update, LateUpdate 앞 글에서 게임오브젝트에 기능을 부여하려면 Component(컴퍼넌트)를 연결한다고 했다. C# 으로 작성한 스크립트 파일도 컴퍼넌트로 붙일 수 있다. 게임 오브젝트에 컴퍼넌트로 붙이기 위해 스크립트 파일을 만든 후 더블클릭 등으로 파일을 열면 아래와 같이 등록된 편집기로 편집할 수 있는 상태가 되고 유니티에서 제공하는 기본 코드가 나타난다. 5번 줄에 클래스명(PlayerController)이 있고 그 뒤에 : MonoBehaviour 이 붙어있다. 콜론 ( : ) 기호는 상속받는다는 뜻이고 상속하는 주체는 MonoBehaviour이라는 유니티의 Base Class(기본 클래스)이다 라는 뜻이다. 즉, MonoBehaviour은 유니티에서 스크립트 사용을 위해 C#으로 만들어 놓은 클래스 이름이며 Pl.. 더보기
유니티 각개격파_016_카메라(Camera) 게임 오브젝트가 2차원 평면(x , y)에서 움직이든, 3차원 (x, y, z)에서 움직이든 이것을 보여주는 것은 카메라가 담당한다. 즉, 실제 게임에서 일어나는 장면을 보여주는 것이 카메라이다. 유니티에서는 Scene(씬) 탭에서는 게임오브젝트를 편집하고, Game(게임) 탭에서는 카메라에 정해진 위치와 각도에 따라 Scene에서 실제로 눈에 보이는 부분을 보여준다. 카메라로 보는 부분에는 Width(넓이), Height(높이), Depth(깊이)가 있다. Depth는 얼마나 멀리(far) 볼 수 있는가를 나타낸다. 카메라가 보는 전체 공간을 View Volume(뷰 볼륨)이라고 한다. 카메라가 보는 뷰볼륨의 형태는 2가지가 있다. orthographic (직교) perspective (원근) 카메라의.. 더보기
유니티 각개격파_014_벡터(Vector)와 이동(Translate)_마우스 이동 계속해서 이번에는 큐브를 마우스를 클릭해서 움직여보자. 큐브에 Movement (움직임)라는 스크립트를 만들어서 컴퍼넌트로 추가한다. Scripts 폴더에 Movement라는 스크립트를 만든 후 큐브에 컴퍼넌트로 붙이거나 큐브에서 바로 Add Component 버튼으로 새 스크립트를 만들 수 있다. 코드 편집에서 다음과 같이 입력한다. 6번 줄에 변수 movingSpeed (이동 속도)를 만들고 초기값은 0으로 한다. private으로 지정해서 이 클래스 밖에서는 호출할 수 없도록 한다. 초기값을 0으로 해 두면 테스트 할 때 매번 이 숫자를 수정해야 하는 번거러움이 생긴다. 이런 경우 SerializeField(직렬화)를 사용할 수 있다. 위 상태에서 5번 줄 처럼 대괄호와 함께 SerializeFie.. 더보기
유니티 각개격파_015_스크린(Screen) 좌표와 World(월드) 좌표 유니티의 space(공간)은 Screen Space(스크린 공간)과 World Space(월드 공간)이 있다. 각각의 공간에서 사용하는 좌표계가 따로 있다. Screen Point 스크린 좌표계는 화면의 width(넓이)와 height(높이)에 따라 x , y 좌표가 정해진다. 화면의 넓이와 높이를 결정하는 해상도의 픽셀(pixel)에 따라 화면에 나타내는 2D 좌표계이다. 예를 들어 Game탭에서 해상도를 800 x 480으로 정했다면 왼쪽 아래의 x, y 좌표는 (0, 0)이고 오른쪽 위가 (800, 480)이다. 마우스 포인터의 위치나 UI를 넣는 캔버스(Canvas) 등이 이 좌표계를 사용한다. 그러므로 마우스로 클릭하는 위치 또는 손가락으로 터치하는 위치를 가져올 때 사용할 수 있다. World.. 더보기
유니티 각개격파_013_벡터(Vector)와 이동(Translate)_키보드 이동 계속해서 이번에는 큐브를 키보드의 키 값을 입력받아서 움직여본다. 먼저 Edit > Project settings를 클릭한 후 Input Manager (입력 관리자)를 선택해보자. 유니티 엔진에서 기본으로 설정되어 있는 입력시스템(Input System)을 볼 수 있다. 제일 위에 있는 Horizontal (수평)을 클릭하면 Negative Button (음(-)의 값 버튼)은 left(왼쪽) 화살표키 , 양(+)의 값 버튼은 오른쪽 화살표키로 정해져 있다. 또한 대체할 수 있는 (Alternative) 키는 a 와 d 키로 정해져 있다. 즉, 왼쪽 화살표키는 A키와 같고, 오른쪽 화살표키는 D와 같다. 수평(좌우)으로 움직일 때 음(마이너스)의 값 또는 양(플러스)의 값을 받고 싶으면 해당 키를 누르.. 더보기