GameDevelop/Unity기초쌓기

[Unity] 빗방울 랜덤생성 Random.Range

도도돋치 2025. 3. 27. 23:57
Contents 접기
728x90

빗방울 랜덤생성

랜덤생성 범위값설정은 아래와 같이 설정

X값( -2.4f ~ +2.4 )

Y값( 3.0f ~ 5.0f )

 

void Start()
{
    //Range(최소값, 최대값)
    float x = Random.Range(-2.4f, 2.4f);
    float y = Random.Range(3.0f, 5.0f);

    transform.position = new Vector3(x, y, 0);
}

 

📌Rain의 시작 위치를 Random함수를 통해서 랜덤하게 해주고, 그범위를 Range로 설정해준다.

📌랜덤하게 생성된 각각의 값을 실수형 변수 x, y에 담아주고 transform postion의 x,y값에 접근하기 위해 Vector를 사용하여 설정해준다.

 

 

다양한 크기의 빗방울 생성

큰빗방울(타입1), 중간사이즈 빗방울(타입2), 작은사이즈 빗방울(타입3)을 생성해보자.

 

타입을 랜덤 설정 ( 최솟값 1, 최댓값 3 )
 int type = Random.Range(1, 4);

 

📌 정수값을 넣어주면 정수만 추출됨

📌 단, 최댓값은 포함이 되지않는다. 따라서 만약 3을 최대로 나오게 하고 싶다면 4로 설정해야한다. 


각각의 사이즈, 색깔, 점수를 세팅
float size = 1.0f;
int score = 1;

사이즈랑 점수는 변수로 빼서 설정해주었다.


SpriteRenderer renderer;

void Start()
{
    //Sprite Renderer컴포넌트를 GetComponent를 통해 가져온다
    //스크립트와 같은 자리에 있어야함
    renderer = GetComponent<SpriteRenderer>();

    if(type==1)
    {
        renderer.color = new Color(100 / 255f, 100 / 255f, 1f, 1f);
    }
}

Color값을 불러오기 위해 GetComponet를 사용한다

 

if(type==1)
{
    size = 0.8f;
    score = 1;
    renderer.color = new Color(100 / 255f, 100 / 255f, 1f, 1f);
}
else if (type == 2)
{
    size = 1.0f;
    score = 2;
    renderer.color = new Color(130 / 255f, 130 / 255f, 1f, 1f);
}
else if (type == 3)
{
    size = 1.2f;
    score = 3;
    renderer.color = new Color(150 / 255f, 150 / 255f, 1f, 1f);
}

📌 타입별로 size, score, color를 설정한다.

📌 Color값은 float값이 들어가는데, color값에 150을 넣고 싶다면 150/255f 값을 넣어야한다.

 

전체코드

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

public class Rain : MonoBehaviour
{
    float size = 1.0f;
    int score = 1;

    //색깔설정은 SpriteRender에 있어서 이를 가져오기 위함 
    SpriteRenderer renderer;

    // Start is called before the first frame update
    void Start()
    {
        //Sprite Renderer컴포넌트를 GetComponent를 통해 가져온다
        //스크립트와 같은 자리에 있어야함
        renderer = GetComponent<SpriteRenderer>();

        float x = Random.Range(-2.4f, 2.4f);
        float y = Random.Range(3.0f, 5.0f);

        transform.position = new Vector3(x, y, 0);

        //정수값을 넣어주면 정수만 추출됨(최댓값은 포함이 되지않음)
        int type = Random.Range(1, 4);

        if(type==1)
        {
            size = 0.8f;
            score = 1;
            //Color값은 float값이 들어감
            //150을 넣고 싶다면 150/255f 값을 넣어야함
            renderer.color = new Color(100 / 255f, 100 / 255f, 1f, 1f);
        }
        else if (type == 2)
        {
            size = 1.0f;
            score = 2;
            renderer.color = new Color(130 / 255f, 130 / 255f, 1f, 1f);
        }
        else if (type == 3)
        {
            size = 1.2f;
            score = 3;
            renderer.color = new Color(150 / 255f, 150 / 255f, 1f, 1f);
        }

        transform.localScale = new Vector3(size, size, 0);
    }

    // Update is called once per frame
    void Update()
    {
        
    }

    //충돌이벤트 발생시
    private void OnCollisionEnter2D(Collision2D collision)
    {
        //collision에는 충돌하는 물체의 정보가 들어있다.
        //즉, Rain이 Ground에 부딪히면 부딪힌 Ground 관련된 게임 오브젝트 정보들이 들어있다
        if(collision.gameObject.CompareTag("Ground"))
        {
            //gameObject는 Rain스크립트가 붙어있는 오브젝트(Rain)자체를 가리킴
            Destroy(gameObject);
        }
    }
}

 

아래와 같이 각각 실행마다 다른 랜덤한 위치에서 랜덤한 크기로, 색이 다른 빗방울이 생성되는 것을 확인할 수 있다. 

728x90