분류 전체보기132 [프로그래머스] 1844 C# - 게임 맵 최단거리 문제 c#으로 처음 알고리즘을 풀다 보니, 기본 문법 관련하여 모르는 것이 많아 어려움을 겪었다.문제 자체는 기본적인 BFS문제로 난이도가 높게 느껴지진 않았다. 코드using System;using System.Collections.Generic;public class Solution{ public int solution(int[,] maps) { int answer = 0; bool[,] visited = new bool[maps.GetLength(0), maps.GetLength(1)]; BFS(maps, visited, (0, 0)); if (maps[maps.GetLength(0) - 1, maps.GetLength(1) - 1] ==.. 2024. 8. 16. [Study] MVC 패턴 MVC패턴은 디자인패턴 중 하나이다. MVC 는 Model, View, Controller의 약자이다.하나의 애플리케이션, 프로젝트를 구성할 때 그 구성요소를 세가지의 역할로 구분한 패턴이다. 모델1. 사용자가 편집하길 원하는 모든 데이터를 가지고 있어야 한다. 2. 뷰나 컨트롤러에 대해서 어떤 정보도 알지 말아야 한다. 3. 변경이 일어나면, 변경 통지에 대한 처리방법을 구현해야만 한다. 뷰 1. 모델이 가지고 있는 정보를 따로 저장해서는 안된다. 2. 모델이나 컨트롤러와 같이 다른 구성요소들을 몰라야 된다. 3. 변경이 일어나면 변경통지에 대한 처리방법을 구현해야만 한다. 컨트롤러 1. 모델이나 뷰에 대해서 알고 있어야 한다. 2. 모델이나 뷰의 변경을 모니터링 해야 한다. 서로 분리되.. 2024. 8. 1. [Unity] 디펜스게임 개발 - 분열 스킬 Split Skill 스크립트using DG.Tweening;using System.Collections;using System.Collections.Generic;using TMPro;using UnityEngine;public class SplitSkill : OneTimeSkill{ [Header("# Split Skill")] [SerializeField] private int splitEnemyCount; [SerializeField] private float moveDelay; [Header("# Split Skill Effect")] [SerializeField] private GameObject splitEffect; [SerializeField] priva.. 2024. 7. 31. [Unity] 디펜스게임 개발 - 유닛 소환 막기 스킬 물 보스는 유닛 소환을 막는 스킬을 사용한다. 보스가 나타나기 전 UI 보스 나타난 후 UI물보스는 일정 체력이 되었을 때 분열하므로 보스 체력을 보여주지 않도록 했다. 보스가 스킬을 사용하면 Boss 스킬이 체력바 아래에 생기고, 소환 버튼에 카운트다운 UI가 생긴다.저 카운트다운 UI는 물 보스 스킬 사용시에만 사용하므로 동적생성으로 Instantiate 해주었다. 어려웠던 점 물 보스는 분열할 때 자기 자신을 복제한다.즉 스킬 중복 사용이나 동적 UI 중복 생성, 분열 보스는 다른 Init 로직을 사용하는 등의 예외처리가 굉장히 많이 필요했다. BlockUnitSpawnSkill 스크립트using System.Collections;using UnityEngine;public class BlockUn.. 2024. 7. 30. [Unity] 디펜스게임 개발 - Hp Bar 최적화 문제 상황 생성되는 몬스터가 각각 자신의 World Space 캔버스를 가지고 있었다.디펜스 게임 특성 상 몬스터의 수가 많을 수 밖에 없는데, 이 때 몬스터가 많아질수록각각 가진 캔버스의 개수에 따라 드로우 콜이 발생하였다. window > Analysis > Frame Debugger에서 드로우 콜 개수를 확인해보았더니 몬스터가 21마리일 때 드로우콜 21개가 발생하는 것을 확인할 수 있었다. 따라서 HP바 이미지을 오브젝트 풀링을 사용하여 미리 생성해두고 Enemy가 스폰될 때 각각의 Enemy에 새로운 Hp바를 할당해주었다.enemy = GameManager.Instance.Pool.SpawnFromPool((int)EEnemyType.Basic).ReturnMyComponent();UIMan.. 2024. 7. 29. [Study] 네트워크 & 렌더링 파이프라인 네트워크 프로토콜 (IP, TCP, UDP)네트워크 프로토콜이란 데이터를 주고받는 데이터 통신을 원활하게 하기 위해 미리 정해놓은 통신 규약이다. Application 계층- 사용자와 바로 연결되어 있다.- 사용자로부터 정보를 입력받아 하위 계층으로 전달 or 하위 계층에서 전송한 데이터를 사용자에게 전달Presentation 계층- 받은 데이터를 인코딩 or 디코딩하여 데이터의 형식을 정해주는 계층 Session 계층- 네트워크 상 양쪽 연결을 관리하고 연결을 지속시켜주는 계층- TCP/IP 세션을 만들고 없애는 역할 Transport 계층- 데이터가 실제로 전송될 때 신뢰성을 보장하기 위한 계층이다.- 데이터 패킷이 정상적으로 전달되었는지 확인하고, 정상적으로 전달되지 못했다면 재전송하는 역할.- .. 2024. 7. 26. [Study] 게임수학 월드 스페이스 (World Space) 와 로컬 스페이스 (Local Space)의 차이동일한 오브젝트를 기준으로 월드 스페이스에서의 포지션을 월드 포지션,로컬 스페이스에서의 포지션을 로컬 포지션이라고 부른다.월드 포지션은 전체 3D 월드의 원점(0,0,0)을 기준으로 오브젝트의 절대적인 위치를 의미,로컬 포지션은 부모 오브젝트를 기준으로 오브젝트의 상대적인 위치를 의미한다. 벡터의 내적과 외적을 어느 상황에 사용할 수 있는가?내적1. 두 벡터 사이의 각도2. 물체가 앞에 있는지 뒤에 있는지 판별3. 시야각 내에 물체 판별 외적 1. 좌 우 판별 출처 - [유니티] 게임에서 Vector의 내적, 외적이 갖는 의의보통 고등학교 때 기하와 벡터를 다루며 기본적으로 내적과 외적을 배우는데, 다들 전문적인 .. 2024. 7. 24. [Study] 멀티스레드 & GPU 프로세스와 스레드의 차이? - 프로세스는 독립된 힙 메모리 영역을 할당받고, 그 프로세스 내의 쓰레드는 독립된 스택 메모리 영역을 할당받는다. - 여러 작업을 수행해야할 때 스케쥴링이 이루어진다 (스케쥴링 : 어떤 쓰레드 작업을 먼저 수행할지, 어떤 쓰레드를 더 많이 수행해야 효율적인지) Unity에서 Main Thread가 아닌 다른 스레드에서 Transform을 변경할 수 있을까?Unity의 대부분의 엔진 API는 메인 스레드에서만 안전하게 호출될 수 있다.따라서 Main Thread가 아닌 다른 스레드에서 Transform을 변경할 수 없다. 하지만 Unity MainThread Dispatcher 함수를 활용하면 다른 스레드에 접근이 가능하다. Task를 활용해서 타 스레드에 접근할 .. 2024. 7. 23. [Study] JSON과 직렬화 확인 문제public class SomeClass : MonoBehaviour{ [SerializeField] private int intValue = 2; private void Start() { Debug.Log(intValue); }} 1. 인스펙터에서 intValue의 값을 3으로 변경하고, intValue 앞에 선언된 [SerializeField] 제거 후 Debug.Log(intValue);의 출력 결과 -> 2intValue가 더 이상 직렬화되지 않으므로 스크립트 컴파일 시 2가 출력된다. 2. 인스펙터에서 intValue의 값을 3으로 변경하고, intValue 앞에 [HideInInspector]를 추가 후 Debug.Log(intValue);의 출력 결과.. 2024. 7. 22. 이전 1 2 3 4 5 6 7 8 ··· 15 다음