본문 바로가기
관/핫한 닷지 프로젝트 게임개발

닷지 게임제작 기초 12(닷지 총알생성기 변수선언 편).

by 4차원 박스 2020. 7. 26.

닷지는 미친 듯이 달려오는 총알들을

극도의 집중력을 발휘하여 최대한 생존하는 타임어택 게임이다.

 

이제 게임의 핵심인 총알이 끊임없이 나오는 총알생성기를 다룬다.

 

중요한건 기능이므로 오브젝트는 뭐가 되었든 대충 눈에만 띄게 해준다.

그동안 다루어 온게 있으므로 각자 취향껏 만들자.

원하는 기능은 다음과 같다.

1 랜덤시간 간격으로 총알 계속 생성

2 Bullet 프리팹을 원본으로 탄알을 생성

3 플레이어를 향해 총알생성 (즉 유도 총알이다.)

  

대충 오브젝트 하나 만들어서 배치해주자

핵심은 스크립트에서 구현한다.

 

이제 스크립트를 만든다.

Bullet Spawner로 스크립트 이름을 만든다. 

이번 포스팅은 변수 선언까지 이해하자

 

다음 변수를 전역변수로 선언한다.

1. 생성할 탄알의 원본

2. 탄알을 발사하여 맞출 대상

3. 탄알을 생성하는 시간 간격

 

public GameObject bulletPrefab;

public float spawnRateMin = 0.5f; //생성최소주기

public float spawnRateMax = 3f; //생성 최대주기

 

Transform target; //목표타겟

float spawnRate; //생성주기

float timeAfterSpawn; //최근 생성 시점에서 지난 시간

 

이렇게 해준다.

spawnRateMin = 새 총알 생성하는데 걸리는 시간 최솟값

spawnRateMax = 새 총알 생성하는데 걸리는 시간 최대값

target = 조준할 대상 게임 오브젝트의 트랜스폼 컴포넌트

spawnRate = 다음 총알을 생상할 때까지 기다릴 시간. spawnRateMinspawnRateMax 사이의 랜덤값으로 설정됨.

timeAfterSpawn = 마지막 총알 생성 시점부터 흐른 시간을 표시하는 '타이머'

 

이제 Start메서드로 시간에 관한 변수

총알의 목표가 될 겜오브젴의 트랜스폼 컴포넌트를 가져와 초기화 한다.

 

void Start()

{

timeAfterSpawn = 0f;

spawnRate = Random.Range(spawnRateMin, spawnRateMax);

target = FindObjectOfType<PlayerController>().transform;

}

이렇게 해준다.

 

<Random.Range() 메서드>

인자(argument)로 최솟,최댓값을 순서대로 받고

그사이의 랜덤한 숫자를 출력하는 유니티 내장 메서드임

floatint 인자를 받을때 동작이 다름.

 

target = FindObjectOfType<PlayerController>().transform;

탄알이 날아갈 대상, 즉 플레이어의 트랜스폼컴포넌트가 할당되어야 한다.

 

<FindObjectOfType()메서드>

target을 퍼블릭으로 선언하고 유니티 인스펙터 창에서 플레이어의 트랜스폼 컴포넌트를 찾아서 드래그드롭

하는 원시적인 방법을 한줄로 해결해준다.

<제네릭>에 어떤 타입을 명시하면 씬에 있는 모든 오브젝트를 검색해서

해당 타입의 컴포넌트를 가져온다.

따라서 FindObjectOfType<PlayerController>()를 사용하여 씬에서 PlayerController 컴포넌트를

찾아내고 이 컴포넌트를 가진 오브젝트의 트랜스폼 컴포넌트를 transform으로 접근하여

target에 할당함.

 

탄알 스크립트에서는 OnTriggerEnter 함수에서 지원하는 other변수를 사용하여 getcomponent

접근하였지만

여기서는 그러한 방법없이 간단하게 한줄로 접근하는 방식을 사용하였다.

 

FindObjectOfType()메서드 는 씬에 존재하는 모든 오브젝트를 검색한다

즉 처리 비용이 크기에 Start()메서드 처럼 초기에 한번만 실행되는 메서드 에서만 사용해야 한다.

만일 업데이트에서 사용하면 아~주 느려질수 있다.

 

FindObjectOfType() FindObjectsOfType()

‘s’ 하나 붙인것으로 달라지는 메서드 이다.

후자는 해당 타입의 컴포넌트 를 모두 찾아 배열로 반환한다.

 

다음 포스팅은 일정 주기로 총알 생성을 구현한다.

댓글