부딪히면 통통 튀는 곰돌이가 계속 생성되는 프로그램을 만들어보자
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 |