Unity Study (1)

happykuma·2023년 4월 2일
0
post-thumbnail

캐릭터 움직이기

Start와 Update

  • start : 오브젝트가 생성될 때 실행할 것
  • update : 프레임마다 호출되어 실행할 것

Script 생성

  • Project 창에서 Assets 하위에 Scripts 폴더 생성 -> Script 폴더 우클릭 -> Create -> C# Script
  • Project 창의 script를 드래그 -> Hierarchy 창의 script를 적용할 오브젝트(rtan)로 끌어오기

르탄이 움직이기

  • 르탄이의 x 값 바꾸기

    float direction = 0.05f
    
    void Update()
    {
    	transform.position += new Vector3(direction, 0, 0);
    }
  • transform : 오브젝트에 할당된 Transform Component

    • Transform : 위치, 회전, 크기를 담고 있는 Component의 정보
  • 르탄이의 실시간 위치 확인

    Debug.Log(transform.position.x);

  • 벽에 부딪힐 때 르탄이가 움직이는 방향 바꾸기 + 이미지 방향 바꾸기

    void Update()
    {
    	if (transform.position.x > 2.8f)
    	{
      		direction = -0.05f;
          	transform.localScale = new Vector3(-1, 1, 1);
      	}
     	if (transform.position.x < -2.8f)
      	{
      		direction = 0.05f;
          	transform.localScale = new Vector3(1, 1, 1);
      	}
      	transform.position += new Vector3(direction, 0, 0);
    }

마우스 클릭 이벤트 추가

float toward = 1.0f;

void Update()
{
	if (Input.GetMouseButtonDown(0))
    {
    	toward *= -1;
        direction *= -1;
    }
    if (transform.position.x > 2.8f)
  	{
    	direction = -0.05f;
        toward = -1.0f;
    }
   	if (transform.position.x < -2.8f)
    {
    	direction = 0.05f;
        toward = 1.0f;
    }
    transform.localScale = new Vector3(toward, 1, 1);
    transform.position += new Vector3(direction, 0, 0);
}



빗방울 만들기

빗방울 오브젝트 생성

  • Hierarchy 창에서 Main Scene 우클릭 -> GameObject -> 2D Object -> Sprites -> Circle

빗방울에 중력 적용하기

  • rain 오브젝트 클릭 후 Inspector 창의 Add Component 클릭 -> Rigidbody 2D 클릭


빗방울이 땅에 닿으면 사라지게 하기

  • rain 오브젝트 Inspector 창에서 Add Component -> Circle Collider 2D
  • ground 오브젝트 Inspector 창에서 Add Component -> Box Collider 2D
  • ground 오브젝트에 tag 값 설정
  • rain 스크립트 생성
    • OnCollisionEnter2D : 다른 Collider에 부딪혔을 때 실행되는 함수
    void OnCollisionEnter2D(Collision2D coll)
    {
    	if (coll.gameObject.tag == "ground")
      {
      	Destroy(gameObject);
      }
    }

빗방울 랜덤하게 생성

  • 빗방울을 랜덤한 위치에 생성

    void Start()
    {
    	float x = Random.Range(-2.7f, 2.7f);
        float y = Random.Range(3f, 5f);
        transform.position = new Vector3(x, y, 0);
    }
  • 크기와 점수가 다양한 빗방울 생성

    • new Color를 할 때, 255f로 나누어서 나눈 값이 항상 소수가 나오게 해야 함
    int type;
    float size;
    int score;
    
    void Start()
    {
    	float x = Random.Range(-2.7f, 2.7f);
        float y = Random.Range(3f, 5f);
        transform.position = new Vector3(x, y, 0);
        
      	type = Random.Range(1, 4); // 1~3까지 중 하나의 랜덤한 값
    
        if (type == 1)
        {
            size = 1.2f;
            score = 3;
            GetComponent<SpriteRenderer>().color = new Color(100 / 255f, 100 / 255f, 255 / 255f, 255 / 255f);
        } else if (type == 2)
        {
            size = 1.0f;
            score = 2;
            GetComponent<SpriteRenderer>().color = new Color(130 / 255f, 130 / 255f, 255 / 255f, 255 / 255f);
        } else if (type == 3)
        {
            size = 0.8f;
            score = 1;
            GetComponent<SpriteRenderer>().color = new Color(150 / 255f, 150 / 255f, 255 / 255f, 255 / 255f);
        }
    }

빗방울 여러개 생성

  • GameManager : 게임 전체를 조율하는 오브젝트

    • 점수, 다시 시작, 광고 보기 등
    • Hierarchy 창의 Main Scene에서 우클릭 -> GameObject -> Create Empty -> gameManager로 이름 설정
    • Scripts 폴더에도 GameManager 이름으로 script 생성
    • GameManager script 드래그해서 오브젝트에 넣어주기
  • 빗방울 복제

    • Project 창의 Assets 하위에 Prefabs 폴더 생성 -> Hierarchy 창에 만든 rain 오브젝트를 드래그 -> Prefabs 폴더로 가져오기 -> Hierarchy 창의 rain 오브젝트는 삭제
  • GameManager script로 rain 오브젝트 가져오기

    public GameObject rain;
    • Hierarchy 창의 gameManager 클릭 -> Project 창에서 rain prefab 드래그 -> Inspector 창의 Rain에 가져오기
  • Instantiate 함수 이용하여 rain 오브젝트 복제하기

    void Start()
    {
    	InvokeRepeating("makeRain", 0.05f);	// 0.05초마다 makeRain 함수를 실행
    }
    
    void makeRain()
    {
    	Instantiate(rain);
    }
profile
난 행복한 고구마야 - ̗̀ෆ⎛˶'ᵕ'˶ ⎞ෆ ̖́-

0개의 댓글