[2D Sparta-Unity] 2주차 Unity , 풍선 지키기 ⭐
카테고리: Sparta Unity
2주차 풍선 지키기
풍선 지키면서 점수 얻기. 마우스 제어, 베스트 스코어, 애니메이션
1. 배경, 캐릭터 구성
- 화면 비율 수정(760 x 1280)
- 배경, 풍선 생성후
- Order in Layer 확인하기
- Time Text 추가
2. 애니메이션
- Animation 생성
- Loop Time(반복)확인
- 평상시 색 변화(Idle), 사망(DIE)
- 애니메이션 파라미터(isDie)를 이용하여 게임오버시 isDie =true 가 되면 Die애니메이션 재생
- 녹화 버튼으로 색변화 애니메이션 생성
3. 쉴드 움직이기
마우스로 쉴드 위치 변경
shield.cs
shield.cs
using UnityEngine;
public class shield : MonoBehaviour
{
void Update()
{
Vector3 mousePos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
transform.position = new Vector3(mousePos.x, mousePos.y, 0);
}
}
- 쉴드 마우스 포인터 따라가기코드
4. Squre 코딩
square.cs
square.cs
using UnityEngine;
public class square : MonoBehaviour
{
void Start()
{
float x = Random.Range(-3.0f,3.0f);
float y = Random.Range(3.0f,5.0f);
transform.position = new Vector3(x,y,0);
float size = Random.Range(0.5f,1.5f);
transform.localScale = new Vector3(size,size,1);
}
private void Update() {
if (transform.position.y < -7)
{
Destroy(gameObject);
}
}
void OnCollisionEnter2D(Collision2D coll)
{
if (coll.gameObject.tag == "Balloon")
{
GameManager.I.gameOver();
}
}
}
반복 랜덤 square
GameManager 오브젝트를 만들고 → 빗방울을 Prefabs로 틀을 만들고 → Instantiate 복제합니다!
5. GameManager
- GameManager란? 게임 전체를 조율하는 오브젝트!
- 점수 / 다시 시작 / 3번 째 다시 시작에 부스터 / 광고보기 등
GameManager.cs
GameManager.cs
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;
public class GameManager : MonoBehaviour
{
public static GameManager I;
public GameObject square;
public Text timeTxt;
public GameObject endPanel;
public Text thisScoreTxt;
public Text maxScoreTxt;
public Animator anim;
float alive = 0f;
bool isRunnig = true;
void Awake()
{
I = this;
}
void Start()
{
Time.timeScale = 1.0f;
InvokeRepeating("makeSquare", 0.0f, 0.5f);
}
void Update()
{
if (isRunnig)
{
alive += Time.deltaTime;
timeTxt.text = alive.ToString("N2"); //N2 소수점 2자리
}
}
void makeSquare(){
Instantiate(square);
}
public void gameOver()
{
anim.SetBool("isDie", true);
isRunnig=false;
Invoke("timeStop",0.5f);
endPanel.SetActive(true);
thisScoreTxt.text = alive.ToString("N2");
if (PlayerPrefs.HasKey("bestScore") == false)
{
PlayerPrefs.SetFloat("bestScore", alive);
}
else
{
if (PlayerPrefs.GetFloat("bestScore") < alive)
{
PlayerPrefs.SetFloat("bestScore", alive);
}
}
maxScoreTxt.text = PlayerPrefs.GetFloat("bestScore").ToString("N2");
}
public void retry()
{
SceneManager.LoadScene("MainScene");
}
void timeStop(){
Time.timeScale = 0.0f;
}
}
- InvokeRepeating (“메서드 이름”, 시간 딜레이, 반복 시간 단위)메서드를 x초 후 실행하고, 매 y초마다 반복해서 실행하는 것을 의미
- Instantiate( 이미 만들어진 게임 오브젝트를 필요할 때마다 실시간으로 만든다는 의미)
6. 게임 끝내기
- Retry 판넬 만들기(Canvas)
- Active 로 종료시 보이게 하기
- 판넬에 버튼추가 클릭시 retry 함수 다시시작(Main Scene을 새로고침 한다.)
- onclick -> panel.retry
- Button target Graphic (클릭 가능한 느낌 주기)
panel.cs
panel.cs
using UnityEngine;
public class panel : MonoBehaviour
{
public void retry()
{
GameManager.I.retry();
}
}
7. 데이터 보관 (Playerprefs)
앱을 껐다 켜도 데이터가 유지되게 - 유니티에서 데이터를 보관하는 방법
// 데이터 저장하기 Set~~~~
Playerprefs.SetFloat("bestScore", 어떤숫자값);
Playerprefs.SetString("bestScore", 어떤문자열);
// 데이터 불러오기 get~~~~
Playerprefs.getFloat("bestScore");
Playerprefs.getString("bestScore");
// 저장하고 있는지 확인
Playerprefs.HasKey("bestScore") //"bestScore" 라는 이름으로 저장하고 있는지 확인
// 모두 지우기
Playerprefs.DeleteAll();
8. 정리
1회 23/06/14
2회 23/10/24 복습, 수정
[Unity] 풍선지키기
댓글남기기