좌표계 만들기

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 호출로 초기화를 한 번 해준다. 

Awake()

이후 DisPlayCoordinates()의 안을 아래와 같이 수정한다. => text 내용을 1 단위로 맞추기 위함

UnityEditior.EditorSnapSettings.move.~

그러고나면 플레이 모드에서도 실행이 잘 된다!

플레이 모드

이후에 타일 이름도 좌표 값으로 변경하기 위해 코드를 작성한다.

타일 이름 변경하기

타일 이름이 잘 바뀌었고 편집 모드에서 움직이면 타일 텍스트와 이름도 바뀐다.

편집모드

플레이 모드에선 영향을 주지 않는다.

플레이모드 2

 

'유데미 강의 > C#과 Unity로 3D 게임 개발하기 : 레엄 러쉬' 카테고리의 다른 글

코루틴  (0) 2022.09.02
리스트와 적 웨이포인트  (0) 2022.09.02
텍스트 레이블  (0) 2022.09.01
그리드 스내핑  (0) 2022.09.01
레엄 러쉬 게임 디자인  (0) 2022.09.01

+ Recent posts