본문 바로가기

코딩 공부/Unity C#

프리팹을 활용한 오브젝트 스폰

메인캠의 컴포넌트 목록

 

부딪히면 통통 튀는 곰돌이가 계속 생성되는 프로그램을 만들어보자

public class TeddyBearSpawner : MonoBehaviour
{
	// needed for spawning
	[SerializeField]
	GameObject prefabTeddyBear;

	// saved for efficiency
	[SerializeField]
	Sprite teddyBearSprite0;
	[SerializeField]
	Sprite teddyBearSprite1;
	[SerializeField]
	Sprite teddyBearSprite2;

- [SerializeField] 필드를 공개하지 않으면서 인스펙터에서 필드를 볼 수 있게 한다

	// spawn control
	const float MinSpawnDelay = 1;
	const float MaxSpawnDelay = 2;
	Timer spawnTimer;

	// spawn location support
	const int SpawnBorderSize = 100;
	int minSpawnX;
	int maxSpawnX;
	int minSpawnY;
	int maxSpawnY;

	/// <summary>
	/// Start is called before the first frame update
	/// </summary>
	void Start()
    {
		// save spawn boundaries for efficiency
		minSpawnX = SpawnBorderSize;
		maxSpawnX = Screen.width - SpawnBorderSize;
		minSpawnY = SpawnBorderSize;
		maxSpawnY = Screen.height - SpawnBorderSize;

		// create and start timer
		spawnTimer = gameObject.AddComponent<Timer>();
		spawnTimer.Duration = Random.Range(MinSpawnDelay, MaxSpawnDelay);
		spawnTimer.Run();
	}
    
        /// <summary>
    /// Update is called once per frame
    /// </summary>
    void Update()
    {
		// check for time to spawn a new teddy bear
		if (spawnTimer.Finished)
        {
			SpawnBear();

			// change spawn timer duration and restart
			spawnTimer.Duration = Random.Range(MinSpawnDelay, MaxSpawnDelay);
			spawnTimer.Run();
		}
	}

- 곰돌이가 생성되는 범위와 생성되는 딜레이 시간(랜덤)을 정한다

 

 

SpawBear 메소드(곰돌이를 무작위 위치에 생성하는 함수)

	/// <summary>
	/// Spawns a new teddy bear at a random location
	/// </summary>
	void SpawnBear()
	{
		// generate random location and create new teddy bear
		Vector3 location = new Vector3(Random.Range(minSpawnX, maxSpawnX),
			Random.Range(minSpawnY, maxSpawnY),
			-Camera.main.transform.position.z);
		Vector3 worldLocation = Camera.main.ScreenToWorldPoint(location);
		GameObject teddyBear = Instantiate(prefabTeddyBear) as GameObject;
		teddyBear.transform.position = worldLocation;

- 오브젝트를 카메라의 앞쪽에 위치시키려면 카메라의 z 위치의 반대 부호를 사용해야 한다

- location은 화면 좌표 상에서 어디에 오브젝트가 설치될지 정해졌음.

 

- Vector3 worldLocation = Camera.main.ScreenToWorldPoint(location);

2D 좌표를 3D 좌표로 바꾼다. 실제 게임 세계에서 오브젝트를 배치할 때는 3D에서 해야하기 때문이다.

 

-GameObject teddyBear = Instantiate(prefabTeddyBear) as GameObject;

프리팹을 인스턴스화(객체화)하여 게임 오브젝트 teddyBear에 저장한다.

- 저장된 데임 오브젝트 teddtBear 위치를 3D세계(실제세계)로 설정하여 배치한다.

		// set random sprite for new teddy bear
		SpriteRenderer spriteRenderer = teddyBear.GetComponent<SpriteRenderer>();
		int spriteNumber = Random.Range(0, 3);
		if (spriteNumber == 0)
        {
			spriteRenderer.sprite = teddyBearSprite0;
		}
        else if (spriteNumber == 1)
        {
			spriteRenderer.sprite = teddyBearSprite1;
		}
        else
        {
			spriteRenderer.sprite = teddyBearSprite2;
		}

- 곰의 스프라이트를 랜덤으로 고르는 기능을 구현한 부분

- teddyBear 오브젝트의 스프라이트 렌더러(SpriteRenderer) 컴포넌트를 가져온다

 

- 랜덤한 상수 0, 1, 2를 변수에 저장하여 변수에 따라 스프라이트를 가져온다

'코딩 공부 > Unity C#' 카테고리의 다른 글

오브젝트 폭발시키기  (0) 2024.06.20
태그 기반 오브젝트 파괴  (0) 2024.06.19
타이머 구성 요소  (0) 2024.06.17
If 와 Switch문 연습  (0) 2024.06.14
게임 오브젝트 점프  (1) 2024.06.14