개발 TIL 71

5/14 부트캠프 개발 TIL (FixedUpdate)

오늘은 오브젝트를 이동할때 벽에 닿을때 어떻게 하는지 최적화하는 방법을 알아보려 한다. 이렇게 이동하는 오브젝트에 벽이 있다면 능동적으로 벽까지 닿아도 계속 벽방향으로 이동하는 경우가 있을 것이다. 일반적으로 플레이어를 이동구현을 코드로 이렇게 쉽게 구현하면 void Update() { float movingX = Input.GetAxis("Horizontal"); float movingY = Input.GetAxis("Vertical"); float speed = 5f; transform.Translate(new Vector2(movingX, movingY) * Time.deltaTime * speed); }이렇게 생각할수도 있다. 하지..

개발 TIL 2024.05.14

5/13 부트캠프 개발 TIL (InputAction 활용)

오늘배운것 : InputSystem 한걸음 전에 공부했던 내용에 대해서 완전한 이해가 가지 않았다.그래서 InputSystem이 어떤 구조가 있어야 게임 입력이 제대로 들어가는지 알아보도록 하자 InputSystem의 구조를 다이어그램으로 보자면 public class SampleController : MonoBehaviour{ public event Action OnMoveEvent; public event Action OnConfirmEvent; public event Action OnCancelEvent; //event속성을 Invoke메서드로 호출한다. public void CallMoveEvent(Vector2 move) => OnMoveEvent?.Invoke(mo..

개발 TIL 2024.05.13

5/10 부트캠프 개발 TIL (오브젝트 풀링과 애니메이션 컨트롤)

오늘 배운것오브젝트 풀애니메이션 컨트롤애니메이션 오버라이드 컨트롤러 오브젝트 풀오브젝트 풀은 게임 개발에 널리 사용되는 테크닉으로 객체를 미리 생성해두고 필요할때 객체를 가져다가 쓰고 다 사용하면 다시 돌려주는 기법이다. 장점은 게임의 성능과 가비지 컬렉터를 최적화할 수 있다는 점이다. 일반적인 생각으로는 만약에 플레이어가 폭탄을 던질 때 던질때 Intstantiate로 생성하고 터지면 Destroy로 파괴하는 식으로 생각하는데 이 기법은 메모리 누수와 가비지 컬렉터가 남게 된다. 이것들은 한번만 실행되게 하면 몰라도.화살 프리팹을 20개를 만들고 Arrow라는 Tag를 정의하여 GameManager안에 적용시켰다. 오브젝트 풀을 코드로 구성해보면public class ObjectPool : MonoBe..

개발 TIL 2024.05.10

5/9 부트캠프 개발 TIL (Scriptable Objective)

오늘 배운 것 : Scriptable Objective, 화살 날아가는 구현Scriptable Objective (SO)Unity에서 저장하고 관리하는 유연한 데이터 컨테이너로 게임 데이터를 저장하거나 재사용하는데 사용된다.코드와 데이터를 분리하여 깔끔하게 보인다. 예를 들어 캐릭터 클래스의 안에서 SpriteRenderer, Transform, Animator 등의 많이 사용되는 속성들을 Scriptable Objective에 그 속성들을 지정하고 클래스가 Scriptable Objective에서 읽기 전용으로 가져와 사용할 수 있는 점이다.하나의 스크립터블 오브젝티브를 여러 게임오브젝트에 참조하거나 재사용할수 있다. 예를 들어 몬스터 프리팹이 공격, 방어, 체력이 들어있다고 한다면 이를 100개를 만..

개발 TIL 2024.05.09

5/8 부트캠프 개발 TIL (InputAction과 Quaternion)

오늘 배운 것 : InputAction, Quaternion InputActionInputManager란 에디터 창에 Edit > ProjectSetting > InputManager에 들어가보면 각 키워드에 따라 상하좌우 또는 버튼 입력을 키보드, 마우스 조이스틱을 입력받아서 처리하는 매크로 방식이다. penguinMovingX = Input.GetAxis("Horizontal"); penguinMovingY = Input.GetAxis("Vertical");InputManager를 활용한 예 InputManager는 float형 실수로 0에서 1로 입력을 받는다 (음수의 경우는 -1~1까지)그리고 Input.GetAxis와 Input.GetAxisRaw함수가 있는데 공통점은 ..

개발 TIL 2024.05.08

5/7 부트캠프 개발 TIL (C#문법 프로젝트 후기)

오늘 프로젝트 발표후 소감은 많은 걸 준비하느라 수고 많지만 아직 부족한게 있다.일단 시현영상 부분에서 여러 내용을 일일이 설명하려고 하지 말고 중요한 내용을 집어서 설명하는 것이다.모든 기능을 보여줘야 되긴 하지만 그것들을 전부 보여주기에는 시간문제와 듣는 사람들이 지루해질 수 있다.당연히 발표할때 긴장이 되긴 하지만 중요한 점은 핵심이 될만한 내용을 설명을 하는 것이다. 프로젝트 저장소https://github.com/hajeehoon12/Sparta_B_01_5P.GG GitHub - hajeehoon12/Sparta_B_01_5P.GG: B- 01 group name 5P.GG Team Project / Dungeon BattleB- 01 group name 5P.GG Team Project / ..

개발 TIL 2024.05.07

5/3 부트캠프 개발 TIL (프로젝트 UML 결과)

오늘은 지금까지 만든 코드를 살펴보고 사용한 클래스 및 메서드를 다이어그램으로 구조시키며 정리하자. 전체 클래스Camp, Dungeon, DungeonData, Inventory, Item, ItemData, Market, Monster, Player, PlayerSkill, Quest, Skill, Stage, Status내가 작업한 클래스Monster, Stage, PlayerSkill 유스케이스 다이어그램으로 표현하면대충 이렇다. 그리고 각 팀원들이 작성한 클래스를 다이어그램을 표현하면이렇게 작성하는게 맞을까 모르겠지만 일단 클래스가 다른 클래스를 사용하면 화살표로 연결을 한다. 인터페이스 같은 경우에는 상속을 준 인터페이스에게 호같은 화살표로 연결을 하고 일반클래스의 상속을 받은 클래스는 삼각화살..

개발 TIL 2024.05.03

5/2 부트캠프 개발 TIL (스킬 추가)

오늘 구현한 내용 : 직업에 따른 스킬 구현 이번에는 궁수와 마법사 스킬을 구현하고 도적 스킬을 변형하자. 궁수가 사용할 스킬 - 소울 애로우 : 대상 몬스터를 향해 공격하면 그 주변에 있는 몬스터까지 피해를 입힌다. 예를 들어 2번 몬스터를 향해 공격했으면 1번과 3번 몬스터까지 피해를 입힌다. (데미지 : 치명타 x 1.4 + 1.7)마법사가 사용할 스킬- 갓블레스 힐 : 패시브 스킬로 자신의 체력을 최대 체력의 10%만큼 회복한다.- 샤이닝 레이 : 여러 몬스터를 공격하는데 공격할 몬스터를 선택하면 선택된 몬스터는 더 큰 피해를 입힌다. (공격 x 1.5 + 1.2, 타겟 몬스터는 치명타 추가) //궁수 스킬 public static void SoulArrow(Player ..

개발 TIL 2024.05.02

5/1 부트캠프 개발 TIL (전투 시스템에 관하여)

오늘 구현한 것 : 몬스터 아이템 드랍, 경험치 및 골드 보상, 스킬 구현 지금까지 스테이지 구현과 몬스터 생성하고 스테이지 안에 전투 들어가 결과를 나타내는 기능을 만들었다.이번에는 플레이어가 몬스터를 쓰러뜨리면 경험치와 골드 추가로 아이템까지 얻는다. 이 시스템은 다른 RPG게임에서도 마찬가지이다. 먼저 몬스터가 죽으면 떨구는 아이템을 구현하자. 각 종류별로 구현한 몬스터에 떨어뜨릴 아이템을 만들자.public override void add_Drop_Item(){ int itemIndex = new Random().Next(0, 6); //드랍할 아이템 종류 int dropPercent = new Random().Next(0, 100); //드랍할 각 아이템종류의 확률 //..

개발 TIL 2024.05.01

4/30 부트캠프 개발 TIL (몬스터 클래스 구현2)

어제의 팀프로젝트를 이어서 Stage 클래스의 필요한 기능을 구현하자 스테이지는 3개까지 만들어 다음 요구사항을 반영하자//stage를 만들어서// 1스테이지는 (공허충 최대 2마리 나머지 미니온)// 2스테이지는 (대포 1마리 나머지는 미니온이나 공허충)// 3스테이지는 (대포 최대 2마리 나머지는 미니온이나 공허충)전투를 시작하면 1~4마리의 몬스터가 랜덤하게 등장합니다. 표시되는 순서는 랜덤입니다. 우선 Stage클래스 안에서 기능을 원활히 돌아가게 하기 위한 필드를 선언한다.enum MonsterSpices { Minion, Worm, CanonMinion }; //몬스터 종류List monsterInStage; //스테이지에 몬스터 4마리 출현할 리스트int[] monstersCount ..

개발 TIL 2024.04.30