와챠의 우당탕탕 코딩 일기장
[Unity] 게임 규칙 만들기 본문
<규칙들>
1, 캐릭터 떨어지면 시작 위치로 되돌려 놓기
2, 목표 지점 만들기
3, 타이머 기능 만들기
4, 게임 종료 후 보일 화면 만들기
1, 캐릭터 떨어지면 시작 위치로 되돌려 놓기
1-1, 큐브 오브젝트 하나 추가하고 이름 OutArea로 변경
1-2, 위치, 크기 설정
1-3, 투명하게 만들어주기
-Mesh Render의 빨간 동그라미 부분 클릭
-Remove Component 클릭
1-4, 충돌 판정 위해 is Trigger 체크하기
1-5, C# 충동 처리를 위한 스크립트 생성하기 (이름 : Out)
1-6, 스크립트 작성
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
// 씬 관리 클래스(씬 생성, 씬 로드, 씬 합치기, 여러 씬 중 현재 active 되어있는 씬이 무엇인지 설정)
using UnityEngine.SceneManagement;
// Player가 떨어질 때 시작 위치로 돌려놓기
public class Out : MonoBehaviour
{
// OutArea에 물체 닿았을 때 자동 호출
void OnTriggerEnter(Collider col)
{
// 충돌된 물체가 Player면
if (col.gameObject.tag == "Player")
{
// 현재 씬 다시 로드하기(처음부터 다시 시작하기)
SceneManager.LoadScene(SceneManager.GetActiveScene().name);
}
}
}
1-7, 스크립트 적용
(+) 새로 시작 시 조명 어두워지는 현상 해결하기
-Window > Rendering > lighting 클릭
-Generate Lighting 클릭
!!하이어라키 창 정리하기!!
1, +클릭하고 Create Empty 클릭
2, 이름 Stage로 변경
3, Stage 관련 오브젝트 넣어주기
4, 다른 오브젝트도 같은 방법으로 정리해주기
2, 목표 지점 만들기
2-1, 목표 지점 영역 만들기
-Cube 생성 후 이름 설정(GoalArea)
2-2, 적절히 위치 지정
2-3, 투명하게 하기
-Mesh Render의 빨간 동그라미 부분 클릭
-Remove Component 클릭
2-4, 충돌 체크 위해 is Trigger 체크해주기
2-5. 충돌 처리 위해 C# 스크립트 생성(이름 : Goal)
2-6, 스크립트 작성
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
// 플레이어가 목표 지점 도착할 때 처리
public class Goal : MonoBehaviour
{
public static bool goal;
void Start()
{
goal = false;
}
void OnTriggerEnter(Collider col)
{
// 플레이어와 충돌이 일어났다면(플레이어가 목표 지점에 도착했다면)
if (col.gameObject.tag == "Player")
{
goal = true;
}
}
}
2-7, GoalArea에 Goal 스크립트 붙이기
3, 타이머 기능 만들기
3-1, 시간 보여주는 텍스트 추가
-UI > Text 클릭
3-2, 위치, 글씨 크기, 글씨 색상 지정
3-3, 타이머 기능 구현 위해 C# 스크립트 생성(이름 : Timer)
3-4, 스크립트 작성
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
// 타이머
public class Timer : MonoBehaviour
{
public static float time;
// 시작 시 시간은 0
void Start()
{
time = 0;
}
// 프레임 변경 때마다 시간 차 더해주기
void Update()
{
// 게임이 종료되지 않을 때만 시간 업데이트
if (Goal.goal == false)
{
time += Time.deltaTime;
}
// 시간 정수형으로 해주기(반내림)
int t = Mathf.FloorToInt(time);
// TimerText 컴포넌트 가져와서 설정해주기
Text uiText = GetComponent<Text>();
uiText.text = "Time : " + t;
}
}
3-5, TimerText에 Timer 스크립트 붙이기
4, 게임 종료 후 보일 화면 만들기
4-1, Text 추가하기(이름 : ResultText)
4-2, Text 내용, 글씨 크기, 글씨 색상, 위치 등 지정
4-3, 게임 종료를 위한 텍스트 생성(이름 : ResultTimerText)
4-4, 텍스트 이름, 크기, 색상, 위치 등 설정
4-5, 최고 기록 출력을 위한 텍스트 추가(이름 : BaseTimerText)
4-6, 텍스트 이름, 크기, 색상, 위치 등 설정
4-7, 게임 다시 시작하기 위한 버튼 추가(이름 : RetryButton)
4-8, 텍스트, 위치, 색상 등 설정...
4-9, Canvers 안에 Create Empty 클릭 후 게임 종료 후에"만" 보일 오브젝트 넣어주기
4-10, Result 앞의 체크버튼을 해제하여 UI들 숨기기
4-11, 게임 종료 후 결과 화면을 보이기 위한 스크립트 생성
4-12, 스크립트 작성
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
// 게임 종료 후 UI들 보이게 하기
// 지금까지의 결과 출력
public class GameResult : MonoBehaviour
{
public GameObject resultUI;
public Text resultTime; // 게임 종료에 걸린 시간 텍스트
public Text baseTime; // 최고 기록 텍스트
private int highScore; // 최고 기록 변수
// 게임 시작 시 최고 기록 초기화
void Start()
{
// 저장된 최고 기록이 있다면
if (PlayerPrefs.HasKey("HighScore"))
{
// 최고 기록을 저장된 값으로 초기화
highScore = PlayerPrefs.GetInt("HighScore");
}
// 없으면 999로 하기
else
{
highScore = 999;
}
}
// 게임이 종료됐는지 매 프레임마다 확인
void Update()
{
// 게임이 종료됐으면
if (Goal.goal == true)
{
// Result 안의 UI들 보이게 하기
resultUI.SetActive(true);
// 경과 시간 보이기
// 정수로 변경
int result = Mathf.FloorToInt(Timer.time);
resultTime.text = "Result Time : " + result;
// 최고 기록 보이기
baseTime.text = "Base Time : " + highScore;
// 현재 기록이 이전 최고 기록보다 더 짧다면 최고 기록 변경
if (highScore > result)
{
PlayerPrefs.SetInt("HighScore", result);
}
}
}
}
4-13, Canvers에 스크립트 붙이기
4-14, resultUI에 컴포넌트 할당
결과 ㅎㅎ
'코딩 일기장 > Unity' 카테고리의 다른 글
[Unity] 게임 재시작 & 사운드 추가 (0) | 2021.11.01 |
---|---|
[Unity] 3D 장애물 런게임 만들기(c# 스트립트 없이) (0) | 2021.10.24 |
[유니티] 스파르타 코딩 : 게임 개발 - 5주차(마지막) (0) | 2021.06.23 |
[유니티] 스파르타 코딩 : 게임 개발 - 4주차 (0) | 2021.06.21 |
[유니티] 스파르타 코딩 : 게임 개발 - 3주차 (0) | 2021.06.19 |