2D Basic

suhan cho·2022년 8월 3일
0

게임오브젝트 이동

transform

  • transform.position을 통해
    내가 소속되어 있는 게임오브젝트의 Transform 컴포넌트
  • 1이동 시에는 Vector3.right로 표현가능하다

Time.deltaTime

두 컴퓨터에서 캐릭터 이동 했을 때

  • 캐릭터의 Update() 1회 당 이동거리를 5m라고 할 때

  • 사양이 좋지 않은 컴퓨터는 60초에 Update() 60회

  • 사양이 좋은 컴퓨터는 60초에 Update() 120회

  • 이전 Update() 종료부터 다음 Update() 시작까지의 시간

  • 즉 업데이트 사이의 시간

    • 1분에 Update가 60회 호출이면 TimedeltaTime은 1

이동거리 = 방향 속도 Time.deltaTime

  • 5m 60 1 (사양이 좋은 경우)
  • 5m 120 0.5 (사양이 좋지 않은 경우)

Input.GetAxisRaw

  • float value = Input.GetAxisRaw("단축키명")
    긍정: +1 부정: -1 대기: 0
  • GetAxis는 키를 누르고 있으면 0에서 1or-1로 서서히 증가

  • horziontal, vertical다 여기에서 세팅

오브젝트 물리와 충돌

Rigidbody2D 컴포넌트

  • 2차원 공간에서 오브젝트의 물리와 중력을 담당하는 컴포넌트

Collider2D 컴포넌트

  • 2차원 공간에서 오브젝트의 충돌 범위를 나타내는 컴포넌트
  • Material: 해당 오브젝트의 마찰력 등을 설정할 수 있는 물리 메터리얼 등록 가능
  • Is Trigger: 활성화 되면 오브젝트가 충돌되지 않고 뚫고 지나간다
  • Offset: 충돌 범위 중심점 위치
  • Size: 충돌 범위 크기

서로 다른 두 오브젝트가 충돌하기 위한 필수 조건

  • Rigidbody2D에 있는 velocity 변수만 설정해주면 Rigidbody2D에 의해서 이동이 가능하다

GetComponent<컴포넌트 이름>();

게임 오브젝트의 컴포넌트에 접근하는 방법

  • 두 오브젝트 모두 충돌 범위인 collider2D컴포넌트를 가지고 있어야 하고
  • 둘 중 하나 이상의 오브젝트가 물리 처리를 담당하는 Rigidbody2D컴포넌트를 가지고 있어야 한다

게임 내에서 사용법

  • 충돌에 의해 함수가 호출되고, 함수에 다양한 역할을 하게 된다
  • 아이템을 흭득하거나, 적을 공격하거나, 함정을 밟아 장애물이 튀어나오거나

OnCollisionEnter2D()

  • 두 오브젝트가 충돌하는 순간 1회 호출

OnCollisionStay2D()

  • 충돌 직후 맞닿아 있는 동안 매 프레임 호출

OnCollisionExit2D()

  • 두 오브젝트가 떨어져서 충돌이 종료되는 순간 1회 호출

[SerializeField]

  • 해당 변수의 바로 윗줄에 작성
  • Transform의 position, rotation 변수들과 같이 Inspector View에서 변수의 옵션을 조절할 수 있게 해준다

OnTriggerEnter2D()

  • 두 오브젝트가 충돌하는 순간 1회 호출

OnTriggerStay2D()

  • 충돌 직후 맞닿아 있는 동안 매 프레임 호출

OnTriggerStayExit2D()

  • 두 오브젝트가 떨어져서 충돌이 종료되는 순간

자신이 아닌 다른 오브젝트를 움직이게 할 때

  • moveObject라는 게임 오브젝트를 만들었고

게임오프벡트 생성함수 Instantiate()

프리팹을 사용하는 이유

  • 게임월드에 있는 원본 오브젝트를 복제해서 사용하게 되면 원본이 죽었을 때 복사본 오브젝트가 없어서 더 이상 적을 생성할 수 없다.
  • 안전공간에 있는 prefeb을 사용해서 한다

prefeb만드는 방법

  1. 원하는 형태로 게임오브젝트를 꾸며준다.(적 캐릭, 아이템 등)
  2. Hierachy View의 게임오브젝트를 Project View로 드래그&드롭
  3. Hierachy View에 있는 게임오브젝트를 삭제

  • Instantiate를 통해 prefeb을 복제

Instantiate사용

  • instatntiate(게임오브젝트, 위치, 회전값)
    • 회전을 안줘도 되면 기본값이 Quaternion.identity사용

반복문으로 오브젝트 생성

  • 결과 위에처럼 나온다

임의의 위치에서 오브젝트 생성

  • Random.Range(0, 7.5f)

스폰 포인트에서 생성


  • 다른 스폰포인트에서 겹쳐서 생성됨

  • movement를 수정

  • spawnPoint 수정

공격기능

  • GetKeyDown으로 입력을 받고 keycode.space로 스페이스 입력을 받음
  • 플레이어 위치에서 바로 클론이 생긴다

원하는 방향 공격

  • lastMoveDirection 변수 설정해 처음 초기값 오른쪽으로 설정
  • if문으로 이볅된 방향키의 방향으로 총알 발사하게 한다
  • GetConponent를 통해 movement2D의 Setup함수의 매개변수를 lastMoveDirection으로 한다

게임오브젝트 삭제 함수 Destroy()


  • 정해진 범위를 넘어서면 오브젝트가 사라진다

충돌했을 때 변화주기

  • rigidbody2D와 BoxCollider2D를 설정 is trigger설정으로 Ontrigger메소드 실행시 수행 가능하게 한다
  • 탄환인 머리도 충돌을 위해 collider를 줘야한다

출처: https://www.youtube.com/watch?v=2jc72B4Tcz4&list=PLC2Tit6NyViewOPACJai5zNAfZuUW8aYq&index=11

profile
안녕하세요

0개의 댓글