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

닷지 게임제작 기초 13(닷지 시간 측정, 유도기능, 오브젝트 복제 메서드 편).

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

이제 총알 생성기의 기능을 본격적으로 구현한다.

다소 복잡할 수 있으므로 만든 코드를 보고 차근이 따라하며 읽는걸 추천한다!

다음이 만든 코드이다.


 

Update() 메서드에서 총알을 생성한다.

제한 시간을 두지 않으면 1초에 60발씩 쉴새없이 생성되므로

탄알 생성한 시점에서 누적된 시간을 저장하는 변수가 반드시 필요하다.

 

timeAfterSpawn 값은 시간의 흐름에 맞춰 계속 증가한다.

주기적으로 이를 체크해서 timeAfterSpawn이 총알 생성 주기보다 커진 순간

총알을 생성하고 timeAfterSpawn0으로 리셋 시킨다.

이때 필요한것이 Update()메서드의 실행 시간 간격이다.

 

Update()는 프레임마다 실행된다.

이 실행 '시간 간격'Update()가 실행될 때마다 어떤 변수에 누적하면

특정 시점에서 시간이 얼마만큼 흘렀는지 표현가능하다.

 

<Time.deltaTime 메서드>

초당 프레임은 각자의 컴사양에 따라 다르다. 따라서 직전 Update() 실행과

현재 Update() 실행 사이의 간격은 고정되어있지 않다.

 

Update() 실행 사이의 시간 간격을 알기위해 내장변수 Time.deltaTime를 사용한다

Time.deltaTime에는 이전 프레임과 현재 프레임 사이의 시간 간격이 자동으로 할당된다.

1초에 60프레임에서의 Time.deltaTime값은 1/60이다

120프레임이면 1/120이다.

Update()Time.deltaTime값을 계속 누적시킴으로 특정시점 으로 부터 시간이 얼마나 흘렀는지

표현할 수 있다.

<Instantiate()메서드>

총알을 복제할때 사용할 메서드 이다.

유니티상에서 게임도중 실시간으로 겜옵젴을 복제할때 사용한다.

 

Instantiate(원본);

방식으로 사용한다.

 

Instantiate()는 인스턴스화로 이해하자. (프랜차이즈가 2호 3호점을 계속 내는것을 떠올리면 된다).

 

현재 Bullet 프리팹을 미리 만들어 두었으므로

이를 나중에 bulletPrefab변수에 할당할 것이다.

 

따라서 Instantiate()bulletPrefab을 입력하고 실행하면

실시간으로 프리팹을 복제한 새로운 Bullet 오브젝트가 생성된다.

 

여기서 복제본을 생성할 위치와 회전을 인자(argument)로 받을수 있다.

Instantiate(원본,위치,회전);

이렇게 사용할것이다.

 

여기서 위치와 회전에는 우리가 스크립트를 집어넣을 오브젝트의 현 위치와 회전을 넣어둔다

transform.position

transform.rotation

으로 한다.

  

Instantiate() 메서드는 복제본을 생성하고, 동시에 생성된 복제본을 메서드 출력으로 반환한다.

반환된 복제본을 = 으로 받아올 수 있다.

GameObject bullet = Instantiate(bulletPrefab, transform.position, transform.rotation);

받아온 복제본을 코드상에서 수정가능하게 한것이다.

그후 bullet.transform.LookAt(target); 에서 좀더 수정을 해준것이다.

 

<LookAt() 메서드>

입력으로 다른 겜옵젴의 트랜스폼을 받는다(인자 argument)

그후 입력받은 트랜스폼의 게임오브젴을 바라보도록 자신의 트랜스폼을 회전시킨다.

랜덤 만든것은 Start에서 한번 만든거로 쭉이어진다 생각하지말고

업데이트에서 총알을 계속 만들게 되므로 시간설정 랜덤으로 하는것을 계속

초기화 해줘야 한다.

spawnRate = Random.Range(spawnRateMin, spawnRateMax); 이걸 해야 랜덤을

다시 랜덤하게 계속 할 수 있는 것이다.

 

 

댓글