와챠의 우당탕탕 코딩 일기장

[유니티] 스파르타 코딩 : 게임 개발 - 2주차 본문

코딩 일기장/Unity

[유니티] 스파르타 코딩 : 게임 개발 - 2주차

minWachya 2021. 6. 8. 23:33
반응형

오늘 만든 것

 

 

오늘 한 것

  • 태그 사용
  • 적 구현
    • 적에 닿으면 게임 오버
    • 동작 AI 로직 구현
  • 점프 및 더블 점프 구현
  • 캐릭터 움직임에 따라 이미지 X축 반전하기

오늘 배운 것 정리

  • 기존 프리팹으로 새 프리팹 만들기
    • 기존 프리팹의 오브젝트를 우클릭 > Prefab > UnpackCompletely (기존 프리팹과 연결 끊기)
  • 태그로 오브젝트 구분하기 (유니티의 태그 기능 이용)
    • 해당 오브젝트 클릭 > 상단부에 Tag 표시의 드롭다운 클릭 > AddTag > + >  태그 추가!
  • GetKey 함수 : 누르고 있는 동안 내내 true 반환
  • GetKeyDown 함수 : 최초에 누른 한번만 true 반환
  • Component : 오브젝트 동작 정의하는 코드(.cs)
  • 같은 Component에서 같은 rigid를 사용 하는 경우 주의!
    • 현재 프로젝트에서 Move와 Jump에 같은 rigid를 사용함
    • Move의 좌/우 이동은 되는데 Jump가 안 되는 문제 발생
    • > 이유 : Move에서 direction = Vector2.left * moveSpeed;를 사용해서 y좌표가 0이 되기 때문
      • Vector2.left == Vector2(-1f, 0f)
    • > 해결 : y값은 기존 y값을 저장하기
      • direction.y = rigid.velocity.y;
  • 점프 제어를 위해 주인공 오브젝트에 BoxCollider2D를 추가하기
    • rtan_playable 프리팹의 아래쪽 sprites에 추가하기 
    • 발바닥에 조그맣게 붙이고 Is Trigger에 체크하기
      • IsTrigger 활성화 : Collider는 충돌체크만 하고 실제로 충돌체크한 오브젝트를 막지 않음.(투명 상테라고 보면 될 듯)
      • IsTrigger 비활성화 : 충돌체크한 오브젝트를 막음(ex - 벽에 막히면 앞으로 가지 못 함)
  • OnTriggerEnter2D 함수 : "트리거 설정한" 박스 콜라이더에 다른 박스 콜라이더가 감지됐을 때(충돌 발생) 호출
  • OnCollisionEnter2D 험수 : 박스 콜라이더에 닿으면 호출
  • 주인공 오브젝트 투명하게 하기 :
    • render.color = new Color(1, 1, 1, 0.5f);      // 원래 색은 그대로, 투명도만 바꾸기
      • (public SpriteRenderer render;)
  • 주인공에게 중력 제거하기 :
    • 현재 주인공에게는 2개의 콜라이더가 있음(주인공 자체 콜라이더, 점프 제어를 위해 발바닥에 붙인 콜라이더)
    • 이 두 개의 콜라이더의 enable을 false로 만들어주면 됨
    • > 콜라이더(Box Collider 2D )는 충돌 체크를 하는 역할을 하는데 이를 제거해버리면 충돌체크를 하지 않아 그냥 바닥으로 떨어지는 것
  •  rigid.AddForce(Vector2.up * jumpHeight, ForceMode2D.Impulse);
    • // AddForce : 어떠한 방향으로 움직이기, ForceMode2D.Impulse : 강제로 올리기
                    

오늘의 오류

  • 주인공 오브젝트가 왼/오른쪽으로 잘 가다가 콜라이더에 닿으면 갑자기 90도로 회전함....
    • > 해결 : Freeze Rotation Z 체크!
  • 코드에 이상이 없는데 적 오브젝트가 움직이지 않음....
    • > 해결 : 적 오브젝트 프리팹 > Animator 컴포넌트 > ApplyRootMotion 값 해제

 

오늘의 질문

  • 공룡 오브젝트가 벽 오브젝트 뒤에 있는데, 공룔 오브젝트를 앞으로 오게 하려면 어떻게 해야 하나?
    • 다음 시간에 배우긴 하는데, Sprite Renderer의 Order in Layer 값을 크게!!
  • 비주얼 코드 자동 완성이 안 됨...
    • 1, ExternalTool 확인
      1. 유니티 상단 메뉴바에서 Edit → Preference
      2. External Script Editor를 Visual Studio Community 로 적용
    • 그래도 해결이 안 되면.... 2, Visual Studio Tools for Unity 설치 확인
      1. 비주얼 스튜디오 상단 메뉴에서 도움말 → 업데이트 확인 → 업데이트가 존재할 경우 업데이트 진행
      2. 비주얼 스튜디오 Installer 실행 (기본 위치 : C:\Program Files (x86)\Microsoft Visual Studio\Installer\vs_installer.exe)
      3. 해당 비주얼 스튜디오 버전에 수정 버튼 → 워크로드 → 게임 → Unity를 사용한 게임 개발 선택 후 설치
      4. 윈도우 재실행 후 유니티 실행 → 임의의 코드파일(*.cs) 더블클릭으로 비주얼 스튜디오 실행
  • 드래그 앤 드롭하는 객체가 다른데 뭐가 틀린 거지?
    • 그냥... 리지드바디2D가 있는 객체를 변수에 할당하고 콜라이더 있는 객체를 변수에 할당하는... 컴포넌트의 개념을 헷갈려서 이런 질문이 생긴 듯. 변수가 원하는 컴포넌트가 있는 객체를 할당하면 됨

 

 

+) ... 그냥 강의 들으면 누구나 1등인 거니?

반응형
Comments