좌표계 만들기

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

Text Mesh Pro

TextMeshPro는 3D 오브젝트로도 있다.

3D 오브젝트인 TextMeshPro

다른 UI 요소와는 다르게 월드의 타 개체에 의해 불투명해질 수 있다.

불투명해진 TextMeshPro

TextMeshPro의 크기를 큐브와 같게 맞췄고 회전을 x축으로 90도를 줬으며 같은 레벨의 Cube Mesh의 y축 좌표를 -4.5만큼 이동했다.

* 폰트가 이상하게 보이는 이유는 Z-fighting 또는 Z-buffer fighting이라 불리는 것 때문인데 지금 상황에서는 큐브의 텍스트와 상단면이 정확히 똑같은 공간을 차지하려해서 발생한다.

레이블 보이게 하기

해결 방안 1.

한 오브젝트의 위치를 살짝 조정하기

해결방안 1.

해결방안 2.

TextMeshPro의 쉐이더 변경 -> TextMeshPro - Distance Field Overlay

Distance Field Overlay

이렇게하면 y축이 몇이든 Overlay된다.

y축을 낮춰도 보인다.

이후 설정한 타일을 프리펩화하여 템플릿으로 사용한다.

프리펩화

 

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

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

Grid Snapping

Ctrl + 좌클릭으로 게임 오브젝트를 이동시 일정한 값씩 움직인다.(기본 0.25유닛) 

레엄 러쉬는 그리드 기반 게임이므로 스내핑을 잘만 설정해 놓으면 월드에서 다른 것들의 위치를 잡는 것도 훨씬 쉽고 빠르게 할 수 있다.

오브젝트 Ctrl + 좌클릭 이동

Grid Plane으로 축을 선택해 껐다 켰다 할 수 있다.

Grid Plane

Opacity를 늘리면 Grid의 불투명도가 증가한다.

Opacity

Grid Snapping - 씬 화면의 자석 모양

Grid Snapping

Global로 설정하면 Grid Snapping이 활성화 되고

Global

Grid Snapping에서 지정한 값만큼씩 움직인다. => 월드 그리드는 개체의 간격을 적절히 둘 수 있도록 도와준다.

5씩 움직임

Ctrl을 누르고 움직이면 0.25씩 움직임 -> Increment Snapping이 0.25로 설정되어 있어서

0.25씩 움직임

Increment Snapping - 눈금 모양

- Ctrl + 좌클릭하여 움직이는 것과 관련있다.

Increment Snapping

Grid and Snapping이 활성화 된 상태(지구본모양 Global이 켜진 상태에 켜짐)로 타일을 복사한 뒤 옮기면 일정 간격으로 정렬할 수 있다.

Tile 복사
Tile 정렬

 

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

코루틴  (0) 2022.09.02
리스트와 적 웨이포인트  (0) 2022.09.02
좌표계  (0) 2022.09.01
텍스트 레이블  (0) 2022.09.01
레엄 러쉬 게임 디자인  (0) 2022.09.01

타워 디펜스 조건

1. 플레이어가 게임 월드에 방어 구조를 배치할 수 있어야 한다.

2. 특정 개체를 방어하기 위해 배치 한다.

3. 해당 개체를 공격하기 위해 수많은 적들이 몰려온다.

ex) 풍선 타워 디펜스, 플랜츠 대 좀비

고정된 경로가 있는 게임이 있고 없는 게임이 있다.

 

필요사항

1. 3D

2. 그리드 설정 - 적이 월드에 진입하는 시작지과 공격하고자 하는 목적지(우리 기지)가 있다. -> 이 두 지점을 연결해 적은 특정 경로를 따른다. -> 플레이어는 이 공간에 타워를 세움으로써 적을 공격하고 적을 멈추려 노력해야 한다.

 

플레이어 경험

전술적 / 전략적

핵심 메커니즘

플레이어에게 제한된 수의 자원을 제공해 적을 멈추고 목표를 달성하는데 있어 전략적으로 배치하게끔 만든다.

핵심 게임 루프

가능한 오랫동안 플레이어가 밀려드는 적으로부터 살아남는 것이다.

플레이어는 기지에 금을 보유하고 있고 금이 소진되면 레벨을 다시 시작한다.

 

게임 테마

스토리 : 성을 빼앗고 금을 훔치는 적에게 맞서 방어한다.

아트 :

중세 판타지

복셀 - 3D 픽셀 아트

 

기술 사양

플랫폼 : PC / 맥 / 리눅스

해상도 : 1920x1080 16:9

입력 : 마우스 클릭

 

최종 목표

- 적 길찾기 : 처음엔 우리가 지정한 경로로 다니다가 나중에 적이 역동적으로 자신의 경로를 바꾸게 만든다. - 경로(너비 우선 탐색 공부 필요)

- 타워 타이머 : 타워가 지어질 때까지 시간이 걸린다.

 

 

【한글자막】 C#과 Unity로 3D 게임 개발하기

 

 

 

'유데미 강의 > 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