유니티/닷지(3D 탄막 슈팅 게임)

닷지(4) - 탄알 생성기 제작

무직백수취업준비생 2021. 8. 4. 07:38
728x90
반응형

원기둥 오브젝트를 생성하고 Bullet Spawner로 이름을 변경합니다.

 

위치는 (8, 1, 0)으로 설정해줍니다.

 

에셋의 Bullet Color 머터리얼을 씬 창의 원기둥 오브젝트로 드래그&드롭합니다.

 

탄알 생성기 스크립트를 작성합니다.

 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class BulletSpawner : MonoBehaviour
{
    public GameObject bulletPrefab; //생성할 탄알의 원본 프리팹
    public float spawnRateMin = 0.5f; //최소 생성 주기
    public float spawnRateMax = 3f; //최대 생성 주기

    private Transform target; //발사할 대상
    private float spawnRate; //생성 주기
    private float timeAfterSpawn; //최근 생성 시점에서 지난 시간
 
    void Start()
    {
        //최근 생성 이후의 누적 시간을 0으로 초기화
        timeAfterSpawn = 0f;
        //탄알 생성 간격을 spawnRateMin과 spawnRateMax 사이에서 랜덤 지정
        spawnRate = Random.Range(spawnRateMin, spawnRateMax);
        //PlayerController 컴포넌트를 가진 게임 오브젝트를 찾아 조준 대상으로 설정
        target = FindObjectOfType<PlayerController>().transform;
        
    }

    void Update()
    {
        //timeAfterSpawn 갱신
        timeAfterSpawn += Time.deltaTime;

        //최근 생성 시점에서부터 누적된 시간이 생성 주기보다 크거나 같다면
        if (timeAfterSpawn >= spawnRate)
        {
            //누적된 시간을 리셋
            timeAfterSpawn = 0f;

            //bulletPrefab의 복제본을 transform.position 위치와 transform.rotation 회전으로 생성
            GameObject bullet = Instantiate(bulletPrefab, transform.position, transform.rotation);
            //생성된 bullet 게임 오브젝트의 정면 방향이 target을 향하도록 회전
            bullet.transform.LookAt(target);
            //다음번 생성 간격을 spawnRateMin, spawnRateMax 사이에 서 랜덤 지정
            spawnRate = Random.Range(spawnRateMin, spawnRateMax);
        }
    }
}

오브젝트에 스크립트를 드롭하고 Bullet Prefab 필드에 Bullet 프리팹을 드롭합니다.

 

정상 동작하는걸 확인합니다.

 

탄알 생성기도 프리팹을 생성하고, 오브젝트를 세개 더 만든 뒤 위치를 설정해줍니다.

 

 

정상적으로 동작하는것을 확인합니다.

728x90
반응형