필수 구현사항
1.캐릭터 만들기
2.캐릭터 이동
3.방 만들기
4.카메라따라가기
선택 구현사항
1.애니메이션 추가
2.이름 입력시스템
3.캐릭터 선택 시스템
4.참석 인원 UI
5.인게임 캐릭터 선택
6.인게임 이름 바꾸기
7.시간 표시
8.NPC 대화
1.캐릭터 애니메이션 추가
2.시간 표시
public class TimeDisplay : MonoBehaviour
{
public Text timeText;
private void Start()
{
UpdateTimeDisplay();
}
private void Update()
{
UpdateTimeDisplay();
}
private void UpdateTimeDisplay()
{
DateTime currentTime = DateTime.Now;
string timeString = currentTime.ToString("HH:mm");
timeText.text = timeString;
}
}
3.이름 입력 시스템
이름을 받는 것은 과거의 콘솔게임을 만들때 해봤지만, 유니티에서는 처음해보는 경험이라서 많이 헤맸다. 콘솔은 c#으로 코드만 짜면 바로 디버깅을 이용해 결과창을 확인할 수 있지만 유니티에서는 스크립트를 짜고, 그 스크립트를 넣어줄 오브젝트들을 만들어야 해서 비슷하지만 다른 부분이 있었다. 이 차이점이 본인이 이 기능을 구현하는데 시간이 오래걸린 이유중 하나인 것 같다.
또 다른 이유는 Text Mesh Pro 였다. 물론 강의를 들으며 사용해봤지만, 지금껏 UI->Legacy->Text만 사용해왔어서 Text Mesh에 대한 이해도 자체가 전반적으로 낮았다. 결국에는 원래 하던데로 Text를 이용해서 구현했다.
public class NameScript : MonoBehaviour
{
public InputField inputName;
public Text errorMessage;
public void Save()
{
string playerName = inputName.text;
if(playerName.Length >= 2 && playerName.Length <= 10)
{
PlayerPrefs.SetString("Name", inputName.text);
SceneManager.LoadScene("GameScene");
}
else
{
errorMessage.text = "이름은 2~10 글자여야 합니다.";
}
}
}
public class NameTag : MonoBehaviour
{
public Text nameText;
private Transform target;
private void Start()
{
string playerName = PlayerPrefs.GetString("Name");
nameText.text = playerName;
}
}
4.참석 인원 UI
public class AttendanceListUI : MonoBehaviour
{
public GameObject attendancePanel;
public Text attendanceText;
public Button refreshButton; // 목록을 새로고침할 버튼
public Button closeButton; // UI를 닫을 버튼
private List<string> attendeeNames = new List<string>();
private bool isUIVisible = false;
private void Start()
{
// UI 초기 상태 설정
attendancePanel.SetActive(false);
attendanceText.gameObject.SetActive(false);
// 버튼 클릭 이벤트에 대한 리스너 추가
refreshButton.onClick.AddListener(RefreshAttendanceList);
closeButton.onClick.AddListener(ToggleUIVisibility);
string playerName = PlayerPrefs.GetString("Name");
if (!string.IsNullOrEmpty(playerName))
{
attendeeNames.Add(playerName);
}
RefreshAttendanceList();
}
private void Update()
{
}
private void ToggleUIVisibility()
{
isUIVisible = !isUIVisible;
attendancePanel.SetActive(isUIVisible);
attendanceText.gameObject.SetActive(isUIVisible);
}
private void RefreshAttendanceList()
{![](https://velog.velcdn.com/images/cjb0325/post/c43c51d8-318e-4b5b-8c82-86af9fe39040/image.jpg)
![](https://velog.velcdn.com/images/cjb0325/post/f0c1cd5f-1251-400c-a158-559548c0409d/image.png)
string attendanceList = string.Join("\n", attendeeNames);
attendanceText.text = attendanceList;
attendanceText.gameObject.SetActive(true);
}
}
필수구현 목록을 모두 구현을 마치고, 하루종일 선택 구현사항들을 구현하는데 시간을 보냈다. 필수 구현 목록은 확실히 시간을 많이 투자하지 않더라도 금방 생각해볼 수 있는 것들이 많았지만, 선택 목록들은 녹록치 않았다. 이번 개인 과제는 주어진 시간이 짧아서 더 많은 공부를 하기는 어려웠지만, 조금이나마 강의에서 들었던 것들을 복습하고 새로운 기능을 하나쯤은 사용해봤기 때문에 만족스럽다.