코드네임 :
#6 점수 추가 & 저장 및 불러오기 본문
점수 (UI 설정)
~UI.text = "~" + ~ : 옆에 있는 글자로 덮어씌우기 인듯,,
- + -> text
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
'프로그래밍 > Unity(C#)' 카테고리의 다른 글
유니티 게임화면 기획 (0) | 2023.07.21 |
---|---|
#7 싱글톤패턴 & 오브젝트 풀 (0) | 2023.07.09 |
#5 폴리싱 & 이펙트 & 배경 & 사운드 (0) | 2023.07.08 |
슈팅게임 #4 충돌처리 (0) | 2023.07.07 |
슈팅게임 - #2 총알이동, 적 이동 (0) | 2023.07.06 |