살아남고 점수 얻기
Coddy Unity 여정의 Unity 스크립팅 기초 섹션에 포함된 레슨. 85개 중 80번째.
이 단계에서는 Dodge the Blocks를 완성합니다. 타이머가 블록을 생성하고, 목록이 블록을 이동시키고 정리하며, 충돌을 검사하고, 점수가 초를 셉니다. float 앞에 있는 (int)는 소수 부분을 버립니다.
챌린지
중급점수를 추가하고, 블록이 점점 더 빠르게 떨어지도록 하세요.
private float score;와[SerializeField] private float speedUp = 0.2f;를 추가하세요.Update()의 맨 위에서Time.deltaTime을score에 더하고,speedUp * Time.deltaTime을fallSpeed에 더하세요.- 충돌하면
"Game over! Score: " + (int)score를 로그에 출력하세요.(int)는 소수 부분을 버립니다. 12.7은 12로 표시됩니다.
‘플레이’를 누르고 살아남으세요. 충돌하면 점수가 로그에 출력됩니다. 그런 다음 ‘확인’을 누르세요.
직접 해보기
using System.Collections.Generic;
using UnityEngine;
public class Runner : MonoBehaviour
{
[SerializeField] private float speed = 6f;
[SerializeField] private float laneEdge = 4f;
[SerializeField] private GameObject blockPrefab;
[SerializeField] private float spawnEvery = 1f;
[SerializeField] private float fallSpeed = 5f;
private List<GameObject> blocks = new List<GameObject>();
private float timer;
void Update()
{
Vector3 p = transform.position;
p.x += Input.GetAxisRaw("Horizontal") * speed * Time.deltaTime;
p.x = Mathf.Clamp(p.x, -laneEdge, laneEdge);
transform.position = p;
timer += Time.deltaTime;
if (timer >= spawnEvery)
{
timer -= spawnEvery;
Vector3 spot = new Vector3(Random.Range(-laneEdge, laneEdge), 10f, 0f);
blocks.Add(Instantiate(blockPrefab, spot, Quaternion.identity));
}
for (int i = blocks.Count - 1; i >= 0; i--)
{
blocks[i].transform.position += Vector3.down * fallSpeed * Time.deltaTime;
Vector3 b = blocks[i].transform.position;
if (Mathf.Abs(b.x - transform.position.x) < 1f && Mathf.Abs(b.y - transform.position.y) < 1f)
{
Debug.Log("Game over");
enabled = false;
return;
}
if (b.y < -1f)
{
Destroy(blocks[i]);
blocks.RemoveAt(i);
}
}
}
}
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
Unity 스크립팅 기초의 모든 레슨
직접 연습해 보세요: Unity 플레이그라운드