[TIL] Unity - day 6

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

Unity - Pre-Camp

목록 보기
2/9
post-thumbnail

🐧 들어가기 앞서

  • 코딩테스트 준비를 하는데, 자꾸 쉽게 생각하지 못한다.
    자료구조나 알고리즘을 먼저 학습한 뒤, 연습해야겠다.

  • Unity 2, 3주차 시작!


🐧 오늘 배운 것

🎈2주차

  • 구현 순서
  1. 기본 씬 구성 - 배경, 풍선, 마우스, 네모, 시간
  2. 풍선 애니메이션 더하기
  3. 마우스 움직임 더하기
  4. 시간 가게 하기
  5. 네모 내려오게 하기 + 충돌 구현
  6. 게임 끝내기(1) 판넬 제작
  7. 게임 끝내기(2) 베스트 스코어 기록
  8. 풍선 애니메이션 전환

🐈🐕‍3주차

  • 구현 순서
  1. 기본 신 구성 - UI, 강아지, 고양이
  2. 강아지 움직임 더하기 + 밥 쏘기
  3. 고양이 내려오게 하기 ( 모델링 하는게 중요! )
  4. 고양이 밥 먹기 + 옆으로 가게 하기
  5. 새로운 고양이 나오게 하기
  6. 레벨업하기

🐧 기억할 것

🎈2주차

Animation Record 오류!

구현 도중 AnimationEvent has no function name specified! 오류가 생겼다.

  • 해결


해당 애니메이션을 클릭하면, Animation Event를 설정하는 칸이 있다.

애니메이션 이벤트를 제거!

Console에 더 이상 해당 에러가 표시되지 않는다.

gameManager Object Function처리

gameManager에 새로운 오브젝트 및 오브젝트의 기능을 부여했으면,

Hierarchy에서 꼭 오브젝트를 gameManager에 부여해주자!

Rigidbody, Collider

오브젝트의 컴포넌트 설정 시, 낙하(중력 구현)는 Rigidbody, 충돌은 Collider!


🐈🐕‍3주차

버튼 정의

spirte 버튼은 작동하지 않음!
UI-Images를 통해 버튼을 생성하자.

좌표 고정

    void Update()
    {
        Vector3 mousePos = Camera.main.ScreenToWorldPoint( Input.mousePosition );
        float x = mousePos.x;
        if (x>8.5f) // x좌표를 -8.5f~8.5f로 고정.(fishshop을 벗어나지 않음.)
        {
            x = 8.5f;
        }
        else if(x<-8.5f)
        {
            x = -8.5f;
        }
        transform.position = new Vector3(x, transform.position.y, 0); // dog는 마우스 포인트를 이용해 x축에서만 움직임!
    }
}

Render Mode - World Space

UI Canvas Render Mode 가 전체로 적용.

Rect Transform - pivot

0.5-> 중앙에서 시작, 양쪽으로 늘어남
0 -> 좌 시작, scale 조정 시 우측으로 늘어남.

Rigidbody - kinematic

kinematic은 중력의 반대로, 오브젝트가 올라간다!

단점은 collider가 서로 만났을 때, 충돌을 감지하지 못할때 있음

-> Collider - Is Trigger check✔✔

난이도 조절

level 에 확률을 부여,

level이 낮은 경우, 난수를 생성해
숫자가 난수보다 낮으면 적 오브젝트 하나 더 생성

level이 높아질 수록, 난수를 생성하는 조건이 높아져
더 많은 적 생성!

void makeCat()
    {
        Instantiate(normalCat);
        if (level == 1)
        {
            float p = Random.Range(0, 10);
            if (p < 2) Instantiate(normalCat);
        }
        else if (level == 2)
        {
            float p = Random.Range(0, 10);
            if (p < 5) Instantiate(normalCat);
        }
        else if (level >= 3)
        {
            float p = Random.Range(0, 10);
            if(p < 6) Instantiate(normalCat);
            Instantiate(fatCat);
        }
    }
  • 레벨 1

  • 레벨 7

Type별로 조건 결정!

Unity에는 같은 스크립트를 사용하지만

조건이 달라야할 경우 Type을 이용해 조건에 맞게 설정할 수 있다.

  1. 먼저 스크립트에서 타입을 설정한다.
  2. 타입에 따른 조건을 설정한다.
  3. Unity에서 오브젝트에 타입을 부여한다.
  • NormalCat

  • FatCat


🐧 Homeworks

🎈2주차

  • 2주차, 네모 화면 밖으로 나가면 없애기.
    -> 하는 이유는 화면 밖으로 나간 square들이 계속해서 쌓이면 정말 오래했을 때,
    메모리 사용량이 커져 시스템에 부담이가 오류가 생길 수 있다.

  • square.cs

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

public class square : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        float x = Random.Range(-3.0f, 3.0f);
        float y = Random.Range(3.0f, 5.0f);

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

        float size = Random.Range(0.5f, 1.5f);
        transform.localScale = new Vector3(size, size, 1);
    }

    // Update is called once per frame
    void Update()
    {
        if (transform.position.y< - 5.0f) // 만약 y가 -5.0f보다 작으면
	    {
            Destroy(gameObject); // 오브젝트 삭제.
        }
    }

    void OnCollisionEnter2D(Collision2D coll)
    {
        if (coll.gameObject.tag == "balloon")
        {
            gameManager.I.gameOver();
        }
    }
}

🐈🐕‍3주차

하루에 16강 제한이 있어서
내일로,,


🐧 2,3주차 수강 후기

2주차,3주차

이전에 배웠던 것을 한번 더 복습하며,

새로운 것을 알려주셔서 좋았다.

하지만 갈수록 문법이 복잡해지고, 구문 개수가 많아지는 걸 보면,

처음 배우는 사람은 정말 기초부터 해야할 듯 하다!

복붙하면 해결되지만, 그러면 실력이 늘지 않으니,,

나도 초보를 벗어나려고 노력해야지.

게임을 꼭 직접 플레이하면서, 모든 경우의 수를 다 경험하고, 버그를 잡자!

0개의 댓글