본문 바로가기
디지털노마드

챗GPT 게임개발80: Unity에서 다양한 조이스틱 타입을 활용한 플레이어 컨트롤 구현하기

by 인텔리노마드라이프 2025. 1. 6.
728x90

안녕하세요. 인텔리원스튜디오(IntelliOneStudio)입니다.

 

이번 시간에는 Unity에서 다양한 조이스틱 타입을 활용해 플레이어를 컨트롤하는 방법을 알아보겠습니다. FixedJoystick, FloatingJoystick, VariableJoystick, 그리고 DynamicJoystick을 사용하여 다목적 플레이어 이동 시스템을 구축하는 방법을 단계별로 설명드릴게요.

 

이 가이드는 Unity UI 기반의 2D 게임에서 효과적인 조이스틱 구현과 사용자 맞춤 컨트롤을 설정하는 데 도움을 줄 것입니다.

 


신개념 메모리 게임의 탄생. 외워라! 창고.

2024.11.14 - [분류 전체보기] - [외워라!창고] 챗GPT를 활용해서 개발한 두 번째 게임을 여러분께 소개합니다!

 

[외워라!창고] 챗GPT를 활용해서 개발한 두 번째 게임을 여러분께 소개합니다!

안녕하세요, 인텔리원스튜디오(IntelliOneStudio)에서 흥미진진한 소식을 가지고 왔어요! 저희가 챗GPT를 활용해서 개발한 두 번째 게임을 여러분께 소개합니다! 이 게임은 챗GPT의 놀라운 AI 기능을

intellinomadlife.tistory.com

 

 

창고에 물건을 보관하면 더이상 보여주지 않고, 오로지 당신의 기억력으로 찾아야해요.

저희가 챗GPT를 활용해서 개발한 첫 번째 게임을 여러분께 소개합니다! 이 게임은 챗GPT의 놀라운 AI 기능을 활용해 개발했어요. 즐거움이 가득한 이번 게임은, 챗GPT를 활용해서 누구든지 게임을 재미있게 만들 수 있다는 것을 보여줄 거에요.

 

* APP Store 에서 다운로드 

https://apps.apple.com/kr/app/%EB%86%8D%EB%B6%80%EC%9D%98-%EA%BF%88/id6479183930

 

‎농부의 꿈

‎오래된 전설이 숨겨져 있는 [농부의 꿈]목장 한구석에서 ‘비밀의 문'과 '마법 책'이 발견되었어요. [변신하는 동물들] 병아리가 합쳐져 닭이 되고, 닭이 합쳐져 고슴도치로 변신하며, 점점 더

apps.apple.com

 

 

 

*Google Play 에서 다운로드

https://play.google.com/store/apps/details?id=com.intellione.farmersfirstdream&pcampaignid=web_share 

 

농부의 꿈 - Google Play 앱

평화로운 목장에서 신나는 동물 합치기 무료게임 (바람, 뚫어뻥, 밧줄, 무중력 등 매직 아이템 활용해 병아리를 젖소로 키워보세요.)

play.google.com

 


1. 조이스틱 다운로드 및 설정

조이스틱을 사용하려면 Unity Asset Store에서 Joystick Pack을 다운로드해야 합니다.

 

다운로드 방법:

  1. Unity 에디터에서 상단 메뉴에서 Window → Asset Store를 클릭하거나, Unity Asset Store에 접속합니다.
  2. 검색창에 **"Joystick Pack"**을 입력하고 Enter 키를 누릅니다.
  3. **"Joystick Pack" (Free)**를 선택한 후 Add to My Assets 버튼을 클릭합니다.
  4. Unity 에디터로 돌아와 Package Manager에서 My Assets 섹션으로 이동합니다.
  5. Joystick Pack을 찾아 Download 버튼을 클릭한 후, Import 버튼을 눌러 프로젝트에 추가합니다.

설치 후 확인:

Joystick Pack에는 Fixed, Floating, Variable, Dynamic Joystick 프리팹이 포함되어 있으며, 프로젝트의 Joystick Pack/Prefabs 폴더에서 확인할 수 있습니다.

 

2. 조이스틱 타입 소개

 

Unity에서 Joystick Pack에 포함된 주요 조이스틱 타입은 다음과 같습니다:

  • FixedJoystick: 화면의 고정된 위치에 항상 표시됩니다.
  • FloatingJoystick: 사용자가 터치한 지점에 따라 나타나며, 자유롭게 이동 가능합니다.
  • VariableJoystick: 크기나 범위를 사용자 정의할 수 있는 유연한 조이스틱입니다.
  • DynamicJoystick: 인터페이스에 따라 동적으로 나타나거나 사라지는 조이스틱입니다.

 

3. PlayerController 스크립트 개요

 

