일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- XR
- optional prameter
- unity 아이콘 깨짐
- 유니티
- position parameter
- Unity3d
- memorymangement
- xml unity
- 다트기초
- Flutter
- flutter folder
- 폴더구성
- c#
- named parameter
- 메모리배리어
- unity icon
- Unity
- 유니티최적화
- OPCUA
- 네임드 파라미터
- 포지션 파라미터
- 플러터
- Unity 4k 아이콘 깨짐
- 플러터폴더
- MemoryBarrier
- Csharp
- 플러터프로젝트
- C# memorybarrior
- 싱글톤
- 4KUnity
- Today
- Total
배 타다 개발자
[유니티 ]키를 입력을 관리하는 InputManager 본문
키를 입력을 관리하는 InputManager
Update() 함수 안에서 플레이어마다 키를 반복하는 방식은 매우 안 좋은 방식.
공통된 기능은 이벤트로 받아서 처리하는 깔끔한 형식으로
입력을 관리하는 InputManager 스크립트를 작성해보자.
InputManagers Script
컴포넌트화 하지 않을 인풋매니저이기 때문에
MonoBehaviour를 상속받지 않고 전통적인 C#스크립트로 이용한다.
Monobehaviour를 상속받지 않았기 때문에 다른 누군가 불러주어야 사용할 수 있다.
델리게이트를 사용해서 키입력을 있으면 그 입력을
keyaction에 추가해주기 위한 변수를 선언한다.
장점은 명확하다.
keyAction을 컨트롤 하는 대상의 수가 많아지더라도
InputManager에서 한번에 체크가 가능하다.
만약 받은 입력이 없다면 종료, 입력값이 있다면 있다면
Invoke()를 통해서 이벤트가 발생했음을 구독하고 있는 대상들에게 전달한다.
이렇게 해서 1차적으로 InputManagers 의 스크립트를 완성한다.
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
// Use this class as traditional c# script not as component(Monobehaviour)
public class InputManager
{
// Delegate
public Action keyaction = null;
// InputMangers will detect inputs in OnUdate()
public void OnUpdate()
{
// 입력 받은 키가 아무것도 없다면 종료
if (Input.anyKey == false) return;
// 어떤 키가 들어왔다면, keyaction에서 이벤트가 발생했음을 전파.
if (keyaction != null)
{
keyaction.Invoke();
}
}
}
Managers Script
이제 싱글톤의 매니저인 Manager 클래스에 가서
인풋 매니저 인스턴스를 생성하고, 불러올 수 있게 한다.
이후 Manager의 Update()에서 직접 InputManager의 OnUpdate()를
실행시켜주면
결과적으로 화면에 마우스나 키보드의 입력을 체크하는 역할을 Manager에서 Onupdate를 실행시켜주는 구조가 된다.
PlayerController Scripts
이제 플레이어에 붙은 스크립트 컴포넌트를 작성해보자.
이때, Start() 함수에서
KeyAction을 구독해주고, KeyAction에서 Invoke() 메서드를 통해서 입력받고 있음이 감지가 되면 호출할 함수를 정의해준다.
예를 들면, 플레이어의 이동에 관한 함수이다.
'Graphics > Unity 3D' 카테고리의 다른 글
[Unity] Raycasting (0) | 2021.12.09 |
---|---|
유니티로 GIS 구현하기 (0) | 2021.11.29 |
[유니티] 프리팹을 씬에 효과적으로 로딩하는 방법 - Resource Manager (0) | 2021.10.27 |
[유니티3D] 홀로렌즈 없이 홀로렌즈 앱 만들기 - 프로젝트환경 세팅 (0) | 2021.10.18 |
[유니티] 실전 싱글톤 프로젝트 세팅 (0) | 2021.10.18 |