게임 스테이지마다 큐브로 만든 카드를 배열하여 맵을 만들어 보겠습니다
먼저 card0~card32까지 태그를 만듬니다
맵은 별도의 텍스트 파일로 만든 후 게임 시작 시 그것을 불러와서 처리하도록 할 수 있지만, 절차가 복잡하므로 맵을 2차원 가변 배열로 만듭니다. C#의 2차원 가변 배열은 다음과 같은 형식으로 만듭니다
static public string [][] stage = new string[][]
{
new string[] {"문자열, "문자열", }, //스테이지 1
new string [] {"문자열, "문자열", }, //스테이지 2
new string [] {"문자열, "문자열", }, //스테이지 3
}; //배열의 끝
StageSet 스크립트를 생성하고 작성합니다
StageSet 스크립트 작성
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class StageSet : MonoBehaviour
{
//스테이지 2차원 배열을 만든다
static public string[][] stage = new string[][]
{
new string[]
{
" .*..*. ",
" .****. ",
" ****** ",
" .****. ",
" .*..*. "
},
new string[]
{
" .*...*. ",
" >**..**. ",
" ***.*** ",
" >**..** ",
" .*...*. "
},
new string[]
{
" **....** ",
" **.**.** ",
" ^ ..*..*.. ",
" ^ **.**.** ",
" **....** "
},
new string[]
{
" ...**... ",
" ^ ..*..*.. ",
" ^ .*.**.*. ",
" ^ ..*..*.. ",
" ^ **.**.** ",
" ^ ..*..*.. ",
" ^ .*.**.*. ",
" ^ ..*..*.. ",
" ...**... ",
},
new string[]
{
" .*.>*.>* ",
" **.**.** ",
" ^ ..*..*.. ",
" ^ **.**.** ",
" ^ ..*..*.. ",
" ^ .*.**.*. ",
" .*.>*.>* ",
},
new string[]
{
" .**...**. ",
" > ***..***. ",
" ****.**** ",
" > ***..***. ",
" .**...**. "
},
};
}
하이 라키 뷰에 GameManager 오브젝트를 만들고 GameManager 스크립트를 생성하여 오브젝트에 붙입니다
GameManager 스크립트 작성
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class GameManager : MonoBehaviour
{
//클릭한 카드 번호
static public int cardNum;
//직전의 카드 번호
int lastNum = 0;
//스테이지의 전체 카드수
int cardCnt;
//카드 클릭 횟수
int hitCnt = 0;
//스테이지 번호
static public int stageNum = 1;
//스테이지 수
int stageCnt = 6;
//카드 배열 카드 섞기용
int[] arCards = new int[50];
//게임 시작 시간
float startTime;
// 스테이지 경과 시간
float stageTime;
// Start is called before the first frame update
void Start()
{
//시간초기화
startTime = stageTime = Time.time;
//스테이지 만들기
StartCoroutine(MakeStage());
}
void Update()
{
}
IEnumerator MakeStage()
{
//시작카드의 x좌표
float sx = 0;
//시작카드의 z좌표
float sz = 0;
SetCardPos(out sx, out sz);
//시작카드의 번호
int n = 1;
//카드배열 읽기 배열의 1행을 읽고 변수 t에 할당한다
string[] str = StageSet.stage[stageNum - 1];
//배열의 행의 수만큼 반복
foreach (string t in str)
{
// 각행의 문자열을 단일 문자 배열로 변환(문자열 좌우의 공백 제거) , 변수t의 자우 공백을 제거(Trim)하고 단일 문자배열로 변환
char[] ch = t.Trim().ToCharArray();
//카드의 x축 좌표
float x = sx;
//1행의 문자열 길이만큼 반복
//배열의 ch의 한문자를 읽고 변수 c에 할당한다
foreach (char c in ch)
{
switch (c)
{
//맵의 내용이 * 이면 그위치에 카드 만들어서 배치
case '*':
//카드 만들기
GameObject card = Instantiate(Resources.Load("Prefab/Card")) as GameObject;
//카드 좌표설정
card.transform.position = new Vector3(x, 0, sz);
//태그 달기
card.tag = "card" + n++;
// card.tag = "card" + arCards[n++];
x++;
break;
//빈칸 처리
case '.':
x++;
break;
//반 칸 공백처리
case '>':
x += 0.5f;
break;
//반 줄 행간 처리
case '^':
sz += 0.5f;
break;
}
//카드를 표시한 후에는 지연 시간을 두어 카드가 배치되는 과정이 보이도록함
if (c == '*')
{
yield return new WaitForSeconds(0.03f);
}
}
//한줄 아래로 이동
sz--;
}
}
//카드의 시작 위치 계산
void SetCardPos(out float sx, out float sz)
{
//가로 카드수 반 칸 공백 포함
float x = 0;
//세로 행수 반줄 행간 포함
float z = 0;
//가로 카드 최대수
float maxX = 0;
//스테이지 전체 카드수
cardCnt = 0;
//카드 배열 조사 맵 배열 을 읽음
string[] str = StageSet.stage[stageNum - 1];
//행의 수만큼 반복
for (int i = 0; i < str.Length; i++)
{
//1행읽기
string t = str[i].Trim();
//각행의 카드수
x = 0;
//각행의 글자 수만큼 반복
for (int j = 0; j < t.Length; j++)
{
//문자열(string)은 단일 문자(char)의 배열로 취급할수 있음
switch (t[j])
{
case '.':
case '*':
//카드배치에 필요한 공간
x++;
if (t[j] == '*')
{
//전체 카드수
cardCnt++;
}
break;
case '>':
x += 0.5f;
break;
case '^':
z -= 0.5f;
break;
}
}
//각 행의 최대 카드수 계산
if (x > maxX)
{
maxX = x;
}
//전체 행의 수
z++;
}
//카드 가로 시작 위치
sx = -maxX / 2;
sz = (z - 1) / 2;
// StartCoroutine(CardOpen(cardCnt));
}
}
하이 라키 뷰에 MaskCamera를 잠시 꺼두고 아래 그림과 같이 Transform 값을 바꿉니다
Background1 Transform값을 바꿉니다
Background2 Transform값을 바꿉니다
Main Camera Transform 값을 바꿉니다
게임을 실행시키면 아래와 같이 게임 화면에 카드가 배열되는 모습을 볼 수 있습니다
오른쪽 약간의 공백은 텍스쳐가 들어갈 공간을 남겨두어서 약간 왼쪽으로 치우친 모습입니다
'게임 만들기 강좌 > 유니티 기억력 테스트 게임 만들기' 카테고리의 다른 글
유니티 게임 만들기 기억테스트 게임 만들기 6_(최종) 게임 타이틀 만들기, 게임 타임 시간 만들기, 스테이지 넘기기 등 (1) | 2020.01.28 |
---|---|
유니티 게임 만들기 기억테스트 게임 만들기 5 _게임의 상태 표시 및 스테이지 를 판정하는 AI 기능 추가 하기 및 두뇌 게임 만들기 (0) | 2020.01.26 |
유니티 게임 만들기 기억테스트 게임 만들기 4 카드 touch 처리 및 카드 섞기 (0) | 2020.01.23 |
유니티 게임 만들기 기억테스트 게임 만들기 2 큐브 만들고 애니메이션 주기 (0) | 2020.01.21 |
유니티 게임 만들기 기억테스트 게임 만들기 1 자연스럽게 이미지 오버랩 만들기 (0) | 2020.01.08 |