학습 주제

랜덤으로 떨어지는 빗방울 만들기

학습 목표는 무엇입니까?

랜덤한 위치와 크기를 가진 오브젝트로 다양성을 주는 방법 알아내기

학습 내용

학습 내용을 작성해주세요

  • GetComponent를 잊지 말자
    • 에셋 내 컴포넌트를 가져오기 위해서는 두 가지가 필요하다
      • 가져올 컴포넌트를 메인 함수에서 선언하기
      • 작동 함수에서 GetComponent로 가져오기
      public class Rain : MonoBehaviour
      {
          ... 중략
          
          SpriteRenderer renderer;
          
          void Start()
          {
              renderer = GetComponent<SpriteRenderer>();
      
      
  • 랜덤 값을 만드는 Random.Range()
    • Random.Range()는 시작 값, 끝 값으로 조정함
    • 정수의 경우 시작 값, 끝 값 -1이 됨
    float x = Random.Range(-2.4f, 2.4f);
    float y = Random.Range(3.0f, 5.0f);
    
    int type = Random.Range(1, 4);
    
  • Sprite Renderer에서 색깔을 조정할 수 있음
    • renderer.Color 속성으로 색 값을 변경 가능
    • new Color(c,m,y,k) 값을 넣어 속성 지정
    • 숫자 값은 number / 255f 형식으로 지정 가능
    renderer.color = new Color(50 / 255f, 50 / 255f, 1f, 1f);
    
  • transform 속성에서 위치와 크기를 바꾸자
    • transform.position으로 위치 변경 가능
    • float x = Random.Range(-2.4f, 2.4f); float y = Random.Range(3.0f, 5.0f); transform.position = new Vector3(x, y);
    • transform.localScale로 크기 변경 가능
    • else if (type == 3) { size = 1.2f; score = 1; renderer.color = new Color(150 / 255f, 150 / 255f, 1f, 1f); } transform.localScale = new Vector3(size, size, 0);
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Rain : MonoBehaviour
{
    // 빗방울 기본 사이즈, 점수 설정
    float size = 1.0f;
    int score = 1;

    SpriteRenderer renderer;
    // Start is called before the first frame update
    void Start()
    {
        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);

        int type = Random.Range(1, 4);
        Debug.Log($"타입 값은 --> {type}");
        if (type == 1)
        {
            size = 0.8f;
            score = 3;
            renderer.color = new Color(50 / 255f, 50 / 255f, 1f, 1f);
        }
        else if (type == 2)
        {
            size = 1.0f;
            score = 2;
            renderer.color = new Color(100 / 255f, 100 / 255f, 1f, 1f);
        }
        else if (type == 3)
        {
            size = 1.2f;
            score = 1;
            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)
    {
        if (collision.gameObject.CompareTag("Ground"))
        {
            Destroy(this.gameObject);
        }
    }
}

+ Recent posts