코드네임 :

#6 점수 추가 & 저장 및 불러오기 본문

프로그래밍/Unity(C#)

#6 점수 추가 & 저장 및 불러오기

비엔 Vien 2023. 7. 9. 23:01

점수 (UI 설정)

 

~UI.text = "~" + ~    :    옆에 있는 글자로 덮어씌우기 인듯,,

 

- + -> text 

모든 UI는 canvas의 하위 오브젝트로 들어가야 화면에 보임요 

eventsystem : 우리가 어떤 버튼,  UI를 클릭했을 때 그런 걸 인식해서 보내주는 기능( 이벤트 처리하는 부분 )

text : UI에다가 글자를 출력하고자 한다면 반드시 사용해줘야 함

 

- text이름 currentscore로 바꿈 ( 두 사진 중에서 한 가지 방법으로만 바꾸면 됨)

 

 

 

현재점수 

 

최고점수

 

  짠

 

 

 


ScoreManager

 

Hierarchy에서 create empty로 생성 (얘도 transform을 Reset)

script도!!

 

scoremanager.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI; // 이거 꼭 있어야 함!!


public class ScoreManager : MonoBehaviour
{
    public Text currentScoreUI;
    public int currentScore;

    public Text bestScoreUI;
    public int bestScore;

    void Start()
    {
        
    }


    void Update()
    {
        
    }
}

 

enemy.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Enemy : MonoBehaviour
{
    public float speed = 5;

    Vector3 dir; 
    
    public GameObject explosionFactory;

    GameObject smObject; //

    void Start()
    {
        int randValue = Random.Range(0,10);

        if (randValue < 3) 
        {
            GameObject target = GameObject.Find("Player");

            dir = target.transform.position - transform.position;

            dir.Normalize();
                           
        }
        
        else  
        {
            dir = Vector3.down; 
        }

        smObject = GameObject.Find("ScoreManager"); //
    }


    void Update()
    {                       
        transform.position += dir * speed * Time.deltaTime;
    }

    void OnCollisionEnter(Collision other) // 충돌 처리 함수 
    {
        //GameObject smObject = GameObject.Find("ScoreManager");
        //// Find는 Hierarchy창 전체를 훑고 지나가니까 느려진다고 많이 쓰지 말래
        //// 따라서 여기에다가 쓴 이 Find는 충돌이 일어날떄마다 호출되기 떄문에 일케 쓰는 건 좋지 않은 방법 .

        ScoreManager sm = smObject.GetComponent<ScoreManager>();
        // ScoreManager 안에 있는 Script를 얻어올수 있게 됨

        sm.currentScore++;
        // ScoreManager안에 들어있는 currentScore의 값을 1 증가

        sm.currentScoreUI.text = "현재점수 : " + sm.currentScore;
                                // str + int = 결과는 str(문자열)형으로 
                                
                                
        if (sm.currentScore > sm.bestScore) // 최고점수 갱신
        {
            sm.bestScore = sm.currentScore;
            sm.bestScoreUI.text = "최고점수 : " + sm.bestScore;
        }

        GameObject explosion = Instantiate(explosionFactory); 

        explosion.transform.position = transform.position;

        Destroy(other.gameObject); 
        Destroy(gameObject);
    }
}

 

아그리고 유니티 Inspector에다가도 그 currentscore의 text를 '현재점수 : 0' 으로 바꾸면 0부터 시작 가능^

 

 

 

 




 

저장 및 불러오기 

 

scoreManager.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

// 여기 써있는 Start()과 Update()는 private이므로 ScoreManager에서만 사용가능 
//SetScore(int value)는 외부에서 쓸 수 있음 

public class ScoreManager : MonoBehaviour
{
    public Text currentScoreUI;
    public int currentScore;

    public Text bestScoreUI;
    public int bestScore;

    void Start()
    {
        bestScore = PlayerPrefs.GetInt("Best Score", 0);
        // 여기에 있는 0은 디폴트 값으로 게임을 처음 시작했을때 최고점수에 아무것도 들어있지 않으므로 0값을 넣어주는 역할을 함 

        bestScoreUI.text = "최고점수 : " + bestScore;
        // 자기 자신의 멤버변수이기 때문에 bestScore앞에  sm. 필요없음 !
    }


    void Update()
    {
        
    }


    public void SetScore(int value) // 자기꺼한테 가져왔으니까 앞에 sm 안 써두 됨 
    {

        currentScore++;
        // ScoreManager안에 들어있는 currentScore의 값을 1 증가

        currentScoreUI.text = "현재점수 : " + currentScore;
        // str + int = 결과는 str(문자열)형으로
        
        if (currentScore > bestScore) // 최고점수 갱신 
        {
            bestScore = currentScore;
            bestScoreUI.text = "최고점수 : " + bestScore;

            PlayerPrefs.SetInt("Best Score", bestScore); // 갱신된 최고점수 저장 
        }
        
    }

    public int GetScore()
    {
        return currentScore; // 현재 스코어를 되돌려준다 
    }

}

 

enemy.cs