오늘은 팀 프로젝트를 시작하는 날이다.
우리 조는 RunPizzaRun 모작으로 3D 러닝 액션 게임을 만들기로 했다.
만들 게임을 고르고 나서 간단하게 와이어 프레임을 작성하고, 크게 4가지로 분류했다.
1. 미니맵과 스폰 매니저
2. 게임 매니저 (UI + 오브젝트 풀 관리 + 점수 관리 + 시간)
3. Player (움직임 + 애니메이션 + 카메라 제어)
4. 장애물 (움직임 + 애니메이션 + 오브젝트 풀)
이 4가지 중에서 1번째인 미니맵과 스폰 매니저를 맡게 됐다.
미니맵 만들기
1. Project 창에서 Render Text를 생성해 주고 Size를 적절하게 조정해 준다.
2. 미니맵용 Camera를 Hierarchy 창에서 새로 만들어준다.
3. Camera의 Projection을 Orthographic 으로 변경해 주고 Size를 조절해 주면서 원하는 크기를 찾는다.
- 여기서 Script를 통해서 Player의 움직임을 따라가게 끔 만들어 줄 수도 있지만, 우선 그냥 Player의 자식으로 넣어서 Player의 이동에 따라오게끔 만들었다.
- Camera의 Rotation X 값을 바꿔서 수직으로 볼 수 있게 변경해 주고, Position의 Y 값을 맵에 있는 Object들 보다 높게 만들어줬다.
4. UI를 만들기 위해서 Canvas를 만들고, Image를 생성해 준다.
5. 만들어둔 Image에 UI - RawImage를 추가해 주고, 1번에서 만들어둔 Render Text를 Raw Image - Texture에 삽입한다.
6. 4번에서 만들어둔 Image에 Source Image를 원하는 형태로 변경해 준다.
- 추가로 MainCamera와 MiniMap에서 사용하는 Camera의 Culling Mask를 조절해서 Camera에 표시하고 싶은 Object들을 Layer를 통해서 구분시켜준다.
ex) MiniMap에서 Player를 표시하기 위해서 새로운 Object에 색깔을 입히게 되면 Culling Mask를 조절하지 않았을 때 MainCamera와 MiniMapCamera 모두 Object들이 표시되지만, Layer를 구분시켜주면 원하는 Object들만 Camera에 보이게 만들 수 있다.
-- 추가해야 될 사항
MiniMap 밖에서 표시돼야 될 Object들을 MiniMap 끝 쪽에 보이게끔 만드는 것과, M 키를 눌렀을 때 전체 Map이 보이게끔 UI를 만들면 좋을 것 같다.
스폰 매니저
생성하고 싶은 위치에 Empty Object들을 만들어서 Script를 통해서 해당 Object의 Position 값을 받아와서 PreFabs에 있는 Object를 생성하는 방식으로 만들었다.
public class SpawnPizza : MonoBehaviour
{
public List<GameObject> SapwnTransforms;
public GameObject SpawnEffect;
private int randomIndex;
private void Start()
{
randomIndex = Random.Range(0, SapwnTransforms.Count);
Spawn();
}
private void Spawn()
{
GameObject newspawn;
newspawn = Instantiate(SpawnEffect);
newspawn.GetComponent<Transform>().position = SapwnTransforms[randomIndex].GetComponent<Transform>().position;
}
}
- 4가지 위치 중 한 곳에 랜덤으로 생성할 때
private void SpawnWS()
{
int count = 0;
while (true)
{
randomIndex = Random.Range(0, WsRandomSpawn.Count);
GameObject newspawn;
if (count == 2)
newspawn = Instantiate(WsObject[0]);
else
newspawn = Instantiate(WsObject[1]);
newspawn.GetComponent<Transform>().position = WsRandomSpawn[randomIndex].GetComponent<Transform>().position;
WsRandomSpawn.RemoveAt(randomIndex);
count += 1;
if (WsRandomSpawn.Count == 0)
break;
}
}
- 4가지 위치 중 한 곳에만 다른 Object를 생성할 때
우선 생각나는대로 막 적어놔서 리팩토링을 해야될 것 같다.
MiniMap 밖에서 표시돼야 될 Object들을 MiniMap 끝 쪽에 보이게끔 만드는 것은 찾아봐도 나오지 않는데 어떻게 만들어야 될지 의문이다.
'내배켐 Unity TIL' 카테고리의 다른 글
Unity 47일차 TIL - Unity InputSystem (0) | 2024.06.18 |
---|---|
Unity 41일차 TIL - 팀 프로젝트 2 (마무리) (0) | 2024.06.10 |
Unity 29일차 TIL - Unity 팀 프로젝트 6 마무리 (0) | 2024.05.24 |
Unity 28일차 TIL - Unity 팀 프로젝트 5 (RigidBody Material(Bounce)) (0) | 2024.05.24 |
Unity 27일차 TIL - Unity 팀 프로젝트 4 (RigidBody 2D) (0) | 2024.05.24 |