새로운 유니티 인풋시스템 활용하는방법
window -> Package Manager -> 위쪽 선택바에Unity Registry 선택 -> Input System 임포트
-> 경고창(재시작해야한다의 내용) 확인하고 유니티 재시작 -> 플레이어 오브젝트에 Player Input 컴포넌트 추가
-> 컴포넌트의 Create Actions 클릭 -> 대충 프로젝트 하위폴더에 이름붙이고 저장 (예시는 이름을 Player) ->
Input Actions라는 새로운 창 확인

-> Actions창에서 Move선택 ->
Action Type: Value : 직접 값을 받겠다
Control Type : 값의 형식을 결정 (Vector2 로 설정)
Interactions : ex ) Press(찰나순간. OnButtonDown과 비슷) (일단 지금은 설정 x)
Processors : 인풋의 값을 후보정하는 설정 (Normalize Vector2설정. 이로인해 normarlized()를 굳이 구현하지 않아도 됨)
+ 매번 저장하기 귀찮으니 AutoSave설정

다 설정하면

Actions에 잘 적용된것을 확인할 수 있다
이전장에서 Update에 구현한 GetAxisRaw를 삭제하고,
Behavior 에 나와있는 OnMove메소드를 활용한다 참고로 OnMove()는 자동완성되지 않는다
이를 위해선
1. using UnityEngine.InputSystem; 추가
2. GetAxisRaw삭제
3. OnMove()는 1번과정으로 사용가능한 InputValue형식 값으로 매개변수를 받는다
4. 아까 Actions창에서 Normarlized Vector2를 추가해줬으니 기존의 normarlize는 삭제한다
5. OnMove()메소드 구현부에 inputVec = value.Get<Vector2>();를 작성한다
*Get<T>: 프로필에서 설정한 컨트롤 타입 T값을(프로필에서 Vector2값으로 설정해주었다) 가져오는 함수
이전코드 : https://zizh.tistory.com/80
using System.Collections;
using System.Collections.Generic;
using UnityEditor;
using UnityEngine;
using UnityEngine.InputSystem;
public class Player : MonoBehaviour
{
public Vector2 inputVec;
public Rigidbody2D rigid;
public float speed;
private void Awake()
{
rigid = GetComponent<Rigidbody2D>();
}
private void FixedUpdate()
{
Vector2 nextVec = inputVec * speed * Time.fixedDeltaTime; //다음 나아갈 방향의 크기
//normarlize삭제
rigid.MovePosition(rigid.position + nextVec); //+ inputVec 대신 정규화 등의 연산을 거친 nextVec사용
}
void OnMove(InputValue value)
{
inputVec = value.Get<Vector2>();
//Get<T>:프로필에서 설정한 컨트롤 타입 T값을(프로필에서 Vector2값으로 설정해주었다) 가져오는 함수
//여기에선 노말라이즈를 이미 사용하고 있기 떄문에 빼도됨
}
speed설정해주고 테스트해보면 normarlized도 잘 적용되는 것 확인가능
새로운 유니티 인풋시스템 활용하는방법
window -> Package Manager -> 위쪽 선택바에Unity Registry 선택 -> Input System 임포트
-> 경고창(재시작해야한다의 내용) 확인하고 유니티 재시작 -> 플레이어 오브젝트에 Player Input 컴포넌트 추가
-> 컴포넌트의 Create Actions 클릭 -> 대충 프로젝트 하위폴더에 이름붙이고 저장 (예시는 이름을 Player) ->
Input Actions라는 새로운 창 확인

-> Actions창에서 Move선택 ->
Action Type: Value : 직접 값을 받겠다
Control Type : 값의 형식을 결정 (Vector2 로 설정)
Interactions : ex ) Press(찰나순간. OnButtonDown과 비슷) (일단 지금은 설정 x)
Processors : 인풋의 값을 후보정하는 설정 (Normalize Vector2설정. 이로인해 normarlized()를 굳이 구현하지 않아도 됨)
+ 매번 저장하기 귀찮으니 AutoSave설정

다 설정하면

Actions에 잘 적용된것을 확인할 수 있다
이전장에서 Update에 구현한 GetAxisRaw를 삭제하고,
Behavior 에 나와있는 OnMove메소드를 활용한다 참고로 OnMove()는 자동완성되지 않는다
이를 위해선
1. using UnityEngine.InputSystem; 추가
2. GetAxisRaw삭제
3. OnMove()는 1번과정으로 사용가능한 InputValue형식 값으로 매개변수를 받는다
4. 아까 Actions창에서 Normarlized Vector2를 추가해줬으니 기존의 normarlize는 삭제한다
5. OnMove()메소드 구현부에 inputVec = value.Get<Vector2>();를 작성한다
*Get<T>: 프로필에서 설정한 컨트롤 타입 T값을(프로필에서 Vector2값으로 설정해주었다) 가져오는 함수
이전코드 : https://zizh.tistory.com/80
using System.Collections;
using System.Collections.Generic;
using UnityEditor;
using UnityEngine;
using UnityEngine.InputSystem;
public class Player : MonoBehaviour
{
public Vector2 inputVec;
public Rigidbody2D rigid;
public float speed;
private void Awake()
{
rigid = GetComponent<Rigidbody2D>();
}
private void FixedUpdate()
{
Vector2 nextVec = inputVec * speed * Time.fixedDeltaTime; //다음 나아갈 방향의 크기
//normarlize삭제
rigid.MovePosition(rigid.position + nextVec); //+ inputVec 대신 정규화 등의 연산을 거친 nextVec사용
}
void OnMove(InputValue value)
{
inputVec = value.Get<Vector2>();
//Get<T>:프로필에서 설정한 컨트롤 타입 T값을(프로필에서 Vector2값으로 설정해주었다) 가져오는 함수
//여기에선 노말라이즈를 이미 사용하고 있기 떄문에 빼도됨
}
speed설정해주고 테스트해보면 normarlized도 잘 적용되는 것 확인가능