PlayerController 스크립트는 위의 조이스틱 타입을 모두 활용하여 플레이어를 움직이는 역할을 합니다. 주요 기능은 다음과 같습니다:

  • 조이스틱 입력 처리: 현재 선택된 조이스틱으로 입력 값을 받아 처리합니다.
  • 플레이어 이동: 입력 값을 기반으로 2D UI 요소(RectTransform)를 이동시킵니다.
  • 조이스틱 전환: 버튼 클릭으로 조이스틱 타입을 실시간으로 변경할 수 있습니다.

 

4. 전체 코드

아래는 다양한 조이스틱 타입을 지원하는 PlayerController의 전체 코드입니다.

 

using UnityEngine;
using UnityEngine.UI;

public class PlayerController : MonoBehaviour
{
    // 모든 조이스틱 타입 참조
    public FixedJoystick fixedJoystick;
    public FloatingJoystick floatingJoystick;
    public VariableJoystick variableJoystick;
    public DynamicJoystick dynamicJoystick;
    
    private Joystick currentJoystick; // 현재 사용 중인 조이스틱
    public float moveSpeed = 1000f;

    private RectTransform rectTransform;
    private Vector2 moveDirection;

    private void Start()
    {
        rectTransform = GetComponent<RectTransform>();
        // 기본적으로 Fixed 조이스틱으로 시작
        SwitchToFixed();
    }

    private void Update()
    {
        if (currentJoystick == null || rectTransform == null) return;

        HandleJoystickInput();
        MovePlayer();
    }

    private void HandleJoystickInput()
    {
        moveDirection = Vector2.zero;
        moveDirection.x = currentJoystick.Horizontal;
        moveDirection.y = currentJoystick.Vertical;
    }

    private void MovePlayer()
    {
        if (moveDirection != Vector2.zero)
        {
            Vector2 currentPos = rectTransform.anchoredPosition;
            Vector2 movement = moveDirection * moveSpeed * Time.deltaTime;
            Vector2 newPos = currentPos + movement;
            rectTransform.anchoredPosition = newPos;
        }
    }

    // 조이스틱 전환 메서드들
    public void SwitchToFixed()
    {
        DisableAllJoysticks();
        fixedJoystick.gameObject.SetActive(true);
        currentJoystick = fixedJoystick;
    }

    public void SwitchToFloating()
    {
        DisableAllJoysticks();
        floatingJoystick.gameObject.SetActive(true);
        currentJoystick = floatingJoystick;
    }

    public void SwitchToVariable()
    {
        DisableAllJoysticks();
        variableJoystick.gameObject.SetActive(true);
        currentJoystick = variableJoystick;
    }

    public void SwitchToDynamic()
    {
        DisableAllJoysticks();
        dynamicJoystick.gameObject.SetActive(true);
        currentJoystick = dynamicJoystick;
    }

    private void DisableAllJoysticks()
    {
        if (fixedJoystick) fixedJoystick.gameObject.SetActive(false);
        if (floatingJoystick) floatingJoystick.gameObject.SetActive(false);
        if (variableJoystick) variableJoystick.gameObject.SetActive(false);
        if (dynamicJoystick) dynamicJoystick.gameObject.SetActive(false);
    }
}

 

 

5. 설정 및 적용 방법

  1. UI 설정:
    • Canvas 내에 네 가지 조이스틱 프리팹을 각각 배치합니다.
    • Player GameObject에 RectTransform 컴포넌트를 추가합니다.
  2. 조이스틱 연결:
    • PlayerController 스크립트의 FixedJoystick, FloatingJoystick, VariableJoystick, DynamicJoystick 필드에 해당 프리팹을 드래그 앤 드롭으로 연결합니다.
  3. 조이스틱 전환 버튼:
    • UI 버튼을 생성하고, 버튼 클릭 시 SwitchToFixed(), SwitchToFloating() 등의 메서드를 호출하도록 이벤트를 설정합니다.

 

6. 조이스틱 시스템 확장

  • 애니메이션 추가:
    • 플레이어 이동 시 캐릭터의 애니메이션을 트리거하도록 확장할 수 있습니다.
  • 3D 지원:
    • 현재 코드 기반으로 3D 오브젝트 이동에도 적용할 수 있습니다. 단, Vector3를 활용해 Z축 이동을 추가해야 합니다.

 

마무리

 

오늘은 Unity에서 Joystick Pack을 활용해 다양한 조이스틱 타입을 구현하고, 이를 사용해 플레이어를 컨트롤하는 방법을 알아봤습니다.

 

이 시스템은 사용자 맞춤형 게임 컨트롤을 제공하며, 다양한 게임 스타일에 적용할 수 있습니다.

Asset Store에서 Joystick Pack을 무료로 다운로드하고, 여러분의 게임에 맞는 조이스틱 타입을 선택해 보다 직관적이고 재미있는 플레이 환경을 만들어 보세요!

 

지금까지 인텔리원스튜디오(IntelliOneStudio)였습니다.
감사합니다.

728x90