2024/09 13

유니티 부드러운 Scene 전환과 UI tween

이전에 레벨 씬과 스테이지1 씬을 만들어서 테스트 플레이를 통해 레벨 씬에 해당하는 버튼을 클릭하면 해당 스테이지로 씬 전환이 이루어지고 해당 스테이지에서 미션 성공 후 Next 버튼을 누르면 currentLevel + 1을 통해서 다음 스테이지로 이동하는 것을 했습니다. 그런데 씬 전환이 뭔가 어색하다는 것을 알 수 있습니다. 다른 게임을 플레이하고 나서 현재까지 개발된 상태의 예시 게임의 씬 전환을 보면 즉각적으로 씬 전환이 되는 것을 체감할 수 있습니다. 딱딱한 씬 전환을 부드럽게 만드는 방법은 여러가지가 있지만 가장 많이 사용하는 것이 Fade In & Out 입니다. Fade In & Out은 화면을 천천히 들어나게 하고 반대로 천천히 가리는 기능입니다. 예를 들어 연극이나 뮤지컬에서도 다른 장..

카테고리 없음 2024.09.30

유니티 Sound Manager와 AudioSource

게임 플레이를 하는데 흥미를 유발하는 시스템과 눈길이 계속 가는 아름다운 그래픽만으로 게임의 재미를 줄 수 있지만 이를 극대화 시키는 요소는 사운드라고 생각합니다. 상황에 맞는 BGM(BackGround Music)과 SFX(효과음)이 있어야 게임의 재미와 함께 몰입감을 줄 수 있기 때문입니다. 이번 포스팅에서는 유니티에 음원을 넣고, 이를 사운드 매니저를 통해 스크립트로 제어하는 방법에 대해 알아보겠습니다. 음원을 유니티에 적용하기 위해서는 먼저 음원을 구해야 하는데 그 전에 어느 부분에서 어떤 효과음이 나오고 스테이지에 따른 BGM은 몇 개를 사용할지를 정해야 합니다. 이 부분은 기획단계에서 정해야 작업을 수월하게 할 수 있습니다. 다시 한 번 강조하지만 기획은 게임 제작의 설명서이므로 개발 전에 꼭..

카테고리 없음 2024.09.28

유니티 프리팹 Prefab, 부모와 자식 오브젝트, 인스펙터창에 오브젝트 일괄 적용 팁

이번에는 레벨 씬에서 LevelDataList 오브젝트에 있는 Data의 Element를 활용해서 스테이지 버튼의 상태를 보여주는 방법을 포스팅하겠습니다. 어떻게 구현할지를 이미 구현하고 스샷을 남긴 그림을 첨부해보겠습니다. LevelDataList 오브젝트에 있는 Data Element에는 isOpen 값을 가지고 있고 미션 성공한 스테이지를 포함해서 다음 스테이지까지 값을 1로 바꾸어 저장하도록 되어 있습니다. 이제 이 값을 불러와서 시작함수를 통해서 버튼 상태에 적용하겠습니다. 먼저 위 그림에서 UI를 어떤 것이 필요할지를 분석해 봅시다. 첫번째 할 일은 버튼 UI image 컴포넌트와 button 컴포넌트 접근이며, 두번째 할 일은 스테이지를 표시하는 UI Text 상태 변경을 위한 text 컴포..

카테고리 없음 2024.09.26

유니티 Save and Load

게임에서 플레이 진행 상황을 저장하고 다시 불러오는 기능은 매우 중요합니다. 오랜 시간 게임을 지속해서 하기 어렵기 때문에 내 캐릭터의 레벨, 스테이터스, 재화, 탐험 구간, 퀘스트 진행 데이터로 만들어서 게임을 저장하고 다시 게임할 때 불러 올 필요가 있습니다. 하이퍼 캐주얼 장르 같은 간단한 게임에서는 게임저장 및 불러오기를 안 하는 경우도 있으나 최소한의 진행 레벨 상황이나 캐릭터 스킨 적용 목적을 위한 재화 때문에 간단한 게임저장 및 불러오기 기능을 사용하기도 합니다. 구글 플레이 스토어나 앱 스토어에서 다운로드 및 플레이 가능한 Helix jump라는 게임이 있는데 이 게임은 공이 계속 통통 튕길 때 플레이어가 좌우 조작만으로 공을 위험 지역이 아닌 안전 지역에서만 점프하면서 내려가도록 하는 게..

카테고리 없음 2024.09.25

유니티 싱글톤과 List<>

게임은 월드 내에서 캐릭터를 조정해서 모험하고 게임에서 얻는 재화를 통해 캐릭터를 업그레이드 하는 재미를 줍니다. 그래서 게임 내 캐릭터를 포함한 각 오브젝트들은 컴포넌트 간에 데이터를 주고 받게 되는데 같은 scene 내에서 주고 받는 방식이 아닌 씬 전환에서도 데이터를 주고 받을 수 있습니다. 아주 간단한 게임은 씬 전환 없이도 같은 씬에서 데이터를 처리하지만 조금 복잡하거나 또는 아주 복잡하지 않더라도 게임 내에 성장 시스템이 약간이라도 있다면 씬 전환은 필요합니다. 예를 들어서 던전이나 필드에서 몬스터를 사냥하면서 게임 내 재화인 골드를 얻으면 마을로 돌아가서 장비를 수리하고 좋은 장비를 구입해서 더 강한 캐릭터를 느낄 수 있는 것이 액션이나 RPG 장르 게임의 기본적인 시스템입니다. 사냥 같은 ..

