좌표계 만들기
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using TMPro;
// 편집모드와 플레이모드에서 둘다 실행됨
// 실수로 수정하는 일이 없도록 유의 해야함
[ExecuteAlways]
public class CoordinateLabeler : MonoBehaviour
{
private TextMeshPro label;
private Vector2Int coordinates = new Vector2Int();
private void Awake()
{
label = GetComponent<TextMeshPro>();
}
void Update()
{
// 플레이 중이 아니므로
// 편집 모드에서만 실행될 것임
if (!Application.isPlaying)
{
DisPlayCoordinates();
}
}
private void DisPlayCoordinates()
{ // parent를 가져오는 이유는 TextMeshPro가 Tile의 자식 오브젝트로 있어서 그렇다.
// * 실제 위치 좌표는 Tile이 가지고 있음
coordinates.x = Mathf.RoundToInt(transform.parent.position.x);
coordinates.y = Mathf.RoundToInt(transform.parent.position.z); // 3D환경이니까 값이 Position.z이다.
label.text = $"({coordinates.x}, {coordinates.y})";
}
}
씬에서 이동하면 좌표가 뜬다.
그러나 플레이 모드에서는 좌표가 망가진다.
=> 스크립트가 플레이 모드에서만 실행되기 때문이다.
해결하려면 Update 전에 Awake에서 DisPlayCoordinates 호출로 초기화를 한 번 해준다.
이후 DisPlayCoordinates()의 안을 아래와 같이 수정한다. => text 내용을 1 단위로 맞추기 위함
그러고나면 플레이 모드에서도 실행이 잘 된다!
이후에 타일 이름도 좌표 값으로 변경하기 위해 코드를 작성한다.
타일 이름이 잘 바뀌었고 편집 모드에서 움직이면 타일 텍스트와 이름도 바뀐다.
플레이 모드에선 영향을 주지 않는다.
'유데미 강의 > C#과 Unity로 3D 게임 개발하기 : 레엄 러쉬' 카테고리의 다른 글
코루틴 (0) | 2022.09.02 |
---|---|
리스트와 적 웨이포인트 (0) | 2022.09.02 |
텍스트 레이블 (0) | 2022.09.01 |
그리드 스내핑 (0) | 2022.09.01 |
레엄 러쉬 게임 디자인 (0) | 2022.09.01 |