Print Friendly and PDF

2025/06 37

[디펜스 게임 제작] 스킬 선택지 시스템

이번 시간엔 영웅들의 스킬을 강화하거나 추가하는 스킬 선택지 시스템을 제작하려 합니다. 제작에 앞서 필요한 것들을 미리 생각하고 구조를 짜 놓은 후 작업에 들어가려 합니다.최근 생각하지 않고 작업에 들어갔더니 코드 구조가 영 마음에 들지 않고 꼬이는 것 같아 여기에 글을 적어두고 하려 합니다. 우선 선택지 시스템을 작업하기 위해선 UI, 영웅들의 스킬 이렇게 두가지고 필요하며 UI - 현재 필드에 있는 영웅들 스킬중 랜덤으로 가져오는 기능과 스킬을 선택했을 때 그 해당 영웅에게 스킬이 추가되는 기능이 필요하며영웅 스킬 - 2가지 구분이 필요한데 현재 사용 가능한 스킬, 선택 가능한 스킬 이렇게 필요할 것 같아 보입니다. 추가로 영웅 스킬의 레벨을 달아서 동일한 스킬을 선택했을 경우 더 높은 수치를 가질..

[디펜스 게임 제작] 공격 사거리 표기

이번 시간엔 캐릭터 인포 버튼 클릭 시 해당 캐릭터의 공격 사거리를 표기하려 합니다. UI_Hero_Btn 클래스 수정public class UI_Hero_Btn : MonoBehaviour{ public static event Action _hero_click_event; ...생략 public void Btn_Click() { UI_Status._heroclass = () => _heroclass; _hero_click_event?.Invoke(_heroclass.GetID()); }}- 클릭하면 _hero_click_event 이벤트 실행 시키도록 추가 UI_Status 클래스 수정using System;using UnityEngine;public cl..

[이론] ECS

이번 시간엔 ECS와 Job, Burst에 대해 알아보려 합니다.그전에 알아봐야할 OOD에 대해 간단하게 설명해보려 합니다. OOD란?(Object Oriented Design)- 속성, 기능을 하나로 묶어 객체로 표현하고 이 객체를 기반으로 점차 확장, 연결하여 다양하고 긴밀한 객체들을 개발합니다. 이러한 방식은 개발자가 의도한대로 빠른 개발이 가능한 장점이 있지만 여러 문제점이 있습니다 객체 지향 디자인의 문제점- 기능이 추가 될 때마다 구조가 복잡 : 새로운 객체들이 생길때마다 점점 늘어나기 때문- 과거 개발 히스토리를 파악해 두어야함 : 위에 설명한 것처럼 새로운 것들이 생길때마다 늘려가기 때문에 과거 히스토리를 모르면 어려울 수 있음- 연산처리가 객체 중점 : CPU보다는 메모리를 많이 사용하며..

[읽코좋코] 변수제거와 중간 결과 삭제

이전 시간과 다르게 변수제거와 중간 결과 삭제에 대해 작성해보려 합니다. 이전 시간엔 설명변수username = line.split(':')[0].strip()요약변수final boolean user_owns_document = (request.user.id == document.owner_id);형태로 설명 변수와 요약변수를 사용하는 것에 대해 배웠습니다. 이번 시간엔 가독성에 도움이 되지 않는 불필요한 임시변수 제거에 대해 알아볼 것입니다.예를 들어now = datetime.detetime.now()는 불필요한 임시변수 입니다. 왜냐하면 복잡한 표현을 잘게 나누지 않았고 명확성에 크게 도움이 되지 않습니다.무엇보다 한 번만 사용되어 중복된 코드를 압축하지 않기 때문입니다. 무조건 적으로 임시변수를 만..

[디펜스 게임 제작] 강화 시스템 변경

현재 강화시스템은 단일로 강화하면 모든 영웅들이 강화가 되도록 했습니다.좀 더 전략적으로 강화 시키기 위해 개별로 강화 시킬 수 있도록 변경할 예정입니다. - 이런 느낌으로 각 영웅들의 정보를 띄어주고 클릭하면 하단에 강화 버튼이 나오도록 할 예정입니다. 클래스 구조1. 먼저는 UI_Hero 클래스에서 UI_Hero_Btn클래스를 초기화 해준다.2. UI_HeroBtn을 클릭하면 UI_Status 클래스를 가진 오브젝트가 활성화가 된다.3. 활성화된 UI_Status는 UI_Btn_Status_Upgrade클래스를 가진 버튼 오브젝트를 초기화 해준다.4. 활성화된 UI_Btn_Status_Upgrade 버튼을 클릭하여 이벤트를 통해 Status를 StatsuUpgadeManager로 업그레이드 한다.5..

[디펜스 게임 제작] 게임 오버 처리

이번엔 게임 오버처리를 해볼 것입니다. 게임오버 팝업창을 제작한 후 보호 오브젝트가 사망하거나 모든 스테이지를 클리어 했을 때 팝업창이 나오도록 할 예정입니다.PlayManager에 Action을 추가 후 필요 내역들을 구독하여 사용할 예정입니다. 팝업창 제작using TMPro;using UnityEngine;using UnityEngine.SceneManagement;public class UI_GameOver : MonoBehaviour{ [SerializeField] TextMeshProUGUI _stage; [SerializeField] TextMeshProUGUI _title; const string STAGEINFOTEXT = "STAGE {0} - {1}"; publi..

[디펜스 게임 제작] 스테이지 표시

이번 시간엔 스테이지 번호 표시를 만들 예정입니다. UI추가 및 스크립트 추가using TMPro;using UnityEngine;public class UI_Stage : MonoBehaviour{ [SerializeField] TextMeshProUGUI _stagenumber; string STAGENUMBER = "STAGE {0}/{1}"; void Start() { StageNumberSetting(); PlayManager._play_stageclear += StageNumberSetting; } void OnDisable() { PlayManager._play_stageclear -= StageNumberSettin..

[디펜스 게임 제작] 강화 시스템

화면에 보이는 강화 버튼을 클릭하여 Status를 강화 시키는 시스템을 제작할 것입니다. 방법- 1번 클릭당 1레벨업으로 하여 Manager클래스에 status레벨 저장- 저장한 레벨을 최대 status값을 이용해 레벨당 얼마의 값을 넘겨줄 예정- 넘겨준 값을 이용해 현재 유저의 Status값에 추가 UI_Btn_Status_Upgrade 클래스 제작using System;using TMPro;using UnityEngine;public class UI_Btn_Status_Upgrade : MonoBehaviour{ [SerializeField] ESTATUSUPGRADE _estatusupgradekind; [SerializeField] TextMeshProUGUI _level; [Se..