유니티
[Unity] New Input System 키 입력을 스크립트에 전달하여 처리하기
1. 로직을 제어할 스크립트(script) 부착하기 Player 게임 오브젝트에 키 입력값을 전달받고, 해당 로직을 제어할 스크립트를 만들어서 붙여줬다. 입력이 들어왔을 때, 해당 내용을 전달해주는 방법을 설정할 수 있는 'Behavior' Send Messages, Broadcast Messages : 유니티의 Send Message 기능을 사용하여 특정 함수를 호출하는 방식 Invoke Unity Events, Invoke C Sharp Events : 유니티나 C#의 이벤트 기능을 사용하는 방식 위 방식들을 스크립트에서 사용하기 위해서는 다음과 같은 네임스페이스 적용이 필요 using UnityEngine.InputSystem; Send Messages 기능을 사용할 경우 특정 키가 들어오면, 특정..
[Unity] New Input System 세팅하기
게임은 특정 플랫폼 하나만을 겨냥하고 개발하는 경우는 거의 없다. 스케일이 커지게 되면 PC 말고도 모바일, 콘솔 등의 플랫폼도 지원을 해야 할텐데, 그 중에서도, 기존 Unity Input System은 게임 플랫폼 환경 서비스를 추가할 때 골머리를 앓게하는 요소라고 한다. PC에서는 키보드와 마우스, 모바일은 화면 터치, 콘솔에서는 조이스틱을 이용하는 등 플랫폼마다 사용하는 입력 방식이 다르기 때문이다. 즉, 다음과 같이 코드를 짜게 되면 플랫폼 추가 확장할 때 게임 Input System을 수정해야 하는 번거로움이 생긴다. if(Input.GetKey(KeyCode.UpArrow)) // PC에서 다른 플랫폼으로 변경할 때, 번거로움이 생긴다. { ... } 그래서 Unity에서는 2019버전부터 ..
[Unity] Input Action을 사용해야 하는 이유
1. 플랫폼 간 제어를 쉽게 만든다. - 키보드, Xbox 컨트롤러, PlayStation 게임패드 등을 통해 동일한 작업을 수행하도록 개발하는 것이 더 수월 - 모든 장치를 일관되고 동기화된 상태로 유지 2. 편집기를 통해 Action Maps, Actions 등을 쉽게 편집할 수 있다. - 또한 현재 사용되는 입력들에 대해 한 눈에 파악할 수 있다. 3. 이벤트로 작동되기 때문에 Update()에서 계속 확인하지 않아도 되어 이산 입력에 최적화된다. - 단 스틱과 같은 연속 입력에는 폴링과 정기적인 업데이트가 여전히 필요 4. 런타임 중에 현재 활성화된 입력을 빠르게 확인할 수 있는 입력 디버거가 내장되어 있다. - 추가 샘플을 설치하면 플레이 하는 동안 화면에 게임패드/기본입력을 직접 시각화 가능 ..
[Unity] Input Manager (키보드 입력, 마우스 클릭, 조이스틱 등)
Edit-Project Settings - Input Manager카테고리내에서 확인 가능. Key: 실제 키보드 상의 키, 예) W, Shift, space bar 등 Buttons: 물리적 콘트롤러의 버튼, 예) Xbox One 컨트롤러의 X 버튼 등 Virtual Axis: 매핑되어 있는 버튼이나 키. Axis는 -1~1의 값을 받는다. (중립값은 0). Mouse delta (한 frame내 마우스를 움직인 정도)는 마우스의 움직임 정도에 따라-1보다 작을 수 있으며 1보다 클 수 있다. Input Manager에서 각 Axis의 설정값 설명 구분 설명 Name Axis 이름. 이 이름을 사용해서 Script에서 접근 가능 Negative/Positive Button 키보드의 키, 마우스/조이스틱..
[Unity] 애니메이션 내 추가 버튼이 비활성화인 이유
Add Property가 비활성화 되있는데 이는 대상 오브젝트를 선택 안했기 때문이다. 클릭하면 활성화 되는 모습
[Unity] 타일맵에 콜라이더(충돌체) 추가하기
플랫폼 게임을 만드는데 노란 공이 떨어져서 바닥에 닿으면 튕기게 만들고 싶다고 가정해보자. 노란 공에 물리효과를 주기 위해서 Circle Collider 2D 컴포넌트와 Rigidbody 2D 컴포넌트를 부착해주었다. 그리고 꽤 그럴듯하게 공처럼 튀기게 만들기 위해서 물리 머티리얼(Physics Material)까지 넣어주었다. 하지만 타일맵에 물리적인 컴포넌트가 아무것도 없는 상태이기 때문에 플레이를 시작하면 떨어지는 공은 타일맵을 그냥 통과해버린다. 타일맵 콜라이더 2D 컴포넌트(Tilemap Collider 2D Component) 이전 섹션을 진행해왔다면 하이어라키 뷰에 존재하는 타일맵은 게임 오브젝트하나로 존재하기 때문에 어떻게 콜라이더를 배치해야할지 난감할 수도 있다. 타일맵을 위한 콜라이더를..
[Unity] (Rule Tile)룰 타일로 타일맵 자동 연결하기
타일의 자동 연결은 어떻게? 같은 타일을 놓으면 오른쪽 십자가처럼 자동으로 연결되기를 바랄 수 있다. 하지만 유니티 타일맵 기본 기능 만으로는 같은 타일을 옆에 놓아봤자 왼쪽 십자가처럼 끊어진 십자가만 놓아지고 오른쪽 십자가처럼 만들려면 직접 일일이 배치를 해야한다. 유니티 2D 엑스트라(Unity 2D Extra) 타일을 자동으로 연결해주는 기능은 기본 타일맵에서는 제공하지 않고, 유니티 테크놀러지에서 만들어서 깃허브에 올려둔 별도의 기능인 2D 엑스트라를 임포트해서 사용해야 한다(링크에서 2D Extra를 다운로드 받으면 된다). 그리고 다운로드 받은 파일의 압축을 풀고 2d-extra-master 폴더를 프로젝트 뷰의 Assets 폴더 안에 넣어주면 된다. 룰 타일(Rule Tile) 유니티에서 같..
[Unity] 이벤트 함수는 어떻게 실행되는 것일까?
유니티엔진에서 ‘스크립트’를 작성한다고 하면, 보통 MonoBahaviour를 상속받는 클래스의 스크립트를 작성하는 것을 떠올릴 것이다. 그리고 자연스럽게 이 클래스 내에 Awake(), Start(), Update() 등의 메소드를 작성하게 된다. 심지어 비주얼 스튜디오 같은 개발 환경에서는 이런 메소드들에 대해 자동 완성도 해주고, 메소드 위에는 Unity 메시지라는 글자도 띄워준다. 이런 메소드들은 ‘Unity Event Function’, ‘Unity Message’ 또는 ‘Magic Method’라고 불린다. 그런데 생각해보면 이 메소드들은 MonoBehaviour 또는 그 부모 클래스로부터 상속받은 메소드도 아닌데, 어떻게 유니티가 알아서 찾아 적절한 타이밍에 호출해줄 수 있는 걸까? Send..
[Unity] 트랜스폼(Transform) 이동(Move)
유니티 좌표계 프로그램마다 사용하는 좌표계가 다르다. 따라서 좌표계에 대해서 이해하는 것은 매우 중요하다. 유니티에서는 위치를 표현할 때 왼손 좌표계를 이용한다. X축은 빨간색, Y축은 초록색, Z축은 파란색(RGB순서)으로 표현. Transform.position Transform.position은 게임오브젝트의 절대좌표를 나타낸다. Transform.position에 Vector3를 대입하면 해당 위치로 이동. transform.position = new Vector3(x, y, z); Transform.localPosition Transform.localPosition은 게임오브젝트의 상대좌표를 나타낸다. 게임오브젝트의 부모가 있을 경우 부모로부터 떨어진 좌표를 나타낸다. 부모가 없을 경우에는 Tr..
[Unity] 오브젝트의 활성화 상태 확인
첫 번째의 경우 Pcube와 Cube가 모두 활성화 두 번째의 경우 Pcube는 활성화 Cube는 비활성화 세 번째의 경우 Pcube는 비활성화 Cube는 활성화 activeSelf - 스크립트를 적용한 오브젝트의 상태 activeInHierarchy - 스크립트를 적용한 오브젝트의 부모 오브젝트에 영향을 받음 //SetActive - 오브젝트 상태를 변경(bool) 오직 스크립트를 적용한 오브젝트의 상태를 확인할 경우엔 activeSelf 부모 오브젝트의 경우를 대비하여 오브젝트의 상태를 확인할 경우엔 activeInHierarchy 출처 : https://young-94.tistory.com/2