Scenes
립모션 연결 파트를 맡으면서 Scene을 많이 만들었다.
Start: 인천대학교~ Upload It!
Menu: 선택지가 있다. 원래 Gaze UI 바로 앞에 선택지가 있었는데, 이렇게 하니까 바로 Play 들어가지는 경우가 많아서 살짝 틀어놨다.
Loading & Loading2: PlayMode1과 2의 Loading Scene이다. 원래 Loading Scene을 따로 만들 생각이 없었다. Level Scene에서 선택한 버튼에 따라 이어지길 바랐다. 어떤 버튼이 눌렸는지 확인하기 위해서는 unity의 EventSystem을 써야 하는데, 마우스 클릭일 때는 되고 Gaze UI를 쓰면 에러가 떠서 결국 따로 만들었다. 이것이 참 아쉬운 점.
EventSystem.current.currentSelectedGameObject.name;
Level: 현재는 컨벤션 센터(PlayMode1)와 sh408(PlayMode2)를 선택할 수 있다. PlayMode1을 깨야 PlayMode2를 할 수 있도록 설계되어 있다.
Tutorial: 사용자가 게임에 필요한 액션 3가지(총쏘기, 수류탄 던지기, 장전)를 배울 수 있다.
Script
스크립트가 몇 개야.. 엄청 많네
LoadScene
ChangeCount: Tutorial 3개의 씬에서 다섯 번 같은 동작을 하면 다음 씬으로 넘어갈 때 쓴다. 여기서 숫자 하나를 세는 것이 정말 힘들었다.
void Update()
{
if (isPresentColorSameAsCurrentColor == false && checkHandAction.GetComponent<Renderer>().material.color == mainColor)
{
countDown.text = (count--).ToString();
isPresentColorSameAsCurrentColor = true;
StartCoroutine("timer");
}
else if(checkHandAction.GetComponent<Renderer>().material.color != mainColor)
isPresentColorSameAsCurrentColor = false;
else if (count < 1)
Invoke("LoadNextScene", 2.0f);
}
같은 동작인지 체크하는 것을 큐브(checkHandAction)의 색으로 했다. 원래는 동작에 대한 조건을 다 넣으려고 했는데, 그러기엔 조건이 너무 많아서 색으로 대체하였다.
isPresentColorSameAsCurrentColor 라는 변수는 이전과 현재의 큐브 색이 다를 때 카운트를 할 수 있게 도와주는 역할을 한다. 원래 이 변수가 없을 때는 여러 번 동작이 인식되어 매우 힘들었다. 1초에 60프레임 동작하는데, 처음 내 생각에는 한번 동작을 하면 1 프레임에서만 인식이 될 거라고 생각했으나, 실제로는 프레임을 거쳐 간 횟수만큼 다 동작이 인식되었다. 그래서 숫자가 한 번에 크게 깎였다. 이를 방지하기 위해 만들었다.
checkLeapmotion: 립모션이 연결되면 다음 씬으로 넘어가고 아니면 게임을 멈추는 역할을 한다.
if (FindObjectOfType<GameManager>().isLeapMotionConnected)
{
connect_2.text = "립모션이 연결되었습니다!";
LoadSceneAuto: 게임이 동작하면서 다음 씬으로 넘어가야 할 때 이 스크립트를 쓴다. GameManager처럼 지정하는 이름이 있던데 나는 그것도 모르고 그냥 정했다.