채팅 시스템이나 로그인 등 여러 입력필드에서 엔터를 눌러 전송을 할 때가 있습니다. 이런 자연스러운 인터페이스를 스크립트로 작성할 수 있습니다.
📺 미리 보기
💬 서론
- 본 글은 채팅 시스템을 구현할 때 작성한 스크립트를 기반으로 작성하였습니다.
⚒️ 구현
- 요약
· ChatManager.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using TMPro;
using Google.Protobuf.Protocol;
public class ChatManager : Singleton<ChatManager>
{
...
[Header("채팅 입력 필드")]
[SerializeField] private TMP_InputField mChatInputField;
...
private void Awake()
{
...
// InputField에 이벤트 리스너 등록
mChatInputField.onEndEdit.AddListener(INPUTFIELD_SendChat);
}
...
public void TrySendChat(string input)
{
if (IsDialogEnabled == false || IsChatReady == false || input.Length == 0)
return;
if (input.StartsWith('/'))
{
Debug.Log("명령인자 호출됨!");
return;
}
// 채팅 전송
{
C_RequestChat c_RequestChatPacket = new C_RequestChat()
{
PlayerId = NetworkManager.Instance.PlayerId,
ChatStr = input,
};
NetworkManager.Instance.Send(c_RequestChatPacket);
// 자신의 텍스트 라벨 갱신
mChatTextLabel.text += $"\n플레이어{c_RequestChatPacket.PlayerId}: {c_RequestChatPacket.ChatStr}";
}
Debug.Log($"전송됨: {input}");
// 기존 채팅 입력필드 초기화
mChatInputField.text = "";
// 입력필드에 포커스 주기
mChatInputField.ActivateInputField();
}
...
#region UI입력
...
public void INPUTFIELD_SendChat(string input)
{
if (Input.GetKeyDown(KeyCode.Return) || Input.GetKeyDown(KeyCode.KeypadEnter))
TrySendChat(input);
}
#endregion
}
[Header("채팅 입력 필드")]
[SerializeField] private TMP_InputField mChatInputField;
- 입력 필드를 가져옵니다.
- 해당 입력 필드에 이벤트를 등록합니다.
// InputField에 이벤트 리스너 등록
mChatInputField.onEndEdit.AddListener(INPUTFIELD_SendChat);
- Awake에서 호출되며 입력필드의 onEndEdit에 대한 이벤트가 추가됩니다.
- 이 글에서는 INPUTFIELD_SendChat이라는 함수가 호출되도록 연결하였습니다.
public void TrySendChat(string input)
- 채팅 기능으로, 엔터를 입력하면 처리할 함수입니다.
public void INPUTFIELD_SendChat(string input)
{
if (Input.GetKeyDown(KeyCode.Return) || Input.GetKeyDown(KeyCode.KeypadEnter))
TrySendChat(input);
}
- 이벤트가 호출될 때 이 함수가 호출됩니다.
- 엔터(Return) 또는 키패드의 엔터가 입력되면 TrySendChat 함수가 호출됩니다.
🕹️ Unity Affiliate
- Unity Affiliate Program 파트너로서 아래의 배너를 통해 접속하신 경우 수수료를 받을 수 있습니다.
- 아래 배너의 에셋들은 '실시간 무료 에셋 랭킹'을 나타냅니다.
'unity etc. > others' 카테고리의 다른 글
유니티 vscode intellisense 오류 (0) | 2023.08.03 |
---|---|
유니티 WebGL 빌드 서비스하기 (0) | 2023.07.05 |
[유니티] 입력필드(InputField) 포커스 할당하기 (0) | 2023.05.19 |
[유니티] 에디터 자동 저장 (0) | 2023.05.04 |
[유니티] An error occurred while resolving packages: Project has invalid dependencies: com.unity.render-pipelines.universal cannot be found (0) | 2023.04.20 |