Unity_기초

Unity_기초_드래곤플라이트비슷한게임만들기_적 스포너

위한신 2024. 5. 1. 18:11

 

일단 empty opject 를 만들어주고, 화면 밖에서 쓰래기들을 소환시켜야 한다. 

스크립트를 적어 주는데, 일단은 5개의 쓰래기들이 스포너에서 생성되서 정해진 위치에 놓여져야 하기 때문에

배열을 만들어서 그 위치 값을 적어주는게 필요하다.  

 

 private float [] arrPoX = { -2.2f, -1.1f, 0f, 1.1f, 2.2f};

 

그리고 저번 시간에 7가지의 쓰래기들을 만들어 놨기 때문에 어떤 쓰래기가 생성될 것인지 그 쓰래기들의 파일을 넣어줘야 한다. 그래서

[SerializeField]

를 이용해서 유니티 안에서 직접 연결될 수 있도록 하자.  

 

 

새롭게 enemy를 정의할 수 있는 창이 생겼다.  

여기에 쓰래기들을 넣어주자. 

 

 

다음은 다시 코드로 돌아가서, 반복문을 사용해서 5개의 위치 값을 넣어 계속해서 쓰래기들이 고정된 x좌표에서 생성되도록 해야한다. 

 먼저 위에서 배열로 정의한 x 값들을 spawn enemy 안에 전달 받도록 하자. 

(float posX, int index(enemies 라는 배열에서 몇 번째 요소의 적을 가져올 것인지)) { 

 처음에 객체가 생성되는 위치를 반영, = (x,y,z 값)  x값은 5개의 배열에서 차례로 값을 가져오고, y 값은 스포너 기준으로 바꿔준다. 

 void SpawnEnemy(float posX, int index) {
        Vector3 spawnPos = new Vector3(posX,transform.position.y, transform.position.z );
       
    }
   

 

 

 그 다음에는 플레이어코드에서 탄환을 발사할 때 사용되었던 코드를 가져와 사용한다.

 

  if(Time.time - lastShotTime > shootInterval) {
            Instantiate(wepon, shootTransform.position, Quaternion.identity);
            lastShotTime = Time.time;
       }

를 

 Instantiate(enemies[index], spawnPos, Quaternion.identity);

로 바꿔주자. 

위의 코드와 작동 방식은 같다. enemies 에 넣어놓은 7가지 적들 중에서 하나를 뽑아와 생성한다. 생성하는 위치는 위에서 정의한 spawnPos  에서 가져온다. 그 뒤에 회전 여부를 묻는 뭐시기를 처리하면 된다. 

 

그 다음에는 이제 만든 메소드들을 바탕으로 

본격적으로 적들을 생성해볼 차례다.

 

위쪽의 Start 는 시작할 때 한 번만 실행되는 코드다. 

저번에 사용했을 때는, 탄환이 무한정생성되지 않도록 사라지는 타이머 역할을 했다.

 

SpawnEnemy(arrPoX[0])

스폰 에너미가 뭘 불러올지는 위의 위치 배열에서 가져와서 쓰면 된다. 그 값은 0에서부터 4까지 5개의 배열 안을 돌기 때문에 0으로 시작 지점을 잡아주자. 

 

그렇다면 이번에는 소환할 쓰래기들을 정해야 하는데 7가지가 있으니까 0~6까지 의 종류를 정해야한다. 

우리는 랜덤으로 뽑고 싶으므로 랜덤 코드의 도움을 받을 수 있다.

 

  int index = Random.Range(0,enemies.Length);

인덱스라는 값을 설정하고, 그 값은 범위 내에서 랜덤으로 정해진다. 그 범위를 뒤에 정의하는데,

시작 지점에서부터 enemies 배열이 가진 길이, 즉 0~6 까지라고 한다면, 배열의 길이는 7이 되는 것이다. 그런데 이 부분은 마지막 7을 포함해서 읽지는 않기 때문에 0에서부터 7 직전인 6까지 우리가 원하는 범위가 된다. 

 

게임을 실행해 보면, 하나의 위치에서 각기 다른 쓰래기들이 랜덤하게 떨어지는 것을 볼 수 있다.

왜냐하면 지금 쓰래기들의 배열에서 index 값은 랜덤하게 받아오도록 반복문을 만들었지만, 위치 값은 아직이기 때문이다. 

 

그러기 위해서는 arrPosX 의 값을 아래의 float posX 값 안에 넣어줄 필요가 있다. foreach를 사용해서 넣을 수 있다.

foreach(float posX in arrPoX) []

이러면 in을 사이에 두고, 그 뒤에있는 배열에서, 앞에있는 값으로 값을 적용시킬 수 있다. 정확히는 

그 값을 적용하고, 뒤에 있는 (지금 위에는 대괄호로 되어 있는데) 중괄호에 들어간 코드를 활성화 하고 다시 arrPoX 값을 하나 바꾸고 다시 적용하는 반복문이 되는 것이다.  

 

foreach(float posX in arrPoX) {
            int index = Random.Range(0,enemies.Length);
        SpawnEnemy(posX,index);

앞서 만든 SpawnEnemy 랜덤 배열을 반복문 안에 집어 넣으면, 

방금은 바뀌지 않았던 쓰래기들의 x 값이 시시각각 바뀌면서 들어간다.  

 

실행까지 해 보면 동일한 속도로 한 무리의 쓰래기들이 각기 다른 형태로 내려오는 것을 볼 수 있다.