on
ai 주식투자
- Get link
- X
- Other Apps
목표: 본 장에서는 유니티의 실제 게임 제작 단계에서 다루는 다섯 가지 핵심 축인 씬(Scene), 프리팹(Prefab), UI 시스템, 입력(Input), 카메라(Camera)를 중심으로, 개발자가 플레이 가능한 콘텐츠를 구성하는 전 과정을 이해하도록 안내합니다.
유니티의 씬(Scene)은 하나의 “무대(Stage)”이자, 게임 오브젝트와 환경의 컨테이너입니다. 프로젝트의 구조적 단위로서, 씬을 어떻게 구성하느냐가 유지보수성과 로딩 효율을 좌우합니다.
using UnityEngine.SceneManagement;
public class SceneLoader : MonoBehaviour {
public void LoadLevel(string sceneName) {
SceneManager.LoadScene(sceneName);
}
public void LoadAdditive(string sceneName) {
SceneManager.LoadScene(sceneName, LoadSceneMode.Additive);
}
}
Additive 모드는 큰 맵을 여러 구역으로 나누어 로딩할 때 자주 사용됩니다.
유니티 개발에서 프리팹은 반복적으로 생성되는 오브젝트의 설계도입니다. 모든 캐릭터, 총알, UI 요소는 프리팹을 기반으로 구성되어야 효율적입니다.
public class EnemySpawner : MonoBehaviour { public GameObject enemyPrefab; public Transform spawnPoint;
void Start() {
Instantiate(enemyPrefab, spawnPoint.position, Quaternion.identity);
}
}
Instantiate() 함수는 프리팹을 실시간으로 복제하는 핵심 함수입니다. 파괴 시에는 Destroy()를 사용합니다.
공통된 구조를 유지하면서 일부 속성만 다른 오브젝트를 만들고 싶을 때, Prefab Variant 기능을 활용합니다. 예를 들어, 적 캐릭터의 공통 AI는 유지하면서 색상이나 속도만 다르게 설정할 수 있습니다.
유니티의 UI는 Canvas를 중심으로 구성되며, 이는 렌더링과 입력 이벤트의 기준이 됩니다. UI의 구조를 잘 설계하면 성능과 유지보수성이 크게 향상됩니다.
public class UIManager : MonoBehaviour { [SerializeField] GameObject pausePanel;
public void TogglePause() {
bool isActive = pausePanel.activeSelf;
pausePanel.SetActive(!isActive);
}
}
Button 컴포넌트의 OnClick() 이벤트를 통해 TogglePause() 함수를 연결하면, 비코드 형태로도 동작 제어가 가능합니다.
기존 Text 대신 TextMeshPro를 사용하면 고해상도 렌더링과 정교한 폰트 제어가 가능합니다. 모든 UI 프로젝트에서 TMP는 표준으로 간주됩니다.
유니티 2020 이후 버전에서는 신규 Input System 패키지가 표준으로 자리 잡았습니다. 이는 디바이스 독립적 입력 처리를 가능하게 하며, 액션 기반의 구조로 설계되어 있습니다.
Input System 설치.using UnityEngine; using UnityEngine.InputSystem;
public class PlayerInputController : MonoBehaviour {
private Vector2 moveInput;
public void OnMove(InputAction.CallbackContext context) {
moveInput = context.ReadValue();
}
void Update() {
transform.Translate(moveInput * Time.deltaTime * 5f);
}
}
이 코드는 키보드뿐 아니라 게임패드, 터치 입력까지 자동으로 지원합니다. 즉, 입력 로직을 플랫폼 독립적으로 유지할 수 있습니다.
카메라는 단순히 장면을 비추는 장치가 아닙니다. 연출, 몰입감, 정보 전달의 핵심 도구입니다. 유니티는 Cinemachine이라는 고급 카메라 시스템을 통해 복잡한 연출도 코드 없이 구현할 수 있습니다.
public class CameraFollow : MonoBehaviour { public Transform target; public float smoothSpeed = 5f; public Vector3 offset;
void LateUpdate() {
transform.position = Vector3.Lerp(transform.position, target.position + offset, smoothSpeed * Time.deltaTime);
}
}
LateUpdate()를 사용하면 플레이어 이동 후 카메라를 부드럽게 따라가게 할 수 있습니다.
씬은 무대를, 프리팹은 배우를, UI는 관객 인터페이스를, 입력은 제스처를, 카메라는 시선을 담당합니다. 이 다섯 요소가 유기적으로 결합될 때, 게임은 단순한 코드의 집합이 아니라 살아 있는 경험으로 완성됩니다.
유니티 콘텐츠 제작의 본질은 ‘각 시스템을 따로 배우는 것’이 아니라, 그것들을 하나의 경험으로 엮는 사고입니다.
Comments
Post a Comment