해당 글은 <C플레이어와 몬스터의 특징을 정의한다.직업 선택플레이어 생성몬스터 생성게임 접속필드 접속전투메인
해당 글은 <Cstatic 키워드가 붙은 필드와 메서드는 클래스에 종속된다.static 키워드가 붙지 않은 필드와 메서드는 인스턴스(객체)에 종속된다.❗ 정적 필드, 메서드에는 this 키워드를 쓸 수 없다.즉, static 변수만 연산을 할 수 있다.일반 필드에
해당 글은 <C중복되는 데이터들을 객체마다 추가하는 것은 비효율적 ❗ex) 종류가 수백가지이상이 되는 몬스터의 경우 😖💡 이러한 경우에 사용하게 되는 개념이 상속이다.사용 예시결과부모 클래스의 기본 생성자가 아닌 생성자 호출하기결과부모 클래스의 속성과 기능을
해당 글은 <C접근 한정자public: 모두에게 공유, 외부에서 사용 가능private (default): 클래스 내부 로직에서만 사용 (나만 사용), 상속 시에도 접근 xprotected: 외부에서 접근할수 없으나, 상속 시에는 접근 가능❗❗❗오버로딩 : 함수
해당 글은 <C찾기변형분할
해당 글은 <Chttps://velog.io/@yeah7598/C%EC%9C%BC%EB%A1%9C-%EA%B0%84%EB%8B%A8%ED%95%9C-TextRPG-%EB%A7%8C%EB%93%A4%EA%B8%B0 에서 만든 게임을 객체지향 개념을 적용하여
Hierachy에 Cube 오브젝트를 추가합니다.MyCube라는 이름으로 추가회전을 할 수 있게 해주는 함수인 transform.Rotate를 사용하여 Test 스크립트를 만듭니다.스크립트를 MyCube 인스펙터에 적용해주면 끝!빙글빙글 돌아가는 큐브!
MonoBehaviour를 상속받은 스크립트만이 오브젝트에 첨부될 수 있다.상속 관계Object -> Component -> MonoBehaviour MonoBehaviour 키워드를 사용하여 해당 스크립트를 실행할 경우 아래와 같은 오류가 뜨게된다.=> 일반적인 C❗
@Managers 오브젝트가 여러개 복사되더라도 유일성이 보장되도록 코드 수정Player 스크립트에서 Managers 스크립트를 호출하는 형태도 간단하게 바뀜❗ 만약 아래 코드에서 @Managers를 발견하지 못한다면? -> ❗ 오류 발생 GameObject go =
너무나도 극단적인 이동.. ㅋㅋㅋㅋㅋㅋ이번 강의에서 알게된 점키보드 입력 받기직관적인 캐릭터 위치 변경
Vector의 기본 연산을 간단하게 코드로 구현해보는 실습을 가졌습니다.
여러가지 회전 방식 wasd를 누르면 캐릭터가 해당 방향을 바라보도록 하기 ❗ 조금 더 부드럽게 이동했으면 좋겠다! ❗ 부드럽게 캐릭터 방향 전환하기 > Quaternion.Slerp(시작점, 끝점, 어느 점에 더 많은 비율로 갈것인지!) ex) Quatern
❗ Update 함수에서 입력을 모두 처리할 경우 시스템에 과부하가 생길 수 있다.\-> 키를 체크하는 부분을 따로 관리하여 이벤트를 건네받는 식으로 하는 것이 더욱 효율적이다.💡 Input 입력을 관리하는 Manager를 만들자!\-> 더욱 더 관리하기 편해짐
속성 창에서 적용할 Prefab을 끌어와주면 끝!실행을 하면 뿅! 하고 생긴다.삭제하고 싶다면?
Manager로 관리하는 것이 더욱 효율적이다.이전 코드를 아래와 같이 변경해 준다.
collider가 붙은 두 오브젝트는 기본적인 상태에서 충돌시 튕겨져 나가게 된다.캐릭터의 Rigidbody - freeze rotation 속성을 체크해준다.
Collision이 발생되는 상황Trigger가 발생되는 상황버전마다 다를 수 있기 때문에 문서나 실제 테스트를 통해 확인하는 것이 좋다.물리와는 상관없이 해당 범위안에 들어왔는 지를 파악하고 싶다면Trigger를 쓰는 것이 유용하다.
raycast로 앞에 있는 물체 파악하기뒤에 있는 큐브 2까지 탐색하고 싶다면?업로드중..배열을 이용한다!업로드중..❗ raycast를 활용할 수 있는 곳 ❗카메라와 캐릭터 사이에 장애물이 있을 경우 raycast를 이용해 탐색해서 캐릭터를 가리지 않도록 할 수 있다.
6번 레이어인 Monster만 raycasting 하도록 코드를 수정하자!❗ raycasting은 부하가 많은 작업이기 때문에 레이어를 분리하여 최적화하는 것이 중요하다! ❗
캐릭터가 움직일 때마다 카메라가 같이 이동하도록 하기 단! 방향은 회전하지 않도록 한다.
* ❗ 캐릭터가 벽에 가려지는 경우 캐릭터가 보이도록 카메라를 이동시키기 ❗ * RayCast를 이용하여 벽을 탐지한다.
캐릭터가 이동할때 달리는 애니메이션 적용하기 \_moveToDest 는 현재 캐릭터가 달리고 있는 지를 판단하는 변수이다.
부드럽게 애니메이션 변환하기Animator 탭에서 마우스 우클릭 후 Create State -> From New Blend Tree 를 선택한다.그렇게 만들어진 Tree를 한번 더 더블클릭!해당 창에서 우클릭 후 섞을 모션을 추가해주거나 Inspector 창을 이용해서
상태가 여러가지일 경우 Update 함수에서 모두 처리한다면 매우 복잡한 상황이 발생한다.PlayerState를 변수화하여 처리하자!💡 State 형식으로 관리할 경우, 예를 들어 Player가 Die 상태였을 때 다른 Player가 부활을 시킨 경우 Idle로 변경
인게임 내에서 지정한 경로를 이동하는 애니메이션 만들기
모바일 기기에서는 화면크기가 모두 다르기 때문에특히나 Rect Transform을 이용하는 것이 좋다.Anchor와 부모 사이의 거리는 비율로 연산 (빨간색)Anchor와 오브젝트 사이의 거리는 고정 거리로 연산 (주황색)위 그림이 화면에 적용되면 아래 그림과 같이 된
Canvas(UI_Button) 아래에 Button과 Text 오브젝트를 생성한다.UI_Button 스크립트를 만들고 아래와 같이 코드를 작성해준다.이제 버튼 속성에서 코드와 버튼을 연결해준다.이제 실행하여 버튼을 누르면 제대로 연결된 것을 확인할 수 있다.❗ 하지만
UI_Button을 Prefab으로 만들어서 아래와 같이 폴더에 저장한다.PlayerController.cs 에서 아래 코드를 추가한다.Canvas 속성에서 Sort Order는 여러개의 UI가 있을 때 순서를 결정한다.팝업 UI를 띄울때 활용할 수 있다.
아래 사진처럼 직접 드래그 앤 드롭으로 오브젝트를 연결하는 것이 아닌코드로 오브젝트를 연결하려 한다.리플렉션을 이용하여 enum을 넘겨준다.UI_Button 오브젝트에 위 스크립트가 붙어 있기때문에 해당 오브젝트를 기준으로 자식 오브젝트를 찾아가는 방법을 사용할 것이다
앞선 포스트에서 만들었던 Bind와 Get 함수는 UI가 늘어남에 따라 그때마다 복붙하여 새로 만들어 줄 수 없으니 Base 클래스를 만들어보자!UI_Button 스크립트는 UI_Base를 상속받아 간접적으로 MonoBehaviour을 상속받게 된다.아래와 같은 오류가
UI_EventHandler라는 이름의 스크립트를 생성한 뒤,Image 오브젝트에 붙여준다.아래와 같이 BeginDrag 와 Drag 시 메세지를 출력하도록 테스트를 한다.또한 드래그를 한 위치로 이미지를 이동시키는 코드를 작성한다.
UI Manager를 만들어 Popup의 Sort Order를 관리하자.popup을 띄우고 닫는 코드를 작성한다.이제 코드가 제대로 실행이 되는 지 테스트해보자.Player 스크립트에 아래 코드를 추가해준다.이제 실행버튼을 누르면 UI_Button이 Clone 되어 생
여러개의 팝업을 띄운다고 할 때 아래 사진처럼 생성이 되어 지저분해 보이는 경우가 있다.UIManager 스크립트에서 아래와 같이 부모 오브젝트를 찾아 아래에 생성하도록 코드를 짠다.부모 오브젝트가 없을 경우 만들어주는 작업도 추가한다.이제 UI_Root라는 오브젝트
파란색 - 최상위 UI빨간색 - 파란색보다 아래 있는 UI❗ 뒤에 있는 UI까지 같이 동작되는 경우 발생 ❗ 투명한 Image 오브젝트를 생성 후 화면 크기만큼 지정해준다.이때 순서가 가장 아래 있을 경우 현재 UI도 모두 막아버릴 수 있기 때문에Blocker는 가장
게임 오브젝트를 Instantiate 하면 아래 사진과 같이 오브젝트 이름에 (Clone)이 붙게된다.(Clone)을 제거해보자.(Clone)이라는 텍스트의 인덱스를 찾아 저장한다.0부터 (Clone)의 전 인덱스까지를 잘라 이름에 다시 저장한다.깔끔하게 생성이 된 것
키보드 'Q'의 입력을 받아Input.GetKeyDown(KeyCode.Q)SceneManager를 이용해 씬을 이동한다.SceneManager.LoadScene("Game");하지만 아래 이미지와 같이 오류가 뜰 것이다.씬을 넘어가기 위해서는 씬을 등록해줘야한다.Fi
Navigation Mesh 이용하여 이동할 수 없는 구역 막기Window - AI - Navigation 을 누른뒤 Navigation탭의 Bake 버튼을 눌러준다.시간이 지나면 이렇게 플레이어가 이동할 수 있는 구역을 자동으로 계산해주는 것을 알 수 있다.사전에 올
UI의 Slider Object를 생성하여 Prefab 형태로 만든다.만든 Prefab을 불러오는 코드를 UIManager에 작성한다.Canvas의 Render Mode를 World Space로 바꾸고, Event Camera를 연결시켜줘야3D UI를 적용시킬 수 있다
배열연결 리스트스택 / 큐트리 그래프(호텔 방 예약으로 예시를 들면)사용할 방 개수를 고정해서 계약하고 (절대 변경 불가)연속된 방으로 배정 받아 사용사용할 방 개수를 유동적으로 계약연속된 방으로 배정 받아 사용=> 중간에 있는 방이 비어있을 경우 앞으로 땡겨서 이사해
데이터 개수가 n개이면 연산을 n번해야 하니 시간 복잡도를 O(N)이라고 생각할 수 있다.하지만 Count >= Capacity 일 경우 데이터가 두 배씩 계속 늘어나기 때문에 시간 복잡도를 계산할 때 이 부분을 무시한다.즉 특이 케이스로, 동적 배열에서 아이템을 추가
코드 수 고정
벽은 빨간 원으로 비어있는 공간은 초록 원으로 만들기2차원 배열 사용색 추출, 랜더 등의 기능은 함수로 사용