2023. 9. 6.ㆍTech
케이뱅크 Compass meeting 중 직원들에게 게임 진행 행사 목적으로 개발한 간단한 게임을 만드는 방법에 대해서 설명드리려고 합니다.
본 포스팅은 Unity로 만들 수 있는 간단한 게임 제작 사례로 Unity의 동작 원리인 오브젝트 이동 방법과 충돌에 대한 이벤트 처리 등을 설명하고 Unity 구성요소에 대해서 설명합니다.
Unity는 게임을 개발하기 위한 개발 툴로 간단한 게임부터 3D게임까지 개발할 수 있는 게임 개발에서 많이 사용하는 도구입니다.
Unity 도구 구성요소
1️⃣ hierachy창 : 게임 Scene에 등장하는 것들의 리스트를 보여줌
2️⃣ Scene뷰 : 게임의 화면을 만드는 부분, 여기에 게임 오브젝트를 배치
3️⃣ 게임뷰 : 게임 플레이할 때 확인하는 화면. Scene뷰와 같이 있어서 탭으로 선택함
4️⃣ inspector 창 : 선택한 것에 대한 자세한 정보를 보여줌
5️⃣ 프로젝트 창 : 게임에 필요한 요소를 파일형태로 관리하고 있는 프로젝트 뷰. 이미지(Asset), 스크립트, 에니메이션, Scene등 모든 것이 있음
술래잡기 게임만들기
게임만들기(술래잡기)
간단한 게임을 만들기 위해서 scene을 생성하자.
[File]-[New Scene]
Basic 2D 선택 후 Create
빈 Scene이 만들어졌다. 캐릭터 이미지를 가져와서 마우스를 클릭하거나 터치 했을 때 해당 방향으로 이동하는 게임을 만들어보자.
이미지를 아래 처럼 드래그 앤 드랍해서 빈 Scene에 개체를 올리고
개체의 add component버튼을 아래처럼 클릭해서
Physics2D
Rigidbody 2D
Unity가 게임개발을 쉽게 하도록 Component를 제공하는데 그 중 하나가 Rigidbody이다. 해당 속성을 추가하면 개체는 물리적인 속성을 갖게 된다. 중력, 충돌시에 회전하는 등의 처리를 별도로 코딩없이 해준다.
1️⃣ gravity: 중력을 0으로 세팅해주자. 안하면 떨어진다.
2️⃣ Freeze Rotation 에 체크해주자. 다른데 부딪히면 돈다.
터치를 했을 때 그 방향으로 이동하도록 스크립트를 코딩하자.
OnTouchMoveNew.cs
1️⃣ Start : 오브젝트가 최초에 로딩될 때 실행되는 method, 개체에 대한 물리적인 속성을 가지고 있는 오브젝트를 생성
2️⃣ Update : Frame 마다 수행되는 Method, 35Fps이면 1초에 35번 호출됨
3️⃣ Input에서 모바일폰의 화면을 터치한 입력이 받아지면 수행됨, 변수 touchPos는 사용자가 터치한 위치에 대한 포지션을 저장
4️⃣ 터치된 포지션과 현재 개체의 포지션을 x, y좌표의 벡터값으로 정규화 하여 이동할 방향의 값을 정하고 개체의 velocity 속성에 vector 값을 입력해서 이동하게 함
개체에 스크립트를 적용하기 위해 아래 처럼 스크립트를 드래그앤드랍하자
시뮬레이터를 열고 테스트를 하면 된다.
https://youtube.com/shorts/BgAGN5LyPD0?feature=share
동작이 없어서 좀 아쉽다. 애니메이션을 넣어보자.
1️⃣ 연속으로 연출되면 움직이는 효과를 주는 이미지를 여러개를 선택하여
2️⃣ Scene에 드래그앤드랍해줌
아래처럼 나오는 화면에서 애니메이션의 이름을 정의해주고 저장
똑같이 Add Component 추가해서 Rigidbody 2D 추가해주고 스크립트 똑같이 적용해주면 됨
시뮬레이터로 테스트를 해보자. 걷는 것 처럼 보인다.
https://youtube.com/shorts/G3zZRF5B_j4?feature=share
술래를 만들어 보자
똑같은 방식으로 술래를 드래그앤드랍해서 아래처럼 만들자(애니메이션으로)
똑같이 Add Component 추가해서 Rigidbody 2D 추가해주고 값세팅도 똑같이 해주고
그런데 술래한테 잡혔을 때 게임이 끝나야 하는데 이벤트 처리를 어떻게 해야되는지의 문제가 남아있다. Collider Component를 사용하면 된다.
똑같이 Add Component 를 클릭하고 Box Collider 2D를 생성해주자
Physics2D
Box Collider 2D
Collider Component는 물리 충돌 처리를 위한 오브젝트의 형태를 정의하고 충돌시 이벤트 처리가 가능하게 한다. 별도 세팅 필요없이 생성만하자
술래말고 주인공 개체에도 Collider를 만들어 줘야한다.
술래가 쫓아다니는 스크립트를 코딩하자
ForeverChaseNew.cs
1️⃣ 전역변수 선언문에 아래 내용을 선언해주고
targetObjectName : 쫓아다녀야할 Target개체의 이름변수, 아래서 설명하겠지만 유니티 도구에서 해당 명칭을 지정해줄 수 있다.
speed : 속도
targetObject : 쫓아다녀야할 Target 개체
rbody : 해당 스크립트가 적용될 쫓아다니는 술래의 오브젝트
2️⃣ Start : 술래 개체와 주인공 개체에 대한 오브젝트를 생성해주고
3️⃣ 술래 개체의 위치와 주인공 개체의 위치의 차를 구해서 해당 Vector의 값을 정규화해서 쫓아갈 방향과 속도를 계산
4️⃣ 술래의 velocity 속성에 vector 값을 입력해서 쫓아다니게 함
아래처럼 스크립트를 술래에 적용하고, targetObjectName 에 주인공개체의 명칭을 세팅해주자.
시뮬레이터를 열고 테스트를 해보면 술래가 열심히 쫓아간다.
충돌시에 게임이 끝나는 내용을 구현해 보자
게임오버 이미지 아래처럼 세팅해주자.
1️⃣ 전역변수 선언문에 아래 내용을 추가로 선언해주고
gameoverObjectName : gameover 이미지의 명칭을 저장할 변수
gameoverObject : gameover 이미지의 개체
isGameover : 술래한테 잡혔을 때 gameover되었는지를 판단해주는 flag
2️⃣ Start : gameover 이미지를 최초에 비활성화 해줌
3️⃣ 술래 개체가 특정 오브젝트와 충돌이 있을 때에 OnCollisionEnter2D 이벤트가 생긴다. 해당 코드의 내용은 충돌한 개체의 명이 주인공 개체면 gameover 이미지를 띄워주고 gameover flag를 true로 해준다.
4️⃣ gameover flag가 false일때 주인공을 쫓아다니고 게임이 끝나면 그냥 멈춰있게 코딩을 했다.
아래처럼 gameoverObjectName에 게임오버이미지 명을 작성해주자.
시뮬레이터로 테스트를 해보자.
https://youtube.com/shorts/BciS8R_ties
https://youtube.com/shorts/BciS8R_ties
간단하게 술래잡기 게임을 만들어 보았습니다.
필자도 이걸 기반으로 회식피하기 게임을 만들었고 생각보다 개발하는 게 재미있어서 한번씩 해보시길 추천드립니다.
"야 너두 게임 만들 수 있어!" (아래는 회식피하기 게임입니다.)
https://youtube.com/shorts/HT9yBetaiK8?feature=share
케이뱅크와 함께 하고 싶다면 🚀
'Tech' 카테고리의 다른 글
얼굴 탐색 속도 높이기 : 벡터 데이터베이스의 이해 및 활용 (feat. Chroma) (0) | 2023.11.13 |
---|---|
Application Modernization-MSA (0) | 2023.09.06 |
코딩 없이 ChatGPT를 이용해서 웹페이지 만들기 (0) | 2023.09.06 |
학습 데이터 TFRecord 포멧으로 변환하기 (0) | 2023.09.06 |
전통적인 은행의 소켓 통신방식 소개 (0) | 2023.09.06 |