*카드 뒤집기 게임 :제한 시간 내에 같은 그림이 그려진 짝을 전부 맞추면 성공
- 주제
>> 게임 내 기능 추가(게임오브젝트 색상 변경, 매칭실패시 남은 시간 2초 감소 등)
>> 오류 발생 및 해결(깃허브 한글 주석 부분이 외계어, 유니티 scene view에서 오디오 gizmo 생성)
>> C# 표기형식 개념
- 맡은 부분
1. 카드를 두 장 뒤집었는데 그림이 서로 다른경우, 이미 한 번씩 뒤집은 카드는 색을 다르게 표시하기 (옅은 회색 등)
2. 매칭 실패할 때 마다, 제한 시간 2초 감소하기
3. 첫번째 카드를 고르고 5초 간 카운트 다운, 안 고르면 다시 닫기
- 구현과정
1. 이미 뒤집은 카드 색상 변경
1-1. 카드의 색상을 변경시켜주는 함수(ChangeColor)를 Card.script에 만들기
카드 뒷부분(물음표 부분)의 spriterenderer을 변수(backColor)로 받아온다.
1-2. GameManager에서 쓸 수 있게 public으로 ChangeColor 함수를 만든다.
(유니티에서는 1부터 255사이의 색상을 0부터 1사이의 실수값으로 변환해서 색상을 넣기 때문에
RGB 각각의 값에 255를 나누어 주어야 한다)
1-3. GameManager에 Matched함수에서 매칭이 되지 않았을 경우,
첫번째 카드와 두번째 카드에 ChageColor함수를 적용한다.
2. 매칭 실패할 때 마다, 제한 시간 2초 감소
3. 첫번째 카드를 고르고 5초 간 카운트 다운, 안 고르면 다시 닫기
3-1. GameManager.cs에 카운트다운(CountDown) 함수 만들기
- 코루틴(Coroutine) : Update가 아닌 곳에서도 반복적으로 코드를 실행해야 할 때 사용.
작성방법:
1. 반환형 IEnumerator로 시작
ex) IEnumerator 함수이름()
2. yield retrun + 조건 (yield retrun가 반드시 함수 내부에 존재해야함.)
ex) yield return null;
- yield return null; --> 다음 프레임에 실행
매개변수로 입력한 숫자에 해당하는 초만큼 기다렸다가 실행
- yield return new WaitForSeconds(float); --> 유니티상 시간을 기준(TimeScale 영향 받음)
- yield return new WaitForSecondsRealtime(float) --> 현실 시간을 기준
실행방법:
1. StartCoroutine(함수())
2. StartCoroutine("함수")
중단방법:
1. StopCoroutine("함수")
2. yield break;
참고사이트: https://coding-of-today.tistory.com/171
3-2. 두번째 카드의 존재유무를 알려주는 SecondPick함수 만들고, update에서 반복 실행
3-3. 두 번째 카드를 선택하지 않을 때마다(secondCard ==null), CountDown 함수를 실행해줄 CountFlip함수 만들기
3-4. 카드매칭(성공이나 실패)이 이루어지면, 카운트다운 함수 중지
3-5. 첫번째 카드를 선택하면, CountFlip 함수실행
Card.cs
- 오류 발생 및 해결
오류1.
>>Github에서 받은 스크립트 파일의 한글 주석 부분이 외계어로 바뀜
해결1.
>>이미 생성된 스크립트들을 수작업으로 인코딩 교체.
>>이후 생성될 스크립트들을 위해 인코딩 UTF-8로 교체.
( Visual Studio -> 옵션 -> 텍스트 편집기 -> C# -> 코드 스타일 -> 설정에서 .editorconfig 파일 생성
-> Visual Studio에서 생성파일 열기 -> 마지막 줄에 다음 내용 추가)
[*]
charset = utf-8
참고사이트
오류2.
>>유니티 scene view에서 오디오 gizmo가 생성되어 게임오브젝트를 가림
해결2.
>>유니티 --> 상단 Edit --> Preferences --> Scene View --> Auto-hide gizmos 체크
- 알고가기
>> C# 표기 형식
변수를 string으로 바꿀 때,
변수.ToString();
F: 실수
F0 : 소수점 없이 표기 123
ex) 변수.ToString("F0");
F1 : 소수점 한자리 123.4
F2 : 소수점 두자리 123.45
N: 자릿수를 표기하는 실수
N0 : 소수점 없이 표시 + 천단위마다 , 표기 1,234
N1 : 소수점 한자리 + 천단위마다 , 표기 1,234.5
P: 백분률
P0 : %로 표기. 0.1f -> 10%
D: 0을 붙이는 정수
D0 : 123
D1 : 한자리 123
D5 : 다섯자리 00123
소수점이 없는 경우 생략
(소수점 1번째 자리가 0으로 떨어지면 표기하지않음)
$"{value:0.#}";
- 회고
>>색상을 변경하는 법은 강의를 통해 한 번 접해봤는데도 막상 적용하려고 하니 눈 앞이 막막했고,
기억속에서 답을 찾으려고 하니 시간이 더 걸렸다. 모르겠으면 바로 구글을 검색하는 습관을 가져야겠다.
'유니티' 카테고리의 다른 글
Day 6 - 게임 이펙트 코드 수정(위치 이동) (0) | 2024.04.20 |
---|---|
Day 5 - 부정 방지 기능(Invoke & null 활용) 및 발표 피드백 정리 (2) | 2024.04.19 |
Day 4 - 게임 이펙트 추가(SetActive 활용), float -> int (2) | 2024.04.18 |
Day 3 - 카드 색상 3단계로 변경(매개변수&리스트 활용) (0) | 2024.04.17 |
Day 1 - Git & VSC 연동 (0) | 2024.04.15 |