일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 백준 파이썬
- 입출력 관리자
- getline()함수
- auto 키워드
- 유형 변환
- 범위 기반 for문
- 프로그래머스 배열만들기4
- 괄호 검사 프로그램
- C언어 계산기 프로그램
- l-value참조자
- 논리 연산
- 원형 연결 구조 연결된 큐
- 주기억장치
- r-value참조자
- 문자형 배열
- LAN의 분류
- 운영체제 기능
- 네트워크 결합
- 프로그래머스 푸드 파이트 대회
- C언어 덱
- 문제해결 단계
- 회전 및 자리 이동 연산
- IPv4 주소체계
- const화
- 알고리즘 조건
- const l-value참조자
- 값/참조/주소에 의한 전달
- C언어 스택 연산
- c언어 괄호검사
- string유형
- Today
- Total
chyam
[unity] - 물리 퍼즐 게임 4 ( 수박 게임 ) 본문
점수를 추가하고, 경계선에 닿고 몇초가 지나면 빨갛게 변하고, 더 지나면 게임오버가 되도록 하였다.
public int score;
public bool isOver;
//-------------- 아래는 Dongle 스크립트
IEnumerator HideRoutine(Vector3 targetPos)
{
...
manager.score += (int)Mathf.Pow(2, level);
...
}
점수를 저장할 score과 게임오버인지 여부를 판단하는 isOver를 선언한다.
동글끼리 합쳐져서 하나사 숨겨질때, 점수를 얻도록한다.
게임메니저의 score에 2의 레벨승을 더해준다.
Mathf.Pow는 제곱을 나타낼때 쓴다.
경계선의 Tag를 Finish로 해준다. 닿으면 효과가 나올수있도록.
SpriteRenderer spriteRenderer;
private void Awake()
{
...
spriteRenderer=GetComponent<SpriteRenderer>();
}
private void OnTriggerStay2D(Collider2D collision)
{
if (collision.tag=="Finish")
{
deathTime += Time.deltaTime;
if (deathTime > 2)
{
spriteRenderer.color = new Color(0.9f,0.2f,0.2f);
}
if (deathTime > 5)
{
manager.GameOver();
}
}
}
충돌한 물체의 tag가 Finish일때부터 시간을 더해준다.
2이상일때는 빨간색으로 변하게 되고,
5이상일때는 GameOver가 실행된다.
public void GameOver()
{
if (isOver)
return;
isOver = true;
StartCoroutine("GameOverRoutine");
}
IEnumerator GameOverRoutine()
{
//1. 장면 안에 활성화 되어있는 모든 동글 가져오기
Dongle[] dongles = FindObjectsOfType<Dongle>();
//2. 지우기 전에 모든 동글의 물리효과 비활성화
for (int index = 0; index < dongles.Length; index++)
{
dongles[index].rigid.simulated = false;
}
//3. 1번의 목록을 하나씩 접근해서 지우기
for (int index = 0; index < dongles.Length; index++)
{
dongles[index].Hide(Vector3.up * 100);
yield return new WaitForSeconds(0.1f);
}
}
isOver가 true면 바로 리턴해주고, 아니면 true로 바꾼뒤 코루틴을 실행한다.
장면안에 활성화 되어있는 모든 동글을 dongles에 저장한다.
지우기 전에 모든 동글의 물리효과를 비활성화 하지않으면 하나씩없어질때 충격으로 다른 물체들이 합쳐질수있어서 해줘야한다.
원래 rigid는 private라서 public으로 바꿔준뒤 접근하였다.
dongles에 저장된것을 하나씩 접근하여 지워주었다.
Hide의 인수에는 게임 플레이중 나올수없는 큰 값을 전달하였다.
0.1초 뒤에 실행하게했다.
Sleeping Mode는 물리연산을 멈추고 쉬는 상태 모드인데,
start Awake는 변화가 있을때 사용해야한다. Never Sleep을 해주면 CPU가 많이 사용되긴하지만 지속적인 효과를 줄수있다.
void NextDongle()
{
if (isOver)
{
return;
}
...
}
게임오버가 되면 새로운 동글이 생성되면 안되므로, 바로 리턴시킨다.
private void OnTriggerExit2D(Collider2D collision)
{
if(collision.tag== "Finish")
{
deathTime = 0;
spriteRenderer.color = Color.white;
}
}
만약 경계선에 걸쳐서 빨갛게 됐다가 아래로 굴러떨어지게 되면 시간도 초기화시키고, 색도 다시 돌아오게 해준다.
public void Hide(Vector3 targetPos)
{
...
if(targetPos == Vector3.up * 100)
{
EffectPlay();
}
...
}
숨길때 이펙트를 추가하기 위해서 , 인수가 저 값이라면 이펙트를 실행시켜준다.
'unity' 카테고리의 다른 글
[unity] - 버튼 순서대로 누르면 성공하는 퍼즐 (0) | 2024.09.12 |
---|---|
[unity] - 시간 흐름 [ deltaTime ] (0) | 2024.09.09 |
[unity] - 물리 퍼즐 게임 3 ( 수박 게임 ) (0) | 2024.08.15 |
[unity] - 물리 퍼즐게임 만들기-2 ( 수박게임 ) (0) | 2024.08.13 |
[unity] - 물리 퍼즐게임 만들기 ( 수박게임 ) (0) | 2024.08.13 |