유니티 부트캠프 8기/Ch04. Unity 게임 개발 입문 13

몬스터 투사체 생성을 안하는 문제

처음에는 애니메이션이 재생되지 않는 줄 알았다하지만  강의자료에서는몬스터인 Orc_Shaman의 애니메이션이 잘 재생되며밑에 총알로 쓰이는 Skull이 잘 생성된다 총알의 생성은ReaponHandler에서 public class RangeWeaponHandler : WeaponHandler{... protected override void Start() { base.Start(); projectileManager = ProjectileManager.Instance; SetWeaponSpeed(Delay); } public override void Attack() { base.Attack(); float..

유니티에서 Newtonsoft json을 사용한 직렬화, 역직렬화

Newtonsoft를 사용한 직렬화는 저번에 해봤으니저번에 못봤던 현상만 기록하자 1. public 변수만 Serialize 할 수 있다 public void SaveAllMonsterSkills() { bossMobSkills = skillManager.bossMobSkills.Values.ToList(); string filePath = GetFilePath("AllMonsterSkillDatas.json", false); string jsonData = JsonConvert.SerializeObject(bossMobSkills); File.WriteAllText(filePath, jsonData); Debug.Log("몬스터 ..

몬스터의 애니메이션(Blend Tree)

우선 애니메이션부터 만든다4방향이니까 4개가 필요하다 저번 피드백에서 Blend Tree 애니메이션을 공부해보라고 했던 것이 생각났다그리고 또한 플레이어를 맡은 팀원이 Blend Tree 애니메이션을 사용해서구조를 맞추기 위해 Blend Tree 애니메이션을 사용했다 Blend Tree 애니메이션을 적용해보자Blend는 기본으로 주는 변수다(뭐하는데 쓰는지는 잘 모르겠다)MoveX, MoveY는 float 변수다Is로 시작하는 3가지 변수는 bool 변수 일단 초록 슬라임의 애니메이션이다Death 애니메이션과 hit(피격) 애니메이션까지 만드는건구조를 바꿔야하니까 생략한다 대기, 이동, 공격 3상태만 Blend Tree로 만들자 모든 몬스터에 만들었고테스트도 잘 되었다런타임중에 되면 문제없을 듯하다

ECS에서 Normal몬스터와 Boss몬스터의 이동은 같은 Entity를 사용해야할까?

이동은 공격과 함께 묶인 경우가 많다이번 입문강의에서도 HandleAction에서 이동과 공격을 함께 처리하고 있다public class EnemyController : BaseController{... // 플레이어는 이동, 공격을 어떻게 할지 키 입력을 받고 결정했지만 // 몬스터는 이동을 할지 공격을 할지 스스로 판단 protected override void HandleAction() { base.HandleAction(); if (weaponHandler == null || target == null) { if (!movementDirection.Equals(Vector2.zero)) movementDirection ..

Monster의 구조 설계(Entity Component System)

몬스터를 구성할 때 일반적으로는몬스터의 기본 데이터를 가진 Interface나 추상클래스의 상속을 받아서근거리 몬스터, 원거리 몬스터, 보스 몬스터 등을 구현한다 하지만 이번 Unity 입문 강의에서 ECS(Entity Component System)을 사용하여 플레이어와 몬스터를 구성하였다(무려 "입문" 강의다) 나도 처음에 강의를 볼 때는 전혀 이해를 못하였지만유니티 입문 강의에서 쓴 Entity 라는 폴더 이름에서, Entity가 무엇인지 궁금해서 공부했다찾아봤더니 Entity Component System이라는 구조를 사용하고 있음을 알게 되었다 Entity Component System은 기존의 Interface 상속이 아닌기능별로 컴포넌트를 나누어 이를 추가하여 사용하는 방식이다마치 유니티에서..

유니티 팀프로젝트 시작

금요일부터 일주일동안 팀프로젝트를 진행한다 맨 처음 시작했을때 짧은 기간에 했던 미니프로젝트 이후로첫 유니티 프로젝트이다 이번 유니티 프로젝트에서 팀장을 맡게 되었다부족하지만 열심히 하자 궁수의 전설을 SF 우주인 버전으로 만들기로 했다(에셋이 좋은게 그것뿐이었다) 각자 업무 분담을하여 필수 구현 요소 중에서는 몬스터 AI(일반몹, 보스몹)을 만들기로 했다 그리고 깃 organization과 repository 만들고팀원들 각자가 branch를 만들어서 개발 환경을 만들었다 그리고 오후에는 입문 강의, 어제 공부했던 OOP 특강을 복습하며 결합도를 낮추고 응집도를 높이는 방식을 조금 더 이해하기로 하였다

Npc 만들기

골드메탈의 강의를 많이 참고해서 만들었다하지만 구조는 분명히 다르니까 Npc가 가져야 할 멤버변수: id, bool값(npc인지 아닌지 구분)bool값이 왜 있어야 할까 생각했다id는 npc도 아닌 모두가 가질 수 있으니까다른 것과 구분을 위해 bool값을 하나 정도 가지고 있어도 괜찮다 다음은 상호작용npc는 어떻게 플레이어와 상호작용할까내가 생각한 Npc와의 상호작용은 1. Npc와 플레이어가 이벤트(클릭하거나 충돌하거나. 여기서는 충돌만 생각했다)가 발생2. 기본적인 대화: UI가 열려있는 상태에서 다음으로 넘어가기 버튼을 누르면, npc의 대화(어디에 저장이 되어 있으며, 이벤트가 발생하면 데이터 읽기 메서드를 호출하여, 대화를 읽는다)3. 구매/퀘스트  이정도면 되겠다 기본적인 ObjData 클..

isometric 카메라 제한 구역 설정, mathf.clamp

마름모의 내부에서만 움직이게 하려면 우선 네 정점을 알아야한다(-20,0), (0,-10), (20,0), (0,10)을 정점으로 하는 마름모 내부에서만 플레이어 따라간다 마름모의 중심을 원점으로 사분면을 그리면, 절편을 지나는 직선 4개가 보이는데그걸 이용하면 된다 float dx = Mathf.Abs(position.x - center.x); // X 거리 변화량 float dy = Mathf.Abs(position.y - center.y); // Y 거리 // 마름모 내부라면 그대로 반환 if (dx / width + dy / height   Mathf.Clamp 메서드의 매개변수는 순서대로 제한하고자 하는 값, 최솟값, 최댓값 이다 /..

미니게임 추가, 이벤트 트리거를 통한 미니게임 실행, 게임 관련 UI, GameObject.Find와 transform.Find, Resources.FindObjectsOfTypeAll<T> 메서드 차이, LoadScene 다음에 호출되는것, DontDestroyOnLoad 한 뒤에 매니저의 자식으로 된 것을 다시 연결하는 방법

이부분도 손이 많이갔다 UI를 코드로 연결하는 것이 어려웠다 왼쪽의 Fish에 닿으면 트리거가 작동하여 원래 비활성화된 FishUI가 활성화되고 그 아래에 있는 빈 게임오브젝트인 EnterMini_1을 활성화하고 UI를 보여준다클릭하면 게임이 실행되고, EnterMini_1을 비활성화한다 게임을 종료하고 다시 돌아오면 ExitMini_1을 활성화하여 게임 결과를 보여주는 방식이다문제는씬을 바꾸어 로드할때 참조가 해제되는 점인데이를 막기 위해서FishUI는 매번 Start에서 자식의 오브젝트에서 EnterMini_1과 ExitMini_1을 연결해야한다FishUI는 씬이 바뀔때마다 호출되어 자식오브젝틑를 찾아서 연결해야 하므로 Start메서드가 있어야한다연결한 다음에도 또 자식에 접근하여 BFScoreTex..

isometric 이동, 공격, animation

4방향의 애니메이션이 모두 필요하다 나는 왼쪽아래방향(DL)과 왼쪽위방향(UL)방향의 애니메이션만 만든 뒤이를 좌우대칭하여 사용한다 다행히도 공격의 경우검 공격과 활 공격의 애니메이션이 모두 있었다이것또한 DL과 UL버전으로 2개씩 만들고 좌우대칭하여 사용하기로 하였다 이제 이동과 공격로직을 구현하여 확인해보자 문제가 있다이동로직에서 isometric은 마름모의 대각선이 2:1이라서 30도 방향으로 이동해야하는데현재는 직교좌표의 합인 45도로 이동하는 문제가 있었다(왼쪽 아래를 아래 화살표가 되게 하였을 때) 이소메트릭 좌표계에서 기본적인 방향 매핑위(↑) → ↗ (우상)아래(↓) → ↙ (좌하)왼쪽(←) → ↖ (좌상)오른쪽(→) → ↘ (우하)이에 맞추어 이동하게하니horizontal은 오른쪽이 +v..