스파르타 내배캠54 스파르타 내배캠 Unity 3기 - 55 Save & Load 아직 구현되지 않은 부분이 많긴 하지만기본적으로 게임을 실행 할 때마다 파츠가 초기화 된다면 조금 불편할 것 같다. 그래서 저장할 데이터는 많아도 먼저 파츠 정보를 저장하고 불러오는 로직을 짜 보았다.<p data-ke-size="size1.. 2024. 4. 10. 스파르타 내배캠 Unity 3기 - 54 파츠 분할 기존에 생각했던 방식은 다음과 같았다. 상체 = 무기 / 하체 = 이동 하지만 그러기엔 너무 단순하고 재미요소도 떨어진다고 생각했기 때문에 무기파츠를 아예 분리 시키기로 했다. 레퍼런스 게임이었던 아머드코어6와 마찬가지로 양팔, 양어깨에 무장을 따로 달 수 있는 구조로 만들어보기로 했다. 일단 파츠를 분할시킨다. Lower는 기존과 같다. Upper는 모델링 자체가 무기가 사라졌고 무기 사용로직을 없앴다. Weapon은 분리되어 추가되었고 다음과 같은 구조를 가진다. public class WeaponPart : BasePart { [SerializeField] Transform[] _muzzlePoints; [SerializeField] LayerMask _groundLayer; public.. 2024. 3. 28. 스파르타 내배캠 Unity 3기 - 53 ModuleManager 구조 변경 DataManager가 생겨나게 되면서 파츠 정보를 받는 구조가 싹 바뀌게 되었다. 어느정도 진행 후 작성하는거라 정리하기가 쉽지 않다. 먼저 게임을 시작할 때 기존 방법으론 Resources.LoadAll 을 통해 해당 폴더의 모든 파츠를 긁어오는 식으로 진행을 했었다. 하지만 현재는 DataManager에 저장된 PartData에 Prefab_Path가 담겨있고 해당 위치의 것을 가져올 수 있게 만들어 둔 상태이다. 게임을 시작하면 ModuleManager의 Init 메서드를 호출해 당장 플레이어에게 보여줄(해금이 된) 파츠들만 Dictionary에 담아놓도록 한다. public void Init() // 게임 시작 시 Resources 폴더 내 초기 파츠 담기. .. 2024. 3. 27. 스파르타 내배캠 Unity 3기 - 52 Excel Importer 데이터를 관리하기 위해 선택한 방법은 Excel로 작성된 시트를 Excel Importer 패키지를 통해 Scriptable Object로 변환하여 사용하는 방식을 채택했다. 사용한 방법은 다음과 같다. 1. 엑셀로 시트를 만들어 준다. 2. 시트와 양식을 같게 직렬화 가능한 클래스를 만들어준다. (사용법이 익숙치 않아 한 곳에 모든 데이터를 몰아놨다...) 3. Excel 파일을 프로젝트 폴더에 넣어준다. 4. Excel Importer 를 실제로 사용할 클래스를 만든다. ExcelAssetScript 를 사용하면 같은 이름의 PartDbSheet.cs가 만들어지지만 코드를 보다시피 BaseDbSheet 를 상속받는데 각 시트는 XXDbSheet 에서 생성되는 것을 사용하지만.. 2024. 3. 26. 스파르타 내배캠 Unity 3기 - 51 ActionManager 지금까지 UI 작업들을 하면서 여러가지 상호작용에 대한 반응을 Action으로 처리하였다. 이전 글에는 ActionManager를 사용하여 대부분의 Action을 처리하였지만 한창 만들던 중에는 여기저기 Action이 static으로 마구마구 뿌려져있었다. 어차피 Action을 다양하게 쓸거라면 하나에 몰아서 사용하는 ActionManager가 있으면 좋지 않을까? 라는 생각이 들었고 대부분의 Action을 이 Manager에 몰아 넣었다. public class ActionManager { // # Player public event Action OnPlayerDead; // # HUD public event Action OnCoolDownRepair; public event .. 2024. 3. 22. 스파르타 내배캠 Unity 3기 - 50 Bullet 피격과 HUD UI 연동 Bullet 피격은 탄막을 작업하는 팀원과 엮이는 부분이기 때문에 합체!를 하는 과정이 필요했다. public enum BulletOwner { Player, Enemy, } public class Bullet : PoolAble { [SerializeField] BulletOwner owenr; private void OnTriggerEnter(Collider other) { switch (owenr) { case BulletOwner.Player: if (other.TryGetComponent(out Boss boss) == true && owenr == BulletOwner.Player) { boss.GetDamaged(5); EnemyBulletPoolMana.. 2024. 3. 21. 스파르타 내배캠 Unity 3기 - 49 PartsSO UI 연동 각 파츠에는 SO 가 달려있고 실제 적용될 수치들이 들어있다. public class BasePartsSO : ScriptableObject { [Header("# Info")] public int dev_ID; public string dev_Name; public string display_Name; [TextArea] public string display_Description; [Header("# Common Stats")] public float armor; public float weight; } (이 외에도 Lower, Upper SO가 있다.) 그리고 실제 파츠가 변경될 때 모듈만 변경되는 것을 보는게 아니라 각 수치들의 변화도 시각적으로 보여야 한다. 그럼 UI를.. 2024. 3. 21. 스파르타 내배캠 Unity 3기 - 48 Lockon Indicator 3D 3인칭 게임 + 정신없는 화면속 락온 기능없이 플레이를 하는것은 많이 어지럽고 하기 싫을 것이다... 그래서 우리 게임에는 락온 기능을 넣어 해당 적을 계속 주시하도록 해주었다. 여기서 락온 기능을 어디서 담당할지 조금 고민이 되었는데 현재 플레이어의 전반적인 로직을 담당하는 PlayerStateMachine에서 이것또한 담당하기엔 코드가 많이 길어지기도 하고 그다지 좋은 선택은 아니라고 생각되어 LockonSystem Class를 만들어 여기서 담당하도록 만들었다. 먼저 Lockon을 할 키 입력으로 마우스 휠 클릭을 선택하였고 [Serializable] public class LockOnSystem { [SerializeField] Transform _followO.. 2024. 3. 19. 스파르타 내배캠 Unity 3기 - 47 위잉~ 치킨(먹고싶다) ModuleSystem(InGame Module 생성) 이전에 진행했던 심화주차 개인과제의 연장선인 ModuleSystem. 플레이어는 상체 / 하체로 구분되어있는 일명 파츠를 선택하여 플레이 가능하다. 완성이 되어야하는 구조는 위의 사진과 같지만 이번에 작업한 것은 InGame Scene에서 Module이 생성되는 것이다. 때문에 미리 만들어둔 Leg_01, Upper_01 프리팹을 이용해 Resources 폴더내의 파츠들의 정보를 끌어오고, 이를 생성하는 로직을 만들었다. public class ModuleManager 전반적인 Module 로직을 담당해줄 ModuleManager. 현재 만들어진 기능을 순서대로 나열하면 Resources 폴더 내 각 Part를 저장한다. (I.. 2024. 3. 12. 이전 1 2 3 4 ··· 6 다음