점수 표시하기
Coddy Unity 여정의 실제 게임 만들기 섹션에 포함된 레슨. 56개 중 2번째.
텍스트의 text는 문자열이므로 숫자를 표시하기 전에 텍스트로 바꿔야 합니다. +로 문자열에 이어 붙이면 됩니다. "Wood: " + wood는 wood가 12일 때 Wood: 12가 되고, wood.ToString()은 12가 됩니다. int만으로는 맞지 않습니다. woodText.text = wood;는 CS0029 오류와 함께 실패합니다. int 형식을 string 형식으로 암시적으로 변환할 수 없습니다.
숫자는 int 필드에 저장되고, 텍스트는 그 값을 보여 주기만 합니다. 하나의 메서드가 필드의 값으로 텍스트를 다시 설정합니다. 숫자가 바뀔 때마다 이 메서드를 호출하고, Start()에서도 호출하므로 첫 프레임에는 Inspector에 입력된 값이 아니라 실제 값이 표시됩니다. 여기서는 Space 키를 누르면 통나무 3개를 얻습니다.
public TMP_Text woodText;
private int wood;
void Start()
{
ShowWood();
}
void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
wood += 3;
ShowWood();
}
}
void ShowWood()
{
woodText.text = "Wood: " + wood;
}텍스트는 wood가 바뀔 때만 바뀝니다. 매 Update()마다 텍스트를 다시 설정해도 똑같이 보이겠지만, 아무 이유 없이 초당 60번 새 문자열을 만들게 됩니다. 순서가 중요합니다. wood += 3보다 먼저 ShowWood()를 호출하면 이전 횟수가 표시되어 한 번 누른 만큼 뒤처집니다.
챌린지
쉬움정원사는 나무를 심습니다. 화살표 키로 정원사를 움직이고, 씨앗이 남아 있는 동안 스페이스 키를 누르면 묘목을 심습니다. 이 동작은 Gardener.cs에 이미 구현되어 있습니다. 화면에 개수를 표시하세요. 씬에서는 seedsText와 treesText가 연결되어 있습니다.
seedsText에는 남은 씨앗 수가Seeds: 4와 같이 표시되고,treesText에는 심은 나무 수가Trees: 1과 같이 표시됩니다.- 두 텍스트 모두 첫 프레임부터, 그리고 나무를 심을 때마다 올바른 값을 표시해야 합니다. Inspector에서 정원사에게 씨앗 5개를 설정하지만, 씬의 텍스트는 여전히
Seeds: 10과Trees: ?로 표시됩니다. - 두 텍스트를 모두 설정하는 메서드를 하나 작성하고, 필요한 곳마다 호출하세요.
Play를 눌러 씨앗이 다 떨어질 때까지 심은 다음, Check를 누르세요.
직접 해보기
using UnityEngine;
using TMPro;
public class Gardener : MonoBehaviour
{
public float speed = 4f;
public int seeds = 10;
public GameObject saplingPrefab;
public TMP_Text seedsText;
public TMP_Text treesText;
private int trees;
void Update()
{
float move = Input.GetAxisRaw("Horizontal");
transform.Translate(move * speed * Time.deltaTime, 0f, 0f);
if (Input.GetKeyDown(KeyCode.Space) && seeds > 0)
{
Vector3 spot = new Vector3(transform.position.x, 0.5f, 1.5f);
Instantiate(saplingPrefab, spot, Quaternion.identity);
seeds--;
trees++;
}
}
// 첫 프레임부터 두 텍스트에 각각 Seeds:와 Trees:를 표시하세요
}
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.