스파르타 게임개발종합반(Unity)/사전캠프 공부 기록

[Unity/2D] 빗방울 랜덤 생성하기 - Random.Range, renderer.color

테크러너 2024. 3. 28.

이전편

2024.03.28 - [Unity/2D] - [Unity/2D] 중력, 충돌을 이용하여 빗방울 구현하기 - Rigidbody, Collider, OnCollisionEnter, Destroy

 

랜덤한 x, y 위치값 설정

Rain.cs

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

        // 랜덤한 x, y값으로 위치 설정(빗방울 랜덤 생성)
        transform.position = new Vector3(x, y, 0);
    }
 

Random.Range(최소값, 최대값); 을 통해 랜덤하게 값을 지정할 수 있습니다.

 

아래와 같이 랜덤 값을 설정했습니다.

가로 (-2.4f ~ 2.4f) 사이

세로 (3.0f ~ 5.0f) 사이

 

 

랜덤한 빗방울 타입 설정

    float size = 1.0f; // 빗방울 크기
    int score = 1; // 빗방울 점수값

    SpriteRenderer renderer; // 빗방울 색상변경을 위한 SpriteRenderer타입 변수

 

우선 위와 같이 빗방울의 크기, 점수값, 색상을 변경하기 위한 변수들을 선언했습니다.

 

Start() 부분의 전체적인 코드는 아래와 같습니다. 하나씩 살펴보겠습니다.

    void Start()
    {
        renderer = GetComponent<SpriteRenderer>(); // 빗방울 색상변경을 위한 SpriteRenderer 컴포넌트 정보 저장

        // Range(최소값, 최대값)
        float x = Random.Range(-2.4f, 2.4f); // x의 값 (-2.4f ~ 2.4f) 사이
        float y = Random.Range(3.0f, 5.0f); // y의 값 (3.0f ~ 5.0f) 사이

        // 랜덤한 x, y값으로 위치 설정(빗방울 랜덤 생성)
        transform.position = new Vector3(x, y, 0);

        // 빗방울 타입 랜덤 지정
        int type = Random.Range(1, 4); // 1, 2, 3 중에 랜덤 생성

        // 각각의 조건문들이 연관되어 있으니 else if로 적어주기
        // 빗방울 타입별 설정
        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);
        }
        
        // 랜덤 크기값으로 빗방울 크기 지정
        transform.localScale = new Vector3(size, size, 0);
    }
 
  • int 일 때
int type = Random.Range(1, 4); // 1, 2, 3 중에 랜덤 생성
 
  • float 일 때
float x = Random.Range(-2.4f, 2.4f);
 

int 일 때 1~3까지 랜덤 생성하기 위해 최대값을 4로 설정한 것을 보고 조금 의아할 수도 있습니다.

Random.Range 함수는 두 번째 인자로 지정한 값 미만의 범위에서 랜덤한 값을 반환합니다.

 

그렇기 때문에 int 일 때 4미만은 3까지니까 최대값이 4로 설정된 것입니다.

그리고 float 일 때 2.4f미만으로 값이 나와야하니까 2.4f는 나오지 않겠죠?

2.4f까지 나오게 하고 싶다면 조금 더 높은 값이 2.5f 등으로 설정해주어야 합니다.

 

renderer.color = new Color(100 / 255f, 100 / 255f, 1f, 1f);
 

Color 값은 float으로 지정해줄 수 있습니다.

100의 값을 넣고 싶다면 100 / 255f 값으로 넣어주어야 합니다.

 

color 값을 설정할 때 255f로 나눠주는 이유

더보기

Unity의 Color 클래스에서 각 색상 값은 0부터 1 사이의 값으로 표현되기 때문입니다.

예를 들어, 빨간색을 표현할 때 (1, 0, 0, 1)과 같이 각각 빨간색, 초록색, 파란색, 알파값을 0부터 1 사이의 값으로 표현합니다.

이때, RGB 값은 각각 0부터 1 사이의 값으로 표현되어야 하기 때문에 0부터 255까지의 값을 0부터 1 사이의 값으로 변환해주기 위해 255f로 나눠주는 것입니다.

 

 

결과

 

 

 

다음편

2024.03.28 - [Unity/2D] - [Unity/2D] 빗방울 프리팹 반복 생성 - Instantiate(), InvokeRepeating()

 

모바일 화면 크기 설정이 궁금하다면?

2024.03.28 - [Unity/기타] - [Unity] 모바일 크기 설정 / 디스플레이 설정

반응형

댓글