[Unity]/[Unity]

[Unity] Input Field의 이벤트(On Value Change, End Edit)

극꼼 2021. 9. 18. 22:44
반응형


안녕하세요, 극꼼입니다!

 

지난 포스팅에서 텍스트 값을 직접 입력하는 방법인 Input Field를 사용하는 방법을 알아보았는데요, 

https://geukggom.tistory.com/135

 

[Unity] 직접 텍스트 입력하는 방법(feat. Input Field UI)

안녕하세요, 극꼼입니다. 오늘은 플레이 중 직접 텍스트를 입력하는 방법에 대해 알아보겠습니다. 먼저 캔버스에 Input Field UI를 만들어줍니다. 아래와 같은 입력란이 생기는데요, 저는 이 입력란

geukggom.tistory.com

 

이번 포스팅에서는 Input Field에서 텍스트 내용을 바꿨을 경우 호출되는 이벤트인 On Value Change와, 사용자가 텍스트 내용 수정을 마친 후 호출되는 이벤트인 End Edit, Submit 사용 방법을 알아보겠습니다.

* Unity 매뉴얼 : https://docs.unity3d.com/kr/2018.4/Manual/script-InputField.html

 

입력 필드 - Unity 매뉴얼

입력 필드(Input Field) 를 통해 텍스트 컨트롤의 텍스트를 수정할 수 있습니다. 다른 상호작용하는 컨트롤과 비슷하게, 그 자체로는 시각적 UI 요소가 아니므로 한 개 이상의 시각적 UI 요소와 결합

docs.unity3d.com


1. On Value Change

On Value Change 키워드는 Input Field에서 텍스트의 내용을 바꿨을 경우 호출되는 이벤트입니다. 

On Value Change 키워드의 기본 사용 방법은 다음과 같습니다.

 

인스펙터 창에 직접 함수를 연결해주는 방법과, AddListener를 통해 코드로 연결해주는 방법.

 

1) 인스펙터 창에 원하는 스크립트를 가져와 함수를 지정해줍니다.

 

 

2) 코드로 함수를 연결해주는 방법은 이렇습니다. 아래와 같이 AddListener를 통해 텍스트의 내용을 바꾸는 순간 호출할 함수를 정해줍니다.(이 때는 string text 이외의 매개변수는 사용할 수 없습니다)

public InputField myInputField;
private void Start()
{
    myInputField.onValueChange.AddListener(ValueChanged);
}
void ValueChanged(string text) // string 매개변수는 기본으로 들어가는 매개변수이다
{
    Debug.Log(text + " - 글자 입력 중");
}

 

플레이하면 다음과 같습니다. 12라는 글자를 입력했다가 모두 지운 결과입니다.

처음 Input Field 영역을 눌렀을 때는 호출되지 않고(텍스트에 변화가 없기 때문에), 글자를 입력하거나 지울때마다 함수가 호출되는 것을 확인할 수 있습니다.

 

그런데, 이 코드는 인스펙터 창에서 함수를 직접 연결해주는 방법과 달리 다른 매개변수를 사용할 수 없습니다.(여러 InputField에서 이 함수를 호출했을 때, 어떤 InputField에서 사용한건지 알 수 없다는 의미이기도 함니다)

 

저같은 경우는, 여러 InputField에서 같은 함수를 재활용하되, 어떤 InputField에서 사용한건지 파악할 수 있게 하기 위해 다른 매개변수를 사용할 수 있어야 했습니다. 따라서 사용해준게 delegate 키워드입니다. 

public InputField myInputField;
private void Start()
{
    myInputField.onValueChange.AddListener(delegate { ValueChanged(myInputField); });
}
void ValueChanged(InputField thisInputField) //이때는 원하는 매개변수를 사용할 수 있다
{
    Debug.Log(thisInputField.name);
}

 

다음과 같이 어떤 InputField에서 호출한 함수인지 파악할 수 있습니다. 

 

2. End Edit

End Edit 는 사용자가 텍스트 내용 수정을 마친 후 입력 창을 벗어날 때 호출되는 이벤트입니다.

마찬가지로 Inspector창에서 호출할 함수를 정해주는 방법과, AddListener를 통해 함수를 코드로 연결해주는 방법이 있습니다.

 

1) Inspector창에서 지정

 

2) AddListener를 통해 코드를 연결해주는 방법

public InputField myInputField;
private void Start()
{
    myInputField.onEndEdit.AddListener(ValueChanged);
}
void ValueChanged(string text)
{
    Debug.Log(text + "를 입력함");
}

 

입력창에 23을 입력한 후, 다른 곳을 클릭해 입력 창을 벗어날 때 다음과 같은 메시지가 뜹니다.

 

1번과 같이 delegate 키워드를 사용할 수 있고, 사용 방법은 1에서 적은 것과 같으니 추가로 적지는 않겠습니다.


읽어주셔서 감사합니다!

도움이 되셨다면 공감 한번씩 눌러주시면 감사하겠습니다.

반응형