본문 바로가기
Unity

[Unity] Unity learn Local multiplay

by leejiwoo21 2026. 1. 26.

목표는 게임씬의 화면을 반으로 나눠서 플레이어는 WASD, 오른쪽 플레이어는 방향키로 조작하는 것까지 입니다.

 

유저가 입장하는 방식은 player input manage 스크립트를 활용하면 좋을 것같고,

 

 

이 목표에서 포인트

1. 화면 나누기

2. 조작키 분리하기

입니다.

 

 

1. 화면을 나누는 방법은 스크립트에서 Camera.rect로 각 카메라가 게임씬에서 보이는 화면 크기를 지정하여 두 개의 화면으로 만들 수 있고, Rect의 사용법은

 

Camera 오브젝트를 인스펙터에서 할당하고

Camera.rect( 실수1, 실수2, 실수3, 실수4 )  를 입력하여 사용합니다.

 

0 ~ 1 의 4개의 실수를 인자로 받아서 화면의 범위를 결정하는데,

실수1 = x축 시작 위치

실수2 = y축 시작 위치

실수3 = x축 범위

실수4 = y축 범위이고

 

만약, (0, 0, 0.5, 1)이라면

먼저 시작점은 화면의 왼쪽 아래인 (0, 0)이고

x축 범위 0.5는 0 ~ 0.5까지인 왼쪽 너비 절반에 해당하고

y축 범위 1은 0 ~ 1까지를 사용하여 높이 전체에 해당합니다.

 

 

화면의 범위는 위와 같이 나눴고, 플레이어마다 카메라를 붙어준 다음 각각의 카메라의 범위를 Start에서 정해줍니다.

이렇게 첫 번째 포인트인 화면 나누기가 가능합니다.

 

두 번째인 조작키 분리는 아래의 두 가지 방법으로 해결할 수 있습니다.

1) 플레이어 조작 스크립트를 2개 만들기,

2) 스크립트는 공유하되, Player Input Action으로 두 플레이어의 방향키 버튼을 다르게 할당하기

 

제가 사용한 2번 방법을 설명드리겠습니다.

 

먼저 player Input Action이란 키보드나 조이스틱 등의 조작과 캐릭터의 행동을 매핑해서 에셋으로 관리하는 것입니다.

 

디폴트로 저장된 에셋은 플레이어의 이동을 WASD와 화살표 방향키로 조종할 수 있는데, 이러면 어떤 키를 누르던 두 플레이어가 모두 반응하므로, 이를 분리해야합니다.

 

디폴트 에셋인 InputSystem_Actions을 2개 복사해서 Player1, Player2로 이름짓습니다.

이 에셋의 창에서 하나는 WASD, 다른하나는 방향키로 Move에 해당하는 키를 편집해 겹치지 않도록 바꿉니다.

 

이것을 플레이어 오브젝트에서 사용하려면 PlayerInput 컴퍼넌트를 추가하고 Actions 항목에 위에서 편집한 에셋을 넣고, 

플레이어 움직임 스크립트를 아래처럼 작성합니다.

using UnityEngine;
using UnityEngine.InputSystem;

public class PlayerController : MonoBehaviour
{
	// 속도, 회전속도
    private float speed = 20f;
    private float turnSpeed = 45f;

    private PlayerInput playerInput;
    private InputAction moveAction;

    Vector2 moveInput;

    void Awake()
    {
    	// 컴포넌트에서 매핑해둔 에셋 안의 Move부분을 불러온다
        playerInput = GetComponent<PlayerInput>();
        moveAction = playerInput.actions["Move"];
    }

    void Update()
    {
    	// 움직임을 입력받고
        moveInput = moveAction.ReadValue<Vector2>();

		// 직진과 회전
        Vector3 move = new Vector3(0, 0, moveInput.y);
        transform.Translate(move * speed * Time.deltaTime);
        transform.Rotate(Vector3.up, moveInput.x * turnSpeed * Time.deltaTime);
    }
}

 

이 코드 하나로 두 플레이어가 공유하여 사용할 수 있다.

 

 

반응형

'Unity' 카테고리의 다른 글

[Unity] 2D 플레이어 조작법 및 주의사항  (0) 2026.02.03
[게임 개발] 증강 테트리스  (0) 2026.01.27
[Unity] Script 사용법  (0) 2026.01.24
[Unity] vscode 연결 안될 때(퍼옴)  (0) 2026.01.24
[Unity] 에디터 조작법 모음  (1) 2026.01.22

댓글