카테고리 없음 2024.09.24

유니티 오브젝트 객체 컴포넌트, 코루틴

유니티는 각 오브젝트에 Transform, Sprite Renderer, RigidBody, Collider 등 다양한 컴포넌트들을 갖고 있습니다. 이런 컴포넌트에는 오브젝트에 영향을 주는 값들이 있고 inspector뷰에서 이 값을 조정해서 오브젝트가 움직이거나 속성이 바뀌는 이벤트가 발생합니다. 직접 값을 변경하지만 실제 플레이에서는 이 값을 직접 바꿀 수 없기 때문에 스크립트 컴포넌트를 활용해서 데이터 값을 가져와서 사용합니다. 이번에는 TrashObject 스크립트에서 GameController에 있는 함수를 가져와서 사용하는 방법을 해보겠습니다. 먼저 TrashObject를 더블클릭해서 스크립트를 열어줍니다.public class TrashObject : MonoBehaviour{    priv..

카테고리 없음 2024.09.23

유니티 게임 미션 성공 이벤트

게임에서 플레이어는 게임 속 아바타 역할을 하는 캐릭터를 조정하면서 게임 세계를 모험하면서 가상 세계에서 느끼는 색다른 느낌을 경험합니다. 그러나 게임이 단순히 탐험하거나 모험만 하는 것으로 끝난다면 그것은 게임보다는 가상 현실을 그냥 보는 것과 가깝다고 해야 할 것입니다. 그래서 게임은 플레이어에게 어떤 목표를 제시하고 그것을 완수 했을 때에 따른 보상을 주고 그 보상을 통해 캐릭터를 더 강하게 만들면서 플레이어에게 성장의 묘미를 느끼게 만듭니다. 미션 완수, 보상, 성장의 사이클이 되기 위해서는 미션의 목표가 있어야 합니다. 게임 시스템이 복잡한 RPG 장르의 경우에는 퀘스트에 따라서 목표가 다양하지만 단순한 캐주얼 또는 하이퍼 캐주얼 게임 장르는 목표가 단순합니다. 따라서 게임 제작 경험이 부족하거..

카테고리 없음 2024.09.20

유니티 타일맵 시스템

게임에서 플레이어들에게 보여지는 것들은 플레이 캐릭터, npc, 적, UI 그리고 게임 세계인 배경이다. 2D 게임의 탑뷰 방식에서는 어떻게 배경을 보여주는 것이 좋을지 알아보겠습니다. 탑뷰 방식은 고전 게임이나 예전 2D RPG 장르에서 많이 사용하는 방식입니다. 따라서 배경의 그림이 화려하지 않으며 깔끔하면서도 반복적인 지형을 보여 줍니다. 예를 들어 초원의 풀이 있는 곳, 나무 형태, 절벽, 집들이 똑같고 패턴화되어서 배경을 이룹니다. 다양하고 화려한 방법으로도 표현을 할 수 있지만 넓은 게임 세계를 표현하기 위해서 단순한 그림 위주로 패턴을 만들어 게임월드를 만듭니다. 방법은 지형을 정사각형으로 타일화해서 지형을 그려주듯이 생성하는 것입니다.주로 타일 한 개의 크기를 32x32 픽셀로 하기 때문에..

카테고리 없음 2024.09.19

유니티 2D 애니메이션

애니메이션은 게임에서 캐릭터 또는 적이 마치 살아 있는 듯하게 보이도록 하는 것으로 개발과정에서 중요한 파트입니다. 스크립트를 통해 아무 변화가 없는 이미지의 이동은 게임답지 못하기 때문인데요. 게임이 시작되면 게임 캐릭터나 적에게 여러가지 동작변화를 주어야 게임처럼 보입니다.애니메이션에는 2D와 3D가 있지만 여기서는 2D 애니메이션 만드는 방법을 다루겠습니다. 애니메이션을 만드는 방법은 다음 3가지가 있습니다. 1. 프레임 바이 프레임 애니메이션:고전 방식이며, 오래된 2D 게임에서 사용하는 방법이지만 다양한 동작을 표현하는데는 이 방식밖에는 없습니다. 캐릭터의 동작이 매우 다양한 격투 게임이 대표적인 예입니다. 기술 공격이 매우 다양할 뿐만 아니라 그 표현을 매우 화려하게 만들기 때문에 이 방식을 ..

카테고리 없음 2024.09.18

유니티 카메라 이동과 활용

게임을 만들다 보면 스크립트를 적용하고 플레이를 하면 예상 밖의 결과를 보는 경우가 종종 있습니다. 캐릭터 이동을 적용해서 확인하면 움직이는 캐릭터를 당연히 카메라를 통해 계속 볼 것이라는 착각을 말하는 것입니다. 카메라 이동에 대해 명령어가 없다면 캐릭터가 카메라 프레임 밖을 벗어나서 사라지는 것은 당연한 결과입니다. 그럼 카메라도 이동시켜 보겠습니다. 아주 간단한 스크립트로 카메라가 플레이어 캐릭터를 중심에 두고 따라다니게 됩니다.using System.Collections; using System.Collections.Generic; using UnityEngine; public class CameraFollow : MonoBehaviour {      public float cameraMoveSp..

카테고리 없음 2024.09.18