사생활 보호 설정
https://gamjia.tistory.com
Updated News
Mini Rooms
답글수 [0]
What Friends Say
한마디로 표현해봐~
1촌평 관리
[Unity] 움직이는 재미! 플레이어 조작의 모든 것 🕹️
GamJia 2025. 5. 11. 00:00
안녕하세요 게임 개발자 GamJia 입니다오늘은 Unity에서 키보드, 마우스, 터치 입력으로
Unity Chan을 직접 움직이고 제어하는 방법을 배워보겠습니다.
Unity편에서만 특별히 기존 Legacy 입력과
Input System 입력을 구분지어서 설명 드릴게요!
✍️ 이 글에서 다룰 내용 ✅ 프로젝트 준비: Unity Chan과 Rigidbody 설정 ✅ 기존 Input Manager 키보드 입력✅ 기존 Input Manager 클릭/터치 조작 추가 ✅ Input System 패키지 이해 및 키보드 입력✅ Input System으로 클릭/터치 조작 추가
이번 튜토리얼을 위해 Unity Chan 모델을 Scene에 추가하고
Component 설정을 이미지와 동일하게 설정 해주세요!
만약 없다면 이 게시글을 참고해주세요!
[Unity] Unity 처음이라면? 꼭 봐야 할 입문 가이드 📘
안녕하세요 게임 개발자 GamJia 입니다 오늘은 Unity로 게임 개발을 시작하시는 분들을 위해설치부터 프로젝트 생성, 인터페이스 핵심 기능까지 쉽게 설명해드리려고 합니다!✍️ 이 글에서 다룰
gamjia.tistory.com
가장 먼저 UnityChanController라는 Script를 생성하고,
기존 Input Manager를 사용하여 키보드 입력을 처리하는 코드를 작성해볼게요.
using UnityEngine; // using UnityEngine.InputSystem; // Input System은 아직 사용하지 않으므로 주석 처리 public class UnityChanController : MonoBehaviour { [Header("Movement Settings")] public float moveSpeed = 5f; // 캐릭터 이동 속도 public float jumpForce = 5f; // 점프 힘 private Rigidbody rigidbody; // 물리 계산을 위한 Rigidbody 컴포넌트 private Vector3 targetPosition; // 마우스 클릭 이동을 위한 목표 지점 void Awake() { // 게임이 시작될 때 Rigidbody 컴포넌트 참조를 가져옵니다. rigidbody = GetComponent<Rigidbody>(); // 초기 목표 위치는 현재 캐릭터 위치로 설정합니다. targetPosition = transform.position; } void FixedUpdate() { // 물리 업데이트 주기마다 키보드 입력에 따라 각 이동 함수를 호출하거나, // 마우스 클릭 이동을 처리합니다. HandleInputAndMovement(); } void Update() { // 점프 감지는 Update에서 처리합니다. HandleJumpInput(); } void HandleInputAndMovement() { float horizontalInput = Input.GetAxisRaw("Horizontal"); // 좌우 입력 (A/D 또는 방향키 좌우) float verticalInput = Input.GetAxisRaw("Vertical"); // 앞뒤 입력 (W/S 또는 방향키 상하) // 키보드 입력이 있을 경우, 해당 방향으로 이동 if (verticalInput > 0) { MoveForward(); } else if (verticalInput < 0) { MoveBackward(); } if (horizontalInput > 0) { MoveRight(); } else if (horizontalInput < 0) { MoveLeft(); } } void HandleJumpInput() { // 스페이스바를 눌렀을 때 점프 if (Input.GetKeyDown(KeyCode.Space)) { Jump(); } } // 캐릭터를 앞으로 이동시키는 함수 public void MoveForward() { rigidbody.velocity = Vector3.forward * moveSpeed + new Vector3(0, rigidbody.velocity.y, 0); // 이동 시작 시 마우스 클릭 목표를 현재 위치로 초기화하여 키보드/UI 이동 우선시 targetPosition = transform.position; } // 캐릭터를 뒤로 이동시키는 함수 public void MoveBackward() { rigidbody.velocity = Vector3.back * moveSpeed + new Vector3(0, rigidbody.velocity.y, 0); targetPosition = transform.position; } // 캐릭터를 왼쪽으로 이동시키는 함수 public void MoveLeft() { rigidbody.velocity = Vector3.left * moveSpeed + new Vector3(0, rigidbody.velocity.y, 0); targetPosition = transform.position; } // 캐릭터를 오른쪽으로 이동시키는 함수 public void MoveRight() { rigidbody.velocity = Vector3.right * moveSpeed + new Vector3(0, rigidbody.velocity.y, 0); targetPosition = transform.position; } // 캐릭터를 점프시키는 함수 public void Jump() { rigidbody.velocity = new Vector3(rigidbody.velocity.x, jumpForce, rigidbody.velocity.z); } }
회전은 안해서 이상하지만 그 내용은 이후에 추가할게요^^;
Script 저장 후 게임을 실행하고 방향키를 눌러 보세요
W, A, S, D 또는 방향키를 사용해서 Unity Chan을 앞, 뒤, 좌, 우로 움직일 수 있고,
스페이스바를 누르면 점프하는 것을 확인할 수 있을 거예요!
혹시 Input Manager의 키 설정을 변경하고 싶다면
Project Settings > Input Manager에서
설정을 변경할 수 있답니다!
이제 UnityChanController 스크립트에 Legacy Input 방식을 사용하여
마우스 클릭으로 이동하는 기능과, 터치로 점프하는 기능을 추가해볼게요.
그 전에 UI Setting을 먼저 해주겠습니다
여러분은 Package만 Import 해주시면 됩니다!
UI Setting은 제가 미리해두었습니다ㅎㅎ
Controller Canvas.unitypackage 0.03MB
Scene에 적용하면 이런 모습입니다
방금 불러온 Prefab 우클릭 해서
Prefab > Unpack 해줄게요!
(Unity Chan에 연결된 Script를 같이 쓰기 위해 풀어주었습니다!)
UnityChanController Component가 있는
Unity Chan을 On Click Event에 연결해주고
각각의 버튼에 맞는 이벤트를 연결해주세요!
아까 키보드 조종처럼 버튼으로도
Unity Chan을 자유롭게 움직이는 모습입니다!
버튼 눌린게 잘 안 보이지만 열심히 누르고 있습니다^^..
이제 이전에 작성한 UnityChanController Script의 내용을
Unity Input System 버전으로 바꿔볼게요.
Input System은 더 유연하고 확장 가능한 입력 처리를 제공한답니다.
Unity Input System
Input System을 사용하기 위해서는 해당 Package가 필요합니다
Package Manager > Input System을 찾아서
Install 해주겠습니다!
Input System Package Install이 완료 돼면
Player Input이라는 Component 추가가 가능해집니다
추가해주고 Create Actions 버튼을 클릭해
Input Action Profile을 생성해주겠습니다!
Action을 추가하면 이런 창이 뜨게 됩니다
여러가지 Property 값들을 설정할 수 있는데요
각각의 Property에 대한 설명은 다음과 같습니다
using UnityEngine; using UnityEngine.InputSystem; // Unity Input System 네임스페이스 추가 public class UnityChanController : MonoBehaviour { [Header("Movement Settings")] public float moveSpeed = 5f; // 캐릭터 이동 속도 public float jumpForce = 5f; // 점프 힘 private Rigidbody rigidbody; // 물리 계산을 위한 Rigidbody 컴포넌트 private Vector2 moveInput; // 입력 시스템을 통해 받은 방향 입력 값 (x: 좌우, y: 앞뒤) void Awake() { // Rigidbody 컴포넌트 참조를 가져옵니다. rigidbody = GetComponent<Rigidbody>(); } void FixedUpdate() { // FixedUpdate는 물리 연산 주기마다 호출되며, 입력된 방향으로 캐릭터를 이동시킵니다. Vector3 moveDirection = new Vector3(moveInput.x, 0, moveInput.y); // 2D → 3D 방향 변환 rigidbody.velocity = moveDirection.normalized * moveSpeed + new Vector3(0, rigidbody.velocity.y, 0); } void Update() { // 점프 감지는 Update에서 처리합니다. HandleJumpInput(); } // Unity Input System의 "Move" 액션이 발생할 때 호출됩니다. public void OnMove(InputValue value) { moveInput = value.Get<Vector2>(); // 방향 벡터 값을 저장 (예: WASD, 조이스틱 등) } void HandleJumpInput() { // Input System을 통해 스페이스 키가 이번 프레임에 눌렸는지 확인합니다. if (Keyboard.current.spaceKey.wasPressedThisFrame) { Jump(); } } // 캐릭터를 점프시키는 함수 public void Jump() { rigidbody.velocity = new Vector3(rigidbody.velocity.x, jumpForce, rigidbody.velocity.z); } }
저장 후 실행 해보면 기존 Input Manager처럼
잘 움직이는걸 확인할 수 있습니다
기능은 동일한데 코드는 간결해져서 너무 좋아요!
마지막으로 Input System을 UI에 연결해보겠습니다
설정 전에 EventSystem에 들어가서
Standalone Input Module를 Input System과 연결해주겠습니다!
버튼에 On-Screen Button Component를 추가해주세요
Jump는 Space 나머지 버튼들은 WASD를 연결해주면 끝!
간단하죠?
버튼에 키보드 기능을 연결 해보았는데요.
잘 기억해뒀다가 이후에 스킬 공격, HP 회복,
뒤로가기 등에도 사용해보세요!
오늘은 Unity의 기존 Input Manager (Legacy Input) 방식과
새로운 Input System 방식을 사용하여
Unity Chan을 직접 조작하는 다양한 방법을 배워봤습니다.
이제 여러분은 게임의 인터랙티브성을 높이는 방법을 이해하고,
키보드, UI 버튼을 통해 캐릭터를 제어할 수 있게 되었을 거예요!
앞으로도 Unity를 처음 시작하는 분들을 위해실전 팁과 초보자용 가이드를 계속 공유할 예정이니,다음 글도 기대해주세요!
감사합니다!