좀짓막의 레퍼런스 게임인 벽짓살류 게임의 경우 스타크래프트와 워크래프트의 유즈맵으로 이 둘은 아이소메트릭 타일맵으로 되어 있다. 그래서 아이소메트릭 타일맵을 만들기 위해 괜찮은 외국 유튜브가 많아서 다음 내용들을 참고해서 타일맵을 만들기로 했다.
https://www.youtube.com/watch?v=tW744Zgc1YY
https://www.youtube.com/watch?v=ci1ba7jVLFw
https://www.youtube.com/watch?v=9WElejje6Sc
는 일단 나중에 보기로 하고 내가 생각한 방식대로 타일맵을 한번 만들어 보았다.
먼저 타일 하나를 만든 뒤 프리펩으로 만들고 카메라를 직교로 바꿔서 아이소메트릭 뷰 처럼 보일 수 있게 준비를 해놨다. 그리고 GameManager를 만들어서 Block프리펩을 할당하고 for문을 돌려서 256x256의 타일을 만든다음 배열에 넣어 보았다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class GameManager : MonoBehaviour
{
[SerializeField]
private GameObject Block;
private GameObject[,] tileMap = new GameObject[256, 256];
// Start is called before the first frame update
void Start()
{
for (int i = 0; i < 256; i++)
{
for (int j = 0; j < 256; j++)
{
GameObject go = Instantiate(Block);
go.transform.position = new Vector3(i, j, 0);
tileMap[i, j] = go;
}
}
}
}
65,536개의 타일을 생성해야하기 때문에 렉이 엄청 걸리지 않을까 싶었지만 그러지 않았다. 하지만 나중에 머티리얼을 입힌다면 문제가 될 수도 있으므로 이 방법을 고수한다면 오브젝트 풀링을 적용해야 할 것 같다.
그리고 enum타입을 정의하고 블록을 empty상태로 해주었다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Tile : MonoBehaviour
{
public enum eState
{
Empty,Fulled
}
public int state = 0;
}
그 다음엔 카메라를 만들고 플레이어를 임포트 한 뒤 카메라가 플레이어를 바라보도록 만들어주었다. 하는 김에 타일에 적당히 머티리얼도 입혀 주었다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using static UnityEngine.GraphicsBuffer;
public class CameraCtrl : MonoBehaviour
{
[SerializeField]
private GameObject target;
void Update()
{
if (target != null)
{
var pos = new Vector3(target.transform.position.x + 6.5f, target.transform.position.y + 6, target.transform.position.z - 10);
this.transform.position = pos;
this.transform.rotation = Quaternion.Euler(20, -30, 0);
}
}
public void Init(GameObject target)
{
this.target = target;
}
}
더 괜찮은 머티리얼이 없나 찾다가 에셋스토어에서 제공하는 무료 에셋을 이용하기로 했다.
카메라 각도도 좀 조정해주고 벽도 추가해주었다. 그리고 타일을 하나하나 만드는 건 너무 메모리 소모가 많기에 플레인을 깔고 bool 2차원 배열을 만들어서 맵을 대신하기로 했다. 플레인 머티리얼의 타일링 값을 조절해서 유니티 1유닛만큼에 1블록이 들어가도록 값을 조정해주었다.
https://assetstore.unity.com/packages/3d/environments/historic/walls-and-floors-v-1-144638
Walls and floors v.1 | 3D 역사적 건조물 | Unity Asset Store
Elevate your workflow with the Walls and floors v.1 asset from VK GameDev. Find this & other 역사적 건조물 options on the Unity Asset Store.
assetstore.unity.com
'3D 콘텐츠 제작' 카테고리의 다른 글
좀짓막(좀비 집짓고 막기) [#5] - 목표물 타게팅/설치 기능 만들기 (2) | 2023.10.04 |
---|---|
좀짓막(좀비 집짓고 막기) [#4] - 길찾기 알고리즘 이동에 적용 (0) | 2023.09.27 |
좀짓막(좀비 집짓고 막기) [#3] - A* 길찾기 알고리즘 R&D (0) | 2023.09.26 |
좀짓막(좀비 집짓고 막기) [#2] - 건축물 설치 R&D (0) | 2023.09.25 |
좀짓막(좀비 집짓고 막기) [#0] - 게임 계획서 (0) | 2023.09.22 |