스파르타내일배움캠프TIL 61

내일배움캠프 62일차 TIL 최종 프로젝트 - 사소한 리팩터링

20241210 / Unity_6차  14주차 화요일  지금까지는 ObjectPool을 사용하면서 같은 유형의 Object는 하나의 Pool을 공유하게 만들었었다. 몬스터를 예로 들자면 모든 몬스터의 공통 부분을 하나의 프리팹으로 만들어 Pooling하고모델링이나 애니메이션같이 서로 다른 부분은 공통 부분의 자식 오브젝트로 그때그때 할당하는 방식이다. 몬스터가 활성화/비활성화 될 때마다 오브젝트를 생성/소멸시키는 과정이 들어갔으니사실 ObjectPool의 장점을 반만 사용하고 있었다고 볼 수도 있다. 그럼에도 불구하고 이런 방식을 쓴 이유는 이전 프로젝트에서의 좋은 경험 때문이었다. 비슷한 프리팹들을 위해 ObjectPool을 따로따로 만든 다는 것이 비효율적으로 느껴졌었고그 때는 부모 오브젝트와 자식 ..

카테고리 없음 2024.12.10

내일배움캠프 61일차 TIL 최종 프로젝트 - DOTween

20241209 / Unity_6차  14주차 월요일  최종프로젝트는 지원비를 받았기 때문에 DOTween Pro를 사용할 수 있게 되었다. Pro버전은 컴포넌트를 지원하며, Play  버튼을 눌러 에디터 편집창에서 미리 볼 수 있다. Active/Inactive 전환시에만 애니매이션이 들어가는 UI같은 경우에는DO Tween Visual Manager를 사용하여 코드를 작성하지 않고도 애니메이션을 사용할 수 있다. 하지만 애니메이션 효과를 함수로 호출해야 하는 경우가 많다면무료버전과 같이 코드로 작성해야 한다. private void DOBlown(){ int resolution = 20; // 포물선의 세밀도 Vector3 startPos = NPC.transform.position; ..

카테고리 없음 2024.12.09

내일배움캠프 60일차 TIL 최종 프로젝트 - Projectile Data 작성

20241206 / Unity_6차  13주차 금요일  NPC에 이어서 투사체 관련하여 DataSheet를 작성하게 되었다. 이번에는 AI랑 달리 기능적인 부분을 오로지 Data로만 구분 가능하도록 만들고자 했다.(대신에 Collider나 RigidBody는 개별 프리팹에 달아 두고 값을 조절한다.) 그러려다 보니 모든 종류의 투사체에 대해 Data에서 대응이 가능해야 했다. 일단 Kingdom : New Lands에서 몇가지 예를 들자면화살 - 단일 적에게 적중 시 피해를 입히고 사라짐 or 땅에 떨어지면 사라짐투석기 - 경로 상의 모든 적에게 피해, 땅에 떨어져도 사라지지 않고 일정 시간 후 사라짐근접공격 - 범위 내의 모든 적에게 피해, 잠깐 생겼다 사라짐 현 프로젝트 컨셉인 SF에 맞게 예를 들자..

카테고리 없음 2024.12.07

내일배움캠프 59일차 TIL 최종 프로젝트 - NPC Data 작성

20241205 / Unity_6차  13주차 목요일  개발에 앞서 데이터 시트부터 작성하라는 말을 들었을 땐데이터 시트에 어떤 값이 들어가야 하는 지 감이 오지 않았는데 이제는 알 것 같다. NPC를 만든다고 하면 기본적인 스텟부터 행동양식까지 수치화할 수 있는 부분이 있을 것이다. 근데 NPC마다 필요한 스텟이나 행동양식이 많이 다를 텐데어떻게 일관성을 가지게끔 데이터를 짤 것인가가 고민이었다. 답은 간단했다. 그냥 전부 포함하면 된다.  NPC에 따라서 쓸모 없는 데이터가 많아진다고 해도기껏해야 float형 변수 몇백 개쯤 나오는 건 성능에 전혀 문제가 되지 않기 때문이다. 데이터로 조절할 수 없는 부분을 최소화하기만 하면 된다.

카테고리 없음 2024.12.05

내일배움캠프 58일차 TIL 최종 프로젝트 - Kingdom:NewLand 의 NPC AI

20241204 / Unity_6차  13주차 수요일  프로젝트 시작부터 갈팡질팡하던 NPC AI의 윤곽이 드디어 좀 잡힌 것 같다. 핵심은 NPC 직업(혹은 클래스)별 AI 스크립트인데,아군의 경우 부랑자, 시민, 궁수 등의 AI, 그리고 몬스터의 경우 아직까지는 기본 몬스터의 AI 밖에 없다. 코드를 재활용하고는 싶은데(특히 State Machine), 직업마다 미묘한 차이 때문에 공통 부분을 만들기 쉽지 않다. 예를 들어 아군은 벽을 통과하는데 몬스터는 통과하지 못한다거나,똑같이 달리는 상태더라도 목표 지점에 도착할 때까지 멈추지 말아야 하거나중간에 타겟을 발견하면 멈춰야 한다거나 하는 상황 차이 등이 있다. 결국 직업 별 AI에 많은 기능이 집중되게 되었다. 그래도 시간은 많지 않으니 고급스럽게 ..

카테고리 없음 2024.12.04

내일배움캠프 52일차 TIL 최종 프로젝트 - 최초 기획(2)

20241126 / Unity_6차  12주차 화요일  확실히 익숙치 않은 장르를 준비하려다 보니까 생각이 참 많아진다. 게다가 일주일 짜리 프로젝트가 아니다 보니까 더 완성도 높게 만들겠다고 욕심을 부리게 되는 면도 있어 보인다. 나는 NPC AI의 스페셜리스트가 되겠다는 꿈(?)을 안고 AI를 구성 중에 있는데,레퍼런스가 되는 킹덤: 뉴 랜드는 아군 NPC가 완전 자율적으로 동작하기 때문에 분석만 하기에도 머리가 아프다. 일단 NPC AI는 명령( 정찰, 거점 사수, 건설 등 )과 행동( 대기, 걷기, 뛰기, 공격 등 )로 나누기로 했다. 킹덤: 뉴 랜드의 AI를 분석한 와이어 프레임은 다음과 같다. 명령 수행을 위한 행동 계획이라는 점을 보면 GOAP( Goal Oriented Action Plan..

카테고리 없음 2024.11.26

내일배움캠프 51일차 TIL 최종 프로젝트 - 최초 기획

20241125 / Unity_6차  12주차 월요일  드디어 최종 프로젝트에 돌입하게 되었다. 내가 속한 팀은 킹덤: 뉴 랜드 라는 게임을 모티브로 하여 어드벤처 디펜스 시뮬레이션 게임을 맏르기로 했다. 아직 정확한 기획은 아니고 가닥만 잡힌 거라 오펜스 요소가 얼마나 추가될 지는 모르겠다. 총 8주의 기간동안 얼마나 해낼 수 있을지는 모르겠지만 이것저것 해야할 게 많으니시간을 허투루 보낼 수는 없다. 나는 NPC(특히 AI)를 자진해서 맡았는데, 오늘 레퍼런스 게임을 다운받았으니 좀 플레이 해봐야 할 것 같다.

카테고리 없음 2024.11.25

내일배움캠프 50일차 TIL 유니티 심화 팀프로젝트 - 뱀서류(완)

20241122 / Unity_6차  11주차 금요일  오늘 발표를 끝으로 강의 기간은 막을 내렸다. 최종 프로젝트를 앞둔 데다가 자유주제였다 보니 다른 조는 힘을 아낀 느낌이 들었는데우리 조도 적당히 하려다가 삘받아서 잠자는 시간 빼고 계속 작업하는 등 아주 불태웠다. 그리고 이제와서 말하지만 뱀서류가 아니라 3D 핵앤슬래시 라고 하는 게 맞을 것 같다.   그리고 또, 발표까지 마친 마당에(그리고 내배캠에서 3달이나 배운 마당에) 이제와서 Dotween을 처음 써봤다. 사용처는 UI 체력바, 마나바 경고시 흔들림 효과를 넣기 위해서였다. 이에 필요한 Dotween의 DOShakePosition 함수는 내부적으로 다음과 같이 되어 있다.public static Tweener DOShakePosition..

카테고리 없음 2024.11.22

내일배움캠프 49일차 TIL 유니티 심화 팀프로젝트 - 뱀서류(5일차)

20241121 / Unity_6차  11주차 목요일  오늘 한 일 몬스터 종류, 맵, 웨이브 정보 추가   몬스터는  종류에 따라 애니메이터는 같지만 애니메이션은 조금씩 다르기 때문에Animator Override Controller를 썼었다. 그런데 여기서 작은 문제가 생겼다. Animator Override Controller는 Override라는 이름에 걸맞게 기본이 되는 애니메이터에서 사용 중인 애니메이션을다른 것으로 대체하는 방식을 사용한다. 애니메이터 상태의 Exit Time이 기본 애니메이션의 길이에 고정되어 있기 때문에기본 애니메이션보다 오버라이드된 애니메이션의 길이가 더 길면 애니메이션이 끊길 수 있다. 나의 경우에는 애니메이션 자체는 끊기지 않았는데 애니메이션 말미에 있는애니메이션 이..

카테고리 없음 2024.11.21

내일배움캠프 48일차 TIL 유니티 심화 팀프로젝트 - 뱀서류(4일차)

20241120 / Unity_6차  11주차 수요일  오늘 한 일 1. 몬스터 스테이트 머신public class MonsterStateMachine : StateMachine{ public Monster Monster { get; private set; } public MonsterBaseState State_Idle { get; private set; } public MonsterBaseState State_Spawning { get; private set; } public MonsterBaseState State_Taunting { get; private set; } public MonsterBaseState State_Chase { get; private set; } ..

카테고리 없음 2024.11.20