Unity 내일배움캠프 TIL 0904 | TopDown

cheeseonrose·2023년 9월 4일
0

Unity 내일배움캠프

목록 보기
26/89
post-thumbnail

유니티 입문 1주차가 시작되었다! 두둥

새로운 팀원들과 만나서 팀 노션 작성하고 알고리즘 코드 카타 후 강의 듣기 시작 ~.~

처음으로 팀장을 맡게 되었는데 겁.나. 떨린다
덜덜덜덜덜덜

Unity 게임 개발 입문 1주차

Asset, Scene, GameObject

  • Asset(에셋)
    • 게임에 필요한 모든 리소스(이미지, 사운드, 모델, 코드)를 의미
    • 프로젝트의 에셋 폴더에 저장되며, 유니티에서 사용 가능한 형식으로 가져와서 게임에 활용
  • Scene(씬)
    • 게임의 각 장면 또는 화면을 의미
    • 유니티에서 게임은 하나 이상의 씬으로만 구성되며, 각 씬은 게임의 특정 부분을 담당
  • GameObject(게임 오브젝트)
    • 씬에 배치되는 모든 요소
    • 에셋을 이용하여 씬에 생성되며, 게임의 동작과 상호작용 담당
    • 계층 구조로 구성되며, 부모-자식 관계를 가짐

게임 개발 맛보기 PONG

  • Material
    • Sprite : 눈에 보여지는 재질 (색, 모양 등)
    • Rigidbody : 물질적인 재질
  • Box Collider - Is Trigger
    • Collision 충돌 : 실제로 충돌이 일어나고 충돌 감지
    • Trigger 충돌 : 실제 충돌은 일어나지 않지만 충돌 감지
  • Canvas Scaler에서 Scale Mode는 Scale With Screen Size로 설정하는 것 잊지 말기!
    • 사이즈는 x 1920 y 1080

스크립트 라이프 사이클

  • Awake : 게임 오브젝트가 생성될 때 호출
  • Start : 게임 오브젝트가 활성화되어 게임 루프가 시작될 때 호출
  • Update : 매 프레임마다 호출
  • FixedUpdate : 물리 엔진 업데이트 시 호출
  • LateUpdate : Update 메서드 호출 이후에 호출
  • OnEnable : 게임 오브젝트가 활성화될 때 호출
  • OnDisable : 게임 오브젝트가 비활성화될 때 호출
  • OnDestroy : 게임 오브젝트가 파괴될 때 호출

컴포넌트

  • 게임 오브젝트에 부착되는 독립적인 기능 모듈
  • 각 컴포넌트는 특정한 작업을 수행하거나 기능을 제공
  • Transform : 게임 오브젝트의 위치, 회전, 크기 조정
  • Rigidbody : 물리적인 효과를 게임 오브젝트에 적용
  • Collider : 충돌 감지를 처리
  • SpriteRenderer : 2D 그래픽을 표시하는데 사용
  • AudioSource : 사운드를 재생

TopDown Shooting

  • PPU (Pixels Per Unit) 값이 높아질수록 고해상도 -> 성능에 영향

  • 부모-자식 관계를 갖는 오브젝트는 부모의 좌표, 크기, 회전 값이 적용됨

  • World 좌표, Local 좌표

    • Local 좌표는 부모로부터의 상대적 좌표
    • 부모가 없는 오브젝트는 World 좌표와 Local 좌표가 같음
  • Time.deltaTime

    • 이전 프레임과 현재 프레임 사이의 시간
    • 프레임이 다른 컴퓨터 간 이동속도를 맞춰주기 위해 사용
    void Update() {
    	float x = Input.GetAxis("Horizontal");
      	float y = Input.GetAxis("Vertical");
          
        transform.position += new Vector3(x, y) * Time.deltaTime;
     }
  • GetAxisRaw : 0, 1, -1의 값만 줌

    • GetAxis는 0부터 1까지 도달하는 값을 줌
  • 인스펙터 창에서 값을 조절하려면 public으로 선언

    public float speed = 5f;
    • 중요한 값일 때는 SerializedField를 사용해서 동기화
      [SerializedField] private float speed = 5f;
  • Input System

    • Package Manager에서 다운
    • Input 폴더 안에서 Create - InputActions
    • Keyboard랑 Mouse 추가한 Scheme 생성
    • Action Properties - ActionType은 Value, Control Type은 Vector2로 설정
      • Up/Down/Left/Right Composite 추가
    • Path에 방향키 설정 WASD
  • normalized

    • 단위 벡터로 만듦
    • UP 키와 Down 키를 동시에 누르면 대각선 방향으로 가게 되는데, normarlize를 안 하면 대각선 방향만 빠르게 움직이게 됨
    Vector2 moveInput = value.Get<Vector2>().normalized;
  • WorldPoint 좌표 구하기

    • 어떤 벡터 A에서 다른 벡터 B를 빼면 B -> A 로 향하는 값이 나옴
    • 그 벡터를 normalized -> 단위 벡터로 만듦 : 나한테서 마우스 포인터를 바라보는 방향
    • newAim.magnitude : 벡터의 크기 (단위 벡터이므로 1)
     Vector2 newAim = value.Get<Vector2>();
      Vector2 worldPos = _camera.ScreenToWorldPoint(newAim);
      newAim = (worldPos - (Vector2)transform.position).normalized;
      
      if (newAim.magnitude >= .9f)
      {
      	CallLookEvent(newAim);
      }
  • GetComponent : 현재 스크립트가 달려있는 같은 오브젝트에서 찾아오겠다는 의미

  • FixedUpdate : 보통의 물리처리가 끝난 후에 호출됨 -> Update보다 호출 느림

  • Rigidbody.velocity : 속력 벡터

  • Tilemap

    • Tilemap Gameobject : 타일맵 구조를 구성하는데 사용
      • Tilemap Grid의 자식으로 위치, 특정 타일의 배치를 관리
    • Grid GameObject : 모든 타일맵이 위치하는 기본 격자를 나타냄
    • Tilemap Renderer : Tilemap의 모양을 실제로 그리는 역할
    • Tilemap Collider 2D : Tilemap에 물리적 경계를 추가하는데 사용
      • 게임 캐릭터가 타일맵 환경과 상호작용 가능
    • Tile Assets : 개별 타일의 모양과 동작을 정의
      • Tileset : 여러 개의 타일
  • Atan2

    • x, y에 대하여 arctan(아크탄젠트, 탄젠트의 역삼각함수) 값을 구함 -> 벡터의 각도
    • Atan에서 y/0일 때 버그가 발생하는 것을 방지하여 인자를 두 개 받는 Atan2가 생김
    • Mathf.Rad2Deg를 곱해서 radian 값을 degree 값으로 변환 -> Euler 함수 사용 가능
    float rotZ = Mathf.Atan2(direction.y, direction.x) * Mathf.Rad2Deg;
  • 캐릭터를 기준으로 활 각도의 절댓값이 90을 넘어가면 활을 뒤집음 -> 캐릭터의 방향도 뒤집음

    • flipY는 Y축을 방향으로 뒤집는 함수
    armRenderer.flipY = Mathf.Abs(rotZ) > 90f;
     characterRenderer.flipX = armRenderer.flipY;
     armPivot.rotation = Quaternion.Euler(0, 0, rotZ); // 실제로 무기 회전
  • Awake에서 Component에 대한 준비를 하고, 그 이후에 Start나 다른 함수에서 사용하는 것이 좋음



오늘은 여기까지~~
끗~.~

0개의 댓글