먹기
Coddy의 Unity 게임: 3D 스네이크 코스 레슨. 14개 중 6번째.
뱀은 머리가 먹이가 있는 칸에 들어서면 먹이를 먹습니다. 둘 다 정수 좌표에 있으므로 ==로 위치를 비교해도 안전합니다. Unity에서 Vector3의 ==는 두 위치 사이의 거리가 0.00001보다 작을 때 두 위치를 같다고 판단하며, 정수 칸을 더해도 그만큼 작은 차이는 생기지 않습니다.
뱀은 자신이 이동할 때를 알고, GameManager는 먹이가 어디에 있는지 알고 점수를 관리합니다. 따라서 뱀은 이동할 때마다 묻고 GameManager는 답합니다. IsFood(cell)는 bool을 반환하고, Eat()은 점수를 1점 올리고 먹이를 옮깁니다. 뱀은 C# for Unity 여정에서 배운 싱글턴인 정적 Instance를 통해 GameManager에 접근합니다.
이동한 다음 머리가 들어선 칸에 대해 확인하세요. 그리드 위의 열쇠도 같은 방식으로 획득합니다.
transform.position = next;
if (key.position == transform.position)
{
keysHeld++;
key.gameObject.SetActive(false);
}챌린지
중급뱀이 먹이를 먹고 점수를 1점 얻습니다.
GameManager에public static GameManager Instance;를 추가하고,Awake()에서 값을 설정한 다음private int score;를 추가하세요.public bool IsFood(Vector3 cell): cell이 먹이의 위치일 때 true를 반환합니다.public void Eat(): 점수를 1점 더한 다음MoveFood()를 호출합니다.Snake의Step()끝부분에서GameManager.Instance.IsFood(next)가 true이면Eat()를 호출하세요.
‘플레이’를 누르고 먹이 쪽으로 이동하세요. 먹이가 새 칸으로 이동합니다. 그런 다음 ‘확인’을 누르세요.
직접 해보기
using UnityEngine;
public class GameManager : MonoBehaviour
{
public Snake snake;
public GameObject foodPrefab;
private Transform food;
void Start()
{
food = Instantiate(foodPrefab).transform;
MoveFood();
}
void MoveFood()
{
int x = Random.Range(-snake.edge, snake.edge + 1);
int z = Random.Range(-snake.edge, snake.edge + 1);
food.position = new Vector3(x, 0f, z);
}
}
Unity 게임: 3D 스네이크의 모든 레슨
직접 연습해 보세요: Unity 플레이그라운드