잠깐. 이건 만들기전에 설명했어야했는데 놓친 부분이다.
유니티를 처음 접하는 사람들도 있을테니 유니티 내부의 구성요소에 대해 설명하고 글을 계속 읽어보자.
내부 구성요소는 조금 길어 더보기에 넣었다.
(그림이 잘 안보인다면 클릭해서 보자.)
유니티 내부 구성요소인 윈도우에 대한 설명이다. 1번은 11시 방향에 있고, 시계방향으로 돌아가면서 번호에 대해 설명한다.
1. 상단 옵션탭 (나는 그냥 이렇게 부를거다) - 유니티의 속성이나, 게임 오브젝트, 컴포넌트, 윈도우 등, 유니티의 전체적인 옵션을 나타낸다.
2. Scene 윈도우 - 우리가 실질적으로 게임을 만드는 공간이다. 이 공간에서 추가된 오브젝트의 위치를 옮기거나, 크기를 줄였다 키웠다 할 수 있다. 참고로 Scene윈도우의 좌측에 보면 손모양과 화살표 모양이 있는데 이건 유니티에서 오브젝트 편집을 쉽게 하기 위한 도구이다. 위에서부터 차례대로 QWERTY가 단축키이다. 영화로 치면 영화를 촬영하는 공간이라고 보면 된다.
3. Game 윈도우 - 우리가 Scene에서 만든 전체적인것이 게임에 어떻게 비춰지고 있는지 보여주는 공간이다. Game윈도우의 상단에 잘 보면 Display옆에 해상도를 설정하는 탭도 있다. Game윈도우는 카메라 하나만 비춰지고, 카메라의 크기, 촬영거리에 따라 보여지는 공간이 달라진다. 영화로 치면 우리가 영화관에 가서 보는 스크린이라고 보면 된다.
4. Hierarchy 윈도우 - 편하에 하이라키, 하이어라키라고 부른다. 하이라키윈도우는 오브젝트를 생성하고 삭제하고, 오브젝트 자체를 관리할 수 있는 공간이다. 계층공간이라고도 한다. 하이어라키창을 오른쪽 클릭하면 추가할 수 있는 오브젝트의 목록들이 뜬다. 영화로 치면 배우들이다.
5. Inspector 윈도우 - 인스팩터창이라고도 한다. 인스팩터창은 우리가 하이라키의 오브젝트를 클릭하거나, 프로젝트윈도우의 에셋을 클릭했을 때 나오는 정보창이다. 지금은 Item이라는 오브젝트가 클릭되어있는데, 그림을 클릭해서 크게 보면, Transform, Sprite Renderer, ItemManager등 여러 컴포넌트들이 보인다. 이렇게 오브젝트를 구성하는 옵션들을 컴포넌트라고 부르고, 컴포넌트 안의 Position, Rotation 같은것들을 속성이라고 부른다. 마지막의 ItemManager처럼 컴포넌트는 우리가 만드는 스크립트들도 컴포넌트로 부착시킬 수 있다. 영화로 치면 배우들의 자세한 정보들이다.
6. Project 윈도우 - 우리가 유니티를 처음 생성하고 실행했을 때, 생성되는 폴더를 보여주는것이다. 실제로 생성한 파일을 들어가보면, 프로젝트 폴더 안에 똑같은 폴더들이 있을것이다. 이걸 그냥 유니티 툴 내부에서 보여주는것이라 생각하면 된다. 여기에서 폴더를 만들면 윈도우탐색기 안에서 폴더를 만드는것과 같은 효과를 가진다. 즉, 그냥 윈도우탐색기의 폴더를 유니티 툴 내부에서 보여주는거라 생각하자.
이 외에도 다른 윈도우들이 많지만 지금은 그렇게 중요하지 않고, 글을 하나씩 읽어가면서 필요한 윈도우만 배워가도 된다.
최근에 너무 심심해서 그냥 내가 하고싶은 내가 만들어보고싶은 게임을 개발해보기로 했다.
유니티가 최근 Unity6를 발표했던데 아직 상용화가 되기엔 좀 있어야될것같고 평소에 쓰던 버전인 2021.3.14f로 개발하려고 한다.
이름은 FarmerStroy라고 지었는데 나중에 바꿀거다.
대충 생각해둔 게임 기획은 농부가 되어 농사를 짓고, 나중에 공장도 만들고, 수출하고, 회사를 경영도 해보고 하는 그런 게임을 만들거고, 멀티플레이는 생각하지 않는다.
그래서 첫 걸음인 플레이어 움직임부터 시작하려 한다.
솔직히 게임은 뭐든 움직임이 있어야한다.
플레이어가 움직이든 뭐든 움직여야 조금이라도 생동감 있어 보인다.
보드게임도 마찬가지로 카드가 움직이든, 플레이어의 말이 움직이든 한다.
그래서 일단 움직임을 구현할것이다.
아직 이미지나 이런게 준비되지 않아서 일단 Sprite의 Square를 생성해줬다.
여기에 플레이어 움직임을 구현한 후, 나중에 이미지 작업을 해둘 생각이다.
플레이어의 움직임을 구현하기 위해서 많은 기술들이 있다.
일단 방향키 하나씩 입력을 받아서 구현을 할 수 있지만, 해본 결과 코드가 너무 길어진다...
그래서 GetAxisRaw를 사용할것이다.
이건 Edit -> ProjectSettings -> InputManager -> Axis항목을 눌러보면 쭉 뜬다. 그 중 우리는 Horizontal, Vertical을 사용할것이다.
지원하는 기능이 많은데 눌러보면 하나하나 키가 배정되어있다는것을 볼 수있다.
다른것도 필요하면 여기서 쓰면 된다.
단, 이미지에 나와 있듯, 기본적으로 키가 세팅이 되어 있기 때문에, 현재는 방향키 혹은 wasd로만 움직일 수 있다. 나중에 필요하면 저기서 바꾸면 된다.
이제 PlayerManager 스크립트를 하나 생성해서 다음과 같이 입력하자.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerManager : MonoBehaviour
{
[Header("Moving")]
float xpos, ypos;
[SerializeField] float speed;
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
if(Input.GetKey(KeyCode.Space)){
xpos = Input.GetAxisRaw("Horizontal") * Time.deltaTime * speed * 1.5f;
ypos = Input.GetAxisRaw("Vertical") * Time.deltaTime * speed * 1.5f;
}
else{
xpos = Input.GetAxisRaw("Horizontal") * Time.deltaTime * speed;
ypos = Input.GetAxisRaw("Vertical") * Time.deltaTime * speed;
}
this.transform.position += new Vector3(xpos, ypos,this.transform.position.z);
}
}
일단 입력받은 값을 저장하기 위한 x,y포지션을 담을 변수를 선언하고, float형 speed도 선언했다. 이건 SerializeField를 붙여줬는데, 이걸 붙이면 Public선언이 아니더라도 인스팩터창에서 저 변수를 수정할 수 있다. 나중에 다른 스크립트에서 저 값을 받아올 순 없지만 지금은 딱히 필요한게 아니니 일단 저 선언을 해주자.
그리고 Update문에서 xpos,ypos를 각각 초기화 해준다.
Update문은 프레임마다 실행된다. 예를들어 1초에 60프레임씩 실행된다면 1초에 Update문이 60번 실행되는것이다.
xpos, ypos 모두 들어가는 수식은 같으니 하나만 예로 설명하면,
Input은 입력값을 받는 라이브러리라고 보면 된다. 저 안에 GetAxisRaw가 있다.
GetAxisRaw는 String형 매개변수를 받는다. 매개변수에 정확하게 받을 이름을 적어줘야한다.(틀리면 안된다!)
위의 이미지를 참고해서 잘 적도록 하자.
Time.deltaTime을 곱해줘서 나중에 일시정지나 시간을 멈춰야하는경우, 혹은 시간에 따라 플레이어의 속도를 조절할 수 있도록 하였다.
이외에도 다른 이유가 있으니 다음 블로그를 참고하자.
그리고 일단 나중에 쓸지는 모르겠지만, space키를 누르면 플레이어의 속도가 1.5배 빨라지도록 설정해뒀다.
그리고 받아온 값을 매 프레임마다 플레이어의 position에 더해주고있다.
이렇게 작업을 마치고, 이 스크립트를 아까 만들어 뒀던 Square에 붙여준다. 그냥 드래그해서 인스팩터창의 빈곳 아무곳이나 넣어주면 된다.
이게 어려우면 Square를 클릭한 후, 인스팩터창의 스크롤을 내려서 AddComponent를 클릭해 스크립트를 검색해 넣어주면 된다.
플레이어로 실행될 Square에 이렇게 스크립트를 붙여주고, 아까 선언했던 Speed에 4라는 값을 임시로 넣어줬다.
그러고 나서 실행하면 이렇게 움직일것이다.
'Develop > 마음대로 만드는 게임' 카테고리의 다른 글
[NProject] 마음대로 만드는 게임 - 5. 인벤토리 구현(디자인 만들기) (0) | 2024.05.10 |
---|---|
[NProject] 마음대로 만드는 게임 - 4. 플레이어 이동 제한 (0) | 2024.05.10 |
[NProject] 마음대로 만드는 게임 - 3. 카메라 설정 (0) | 2024.05.10 |
[NProject] 마음대로 만드는 게임 - 2. 타일맵 만들기 (0) | 2024.05.09 |
[NProject] 마음대로 만드는 게임 - 1. UI 기본 세팅 (0) | 2024.05.09 |