[TIL] Unity - day 5

뭉크의 개발·2023년 7월 25일
0

Unity - Pre-Camp

목록 보기
1/9
post-thumbnail

🐧 들어가기 앞서

C# 기본 문법을 마치고, Unity로 게임 제작에 들어간다.
앞으로 계속 어떤 게임을 만들고 싶은지 구체화에 들어가야겠다!

코테 다짐

  • 코테도 하루 최대 5솔 하기.
  • 최대한 요구사항에 맞춰서 구현,
  • 간단하게 생각하기!
  • 문제에 주어진 변수 확인 잘하기!

🐧 오늘 배운 것

빗방울을 모아 점수를 얻는 게임을 제작했다.


🐧 기억할 것

Character Assets 조작

  • Character Assets 실시간 위치 확인하기
Debug.Log(변수.position.입력값); //x,y,z중 입력값에 대한 위치 출력

e.g.,

void Update()
    {
        Debug.Log(transform.position.x); //실시간 위치 확인
        transform.position += new Vector3(direction, 0, 0);
    }
  • Character Assets, Debug Log기반으로 좌, 우 벽에 부딪히는 값 계산 후
    좌, 우 움직이는 코드 생성
    void Update()
    {
        if (transform.position.x > 2.8f)//x가 2.8f를 넘어가면, 왼쪽 이동
            direction = -0.05f; 
        else if (transform.position.x < -2.8f)
            direction = 0.05f; 
        transform.position += new Vector3(direction, 0, 0);
    }
  • Character Assets 움직임에 맞춰 방향 결정
    void Update()
    {
        if (transform.position.x > 2.8f)
        {
            direction = -0.05f;
            transform.localScale = new Vector3(-1f, 1f, 1f);
        }

        else if (transform.position.x < -2.8f)
        {
            direction = 0.05f;
            transform.localScale = new Vector3(1f, 1f, 1f);
        }
        transform.position += new Vector3(direction, 0, 0);
    }
  1. x는 좌, 우 = 결정
  2. y는 위, 아래 = 결정
  3. z는 z축 따라 결정

Collider

Unity에서 물리적 충돌을 처리해주는 컴포넌트다.

Collider 컴포넌트를 오브젝트에 추가해주면, 따로 부딪히는 코딩 로직을 구현할 필요 없이

자체적으로 물리적 충돌 현상을 구현해준다. 굉장히 편하다!

2D에는 주로 BOX Collider, Curcle Collider를 사용한다.


GameManager - Singleton

GameManager에 모든 기능 구현 후, 호출하는 방식으로 사용.

GameManager는 단 하나만 존재!


시간제한

앞으로 많이 사용 될 기능일 것 같다.

Upate 부분에 추가해주자.



   loat limit = 30.0f;
   ...
   void Update()
    {
        limit -= Time.deltaTime;
        if (limit < 0)
        {
            Time.timeScale = 0.0f; //시간을 빠르게, 느리게, 멈추게할지 지정
            panel.SetActive(true);
            limit = 0.0f;
        }

        timeText.text = limit.ToString("N2"); //소숫점 둘째자리까지 잘라서 문자열에 삽입.
    }

Destroy

굉장히 중요한 함수다!
태그명에 해당하는 오브젝트가 Collision할 경우, 파괴된다!

if(coll.gameObject.tag =="태그명")
{
Destroy(gameObject);
}

e.g.,

    void OnCollisionEnter2D(Collision2D coll)
    {
        if (coll.gameObject.tag == "ground")
        {
            Destroy(gameObject);
        }

        if (coll.gameObject.tag == "rtan")
        {
            GameManager.I.addScore(score);
            Destroy(gameObject);
        }
    }
}

🐧 Homeworks

빨강색 빗방울 만들기

  • rain.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class rain : MonoBehaviour
{
    int type;
    float size;
    int score;

    // Start is called before the first frame update
    void Start()
    {
        float x = Random.Range(-2.7f, 2.7f);
        float y = Random.Range(3.0f, 5.0f);
        transform.position = new Vector3(x, y, 0);

        type = Random.Range(1, 5);

        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);
        }
        else //빨강색 빗방울
        {
            size = 0.8f;
            score = -5;
            GetComponent<SpriteRenderer>().color = new Color(255 / 255.0f, 100.0f / 255.0f, 100.0f / 255.0f, 255.0f / 255.0f);
        }
        transform.localScale = new Vector3(size, size, 0);
    }
        // Update is called once per frame
    void Update()
    {

    }

    void OnCollisionEnter2D(Collision2D coll)
    {
        if (coll.gameObject.tag == "ground")
        {
            Destroy(gameObject);
        }

        if (coll.gameObject.tag == "rtan")
        {
            GameManager.I.addScore(score);
            Destroy(gameObject);
        }
    }
}

🐧 1주차 수강 후기

간단하게 게임을 만들어 볼 수 있어서 좋았다.

스스로 아쉬운 점은, 코드를 작성할 때 오타를 많이 내서 중간 중간 시간을 좀 잡아 먹었다.

또, 내 게임이 아니니까 재밌긴 했지만 열정적이지 못했다.

물론 1~2분이지만 쌓이면 10분이니 한 영상 볼 수 있는 시간 정도이다.

천천히 작성해보자!

시간이 지날 수록 집중이 떨어지는데,

잠을 푹 자자.

코드 리뷰 필 수

0개의 댓글