본문 바로가기
Unity 공부

10.20 (Unity 공부)

by 오랑이귀엽다 2023. 10. 20.

이미지 없이 Animation 만드는 방법

위 그림과 같이 balloon_idle 에니메이션 창을 띄우고 이후에 balloon의 시간 별 색상을 바꿔 줌으로서 만들 수 있다.

 

 

마우스 포인터를 따라 움직이게 하기

 

코드이용

void Update()
{
    Vector3 mousePos = Camera.main. ScreenToWorldPoint ( Input.mousePosition );
    transform.position = new Vector3 (mousePos.x, mousePos.y, 0);
}

 

 

shadow 효과주기

Add Component로 추가

 

 

판넬위 여러 Text 입력 하기

 

 

 

Target Graphic

Target Graphic 아래를 보면 경고문 하나가 있다.

이는 Target Graphic 을 설정을 한다면 사용자들이 마우스를 버튼 가까이 가져 갔을 때 색변화를 주는것

 

 

싱글톤(Singleton) 패턴 (10.17)

리마인드 - 싱글톤이란? 너는 딱 하나야! 라고 할 수 있게 세팅해두는 것 (그래야 다른데서 나를 부를 수 있다!!!)

 

코드 사용

public static gameManager I; // public이란 여러군데서 나를 부를수 있다. gameManager I 가 있다!

void Awake() // void Awake() 가 불리면 I = this; 즉 gameManager스스로를 넣어라!
{
    I = this;
}

// 싱글톤이 아니라면  I = this; 가 아닌 I = new gameManager; 가 됨

 

게임 종료 함수 만들기

 

게임 종료 목표와 충돌시 종료하기

 

코드 사용

void OnCollisionEnter2D(Collision2D coll)

// OnCollisionEnter2D란 Collider가 걸려있는 오브젝트 끼리 충돌할때 불리는 함수
{
    if (coll.gameObject.tag == "balloon") // 만약 상대가 balloon과 ==(같다)면!
    {
        gameManager.I.gameOver(); // gameManager.I 에게 말해서 종료 시켜라!
    }
}

 

 

 

Update() 함수를 멈추게 하기

위와 같이 실험도중 타이머와 이번판 점수에 약간의 오차가 존재

이는 Update()와 gameOver() 간의 약간의 시간차가 있기 때문이다.

 

코드 사용

bool isRunning = true; 

void Update()
{
    if (isRunning)  // isRunning이 true 즉 아직 진행중이라면 아래를 실행
 {
        alive += Time.deltaTime;
        timeTxt.text = alive.ToString("N2");
 }
}

public void gameOver()
{
    isRunning = false; //  isRunning이 false 라면 더이상 update 종료 및 판넬 오픈
    Time.timeScale = 0.0f;
    thisScoreTxt.text = alive.ToString("N2");
    endPanel.SetActive(true);
}

 

다시하기 만들기

 

코드 사용

using UnityEngine.SceneManagement;  // SceneManagement를 사용한다.

public void retry()
{
    SceneManager.LoadScene("MainScene"); // MainScene을 리로드한다.
}

 

이렇게 다시 할 때에는 반드시 "시간"도 되돌려놔야 한다!!

Time.timeScale = 1.0f;을 Start에 넣어준다.

이후 retry (on click)에 추가

 

 

데이터를 보관하는 방법

PlayerPrefs : 앱을 껐다 켜도 데이터가 유지되게 - 유니티에서 데이터를 보관하는 방법

 

1. 데이터 저장하기

PlayerPrefs.SetFloat("bestScore", 어떤숫자값);
PlayerPrefs.SetString("bestScore", 어떤문자열);

 

2. 데이터 불러오기

어떤숫자값 = PlayerPrefs.getFloat("bestScore");
어떤문자열 = PlayerPrefs.getString("bestScore");

 

3. 데이터를 저장했었는지 확인 → 있으면 true 없으면 false

PlayerPrefs.HasKey("bestScore")

 

4. 데이터를 모두 지우기

PlayerPrefs.DeleteAll();

 

최고 점수 보여주기

 

로직 생각하기

if (최고 점수가 없으면)
{
최고점수 = 지금점수
}
else
{
if (최고점수 < 지금점수)
{
최고점수 = 지금점수
}
}

 

애니메이션 동작 정하기

animator controller를 열어서 작업

이후 좌측 상단에 Parameters에, bool 형식의 isDie (대, 소문자 구분 하여) 를 만들기

그런다음 새로만든 진행로를 클릭하면

이런 창이뜬다. 여기서

Has Exit Time 은 이 balloon_idle 에서 -die로 넘어갈때 딜레이가 있는가?

Conditions은 언제 넘어 가야하나요?

이후 gmaeManager에서 작업

하지만 작동이 안된다.

이유는 애니메이션이 나올 틈이 없이 시간을 멈추기 때문

0.5초 후에 시간을 멈추도록 Invoke 로 처리하기!

 

화면 밖 오브젝트 제거!

화면 밖으로 떨어진 네모들을 Destroy(gameObject) 해주기!

square.cs에 작성

 

 

 

'Unity 공부' 카테고리의 다른 글

03.18 (TIL-Unity)  (0) 2024.03.19
10.23 (Unity 공부)  (0) 2023.10.23
10.17 (Unity공부)  (0) 2023.10.17
10.13 (Unity공부)  (0) 2023.10.13