유니티 3D게임 쿼드뷰 17

유니티 3D게임 쿼드뷰 17

Summary 유니티 3D 게임 개발에 관한 내용으로, 게임 시작 및 종료 기능 구현, 몬스터 소환 로직, 네비게이션 타겟 설정 방법, 씬 관리 함수 사용법, 버튼 클릭 방지 설정 등이 포함되어 있습니다.


🎥 동영상 보기

🔥 게임 스타트존 제작 구현 다음과같은 코드를 구현하면, 상점스테이지와 게임스테이지를 나눌 수 있음

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
//GameManager.cs

public GameObject itemShop;
public GameObject weaponShop;
public GameObject startZone;

public void GameStart()
{
    //메뉴 관련 오브젝트 비활성화
    menuCam.SetActive(false);
    gameCam.SetActive(true);

    menuPanel.SetActive(false);
    gamePanel.SetActive(true);

    player.gameObject.SetActive(true); //비활성화해뒀던 플레이어 오브젝트 활성화
}

//스테이지 시작, 종료 함수 생성
public void StageStart()
{
    //전투가 시작되면 상점 및 게임스타트 영역을 비활성화시킵니다
    itemShop.SetActive(false);
    weaponShop.SetActive(false);
    startZone.SetActive(false);
    isBattle = true; //전투상태 ON
    StartCoroutine(InBattle());
}

//코루틴으로 전투 상태 구현
IEnumerator InBattle()
{
    yield return new WaitForSeconds(5); //n초 동안 전투상태
    StageEnd(); //전투가 끝나면 스테이지 종료 함수 호출
}

public void StageEnd()
{
    //플레이어를 시작 위치로 초기화
    player.transform.position = Vector3.up * 0.8f;
    //전투가 종료되면 상점 및 게임스타트 영역을 활성화시킵니다
    itemShop.SetActive(true);
    weaponShop.SetActive(true);
    startZone.SetActive(true);

    isBattle = false;
    stage++; //스테이지를 한단계 올림
}

🔥 몬스터 프리팹 보완 랜덤값을 몬스터 소환 수와 몬스터 소환 위치에 넣는다 랜덤한위치에 랜덤한수의 몬스터가 리스폰함

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28

//GameManager.cs

//몬스터 리스폰에 필요한 변수들 선언
public Transform[] enemyZones;
public GameObject[] enemies;
public List<int> enemyList; //몬스터가 얼마나 소환될것인지 리스트 작성

void Awake() 
{
    //몬스터 생성 정보를 불러옴
    enemyList = new List<int>();
}

//코루틴으로 전투 상태 구현
IEnumerator InBattle()
{
    while(enemyList.Count < 0)
    {
        //소환하는곳이 4곳이니 랜덤값 0~4 설정
        //게임오브젝트 변수를 따로 만들어서 인스턴트를 생성함
        //인스턴트 내용 : 인스턴트한다(몬스터프리팹[몹종류들[n]],소환될장소[].위치,소환될장소[].회전값)
        int ranZone = Random.Range(0,4);
        GameObject instantEnemy = Instantiate(enemies[enemyList[0]]
                                            ,enemyZones[ranZone].position
                                            ,enemyZones[ranZone].rotation);
    }
}

🔥 프리팹으로 저장한 오브젝트에 네비게이션 target을 저장하는 방법은 바로 public으로설정한 변수에 타겟을 넣어주는거다.

🔥 **SceneManagemen 함수를 쓰려면 라이브러리를 따로 불러와야함..

그 후에 ReStart Button에서도 On Click() 활성화시켜줘야합니다**

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
//GameManager.cs

using UnityEngine.SceneManagement; //Scene 관련 함수를 사용하려면 해당 라이브러리 활성화

//게임 오버 후, 메인 타이틀로 돌아가기 위해 재시작 함수 생성
public void Restart()
{
    //씬이 하나밖에 없기 때문에 그냥 0눌러주면 된다
    SceneManager.LoadScene(0);
}

Image

🔥 버튼 네비게이션을 None으로 해줘야 버튼으로 클릭이 안됩니다 Image

💬 댓글

GitHub 계정으로 로그인하여 댓글을 남겨보세요. GitHub 로그인

🔧 댓글 시스템 설정이 필요합니다

GitHub Discussions 기반 댓글 시스템을 활성화하려면:

  1. Giscus 설정 페이지에서 설정 생성
  2. GISCUS_SETUP_GUIDE.md 파일의 안내를 따라 설정 완료
  3. Repository의 Discussions 기능 활성화

Repository 관리자만 설정할 수 있습니다. 설정이 완료되면 모든 방문자가 댓글을 남길 수 있습니다.

목차