[Unity] Tile로 만든 맵, 선이 생겨서 마음에 들지 않을 때
·
공부/Unity
사진 속 예시처럼 이어서 그린 Tile 맵 사이사이에 선이 생겨서 마음에 들지 않을때 제일 간단한 해결 방법이다. Project Settings에 들어간다. Quality -> Anti Aliasing을 Disabled로 변경해준다. 선이 전부 사라지지는 않았지만 대충 봐줄만 한 형태가 됐다.
[Unity] player가 갈 수 없는 영역 표시하기
·
공부/Unity
player의 이동 영역을 지정하고 싶은데 방법을 알지 못해서 강의에서 알려준 그대로 복습해봤다. 새로운 타일맵을 생성한다. 이름은 collision 비슷한 느낌이 나게 만들어주면 된다. 사용하지 않는 sprite로 player가 갈 수 없는 공간을 쭉 둘러준다. collision에 새로운 script인 "Collision" 파일을 생성하고 컴포넌트로 추가해준다. public class Collision : MonoBehaviour { public Tilemap _tilemap; void Start() { } void Update() { List blocked = new List(); foreach (Vector3Int pos in _tilemap.cellBounds.allPositionsWithin) ..
[Unity] 게임 실행 작은 화면으로 하기
·
공부/Unity
어떤 스크립트던 게임과 함께 실행되는 스크립트 상에 코드 한 줄만 넣어주면 된다. GameScene 등과 같이 기본적인 스크립트에 넣는 걸 추천 Screen.SetResolution(640, 480, false); 순서대로 가로, 세로, 전체화면유무를 명시해준다.
[Unity] 몬스터가 죽을 때 나오는 효과는 어떻게 만들어야 할까
·
공부/Unity
우선, 내가 듣는 수업에서는 CreatureController라는 스크립트를 통해 대부분 생명체의 관리를 통합적으로 하고 있다. 플레이어와 몬스터 등은 CreatureController를 상속받아 사용하면 된다. 몬스터가 죽을 때의 관리는 MonsterController에서 한다. 몬스터를 죽이게 되는 WeaponController 또는 PlayerController에서 몬스터의 죽음을 관리하게 되면 애매한 상황이 발생한다. 몬스터를 주먹으로 때렸을 때, 무기로 때렸을 때, 몬스터가 잘못된 지역에 가서 스스로 죽었을 때 등등 각기 다른 Controller에서 몬스터의 죽음을 관리하기는 무리다. 우선 CreatureController에서 OnDamaged라는 함수를 새로 파준다. 특별한 내용을 넣지는 않고..
[Unity] player의 움직임 제어시 Time.deltaTime을 곱하는 이유
·
공부/Unity
기본적인 방법으로 player의 움직임을 제어할 때 Update문에 transform.position 변경을 통해 player의 위치를 조종하는 경우가 있다. 이때 Time.deltaTime을 곱하게 된다. 기기에 따라 혹은 프레임에 따라 Update문이 실행되는 시간은 차이가 난다. 각기 다른 프레임마다 같은 숫자(예를 들어 speed 값)만 곱해줄 경우 기기의 성능에 따라 게임 속도에 차이가 있을 수 있다. 때문에 Time.deltaTime을 곱해주어서 다른 기기에서도 같은 속도로 움직이게 할 수 있다.
[웹 서버] singleton, transient, scoped 생명주기 비교
·
공부/기타
.NET에서 종속성을 주입할 때 사용하는 3가지 서비스의 생명주기를 비교해보자. 기본 Blazor.Server의 프로그램을 조금만 수정하면 생명주기를 쉽게 알 수 있다. Data에 Test.cs 파일을 생성해준다. using System; namespace BlazorApp1.Data { public class Test { } public class SingletonService : IDisposable { public Guid ID { get; set; } public SingletonService() { ID = Guid.NewGuid(); } public void Dispose() { Console.WriteLine("SingletonService Disposed"); } } public class..
[웹 서버] Blazor Server에서 JavaScript 연동하기
·
공부/기타
1️⃣ Blazor Server안에 있는 css 안에 필요한 js 파일을 생성한다. 2️⃣ _Host.cshtml파일 가장 끝에 를 추가한다. (물론 이름은 본인이 정한 이름) 3️⃣ 사용하고자 하는 컴포넌트의 @code에서 기존에 만들었던 JavaScript 함수를 자유롭게 사용한다. 내가 test.js에서 만들었던 함수는 testFunction 안에 helloWorld와 inputName였다. helloWorld는 void형식이고 inputName은 string 타입의 Input Name이라는 변수를 받아서 작동되는 차이점이 있다.
[웹서버] SPA(Sigle Page Application)란?
·
공부/기타
기존에 사용하던 Traditional Page는 사용자가 웹페이지에서 아이콘을 클릭할 때마다 새로고침이 함께 실행되며 웹페이지 상의 모든 정보가 새로 로드됐다. 네이버의 경우가 그렇다. 기존 페이지에는 담기는 정보가 많지 않아서 클릭마다 새로고침이 되는 것이 부담 없었지만 지금 만들어지는 웹 페이지들은 정보가 매우 많이 담겨있다. 클릭마다 새로고침하기에는 부담이 크다. 이래서 생겨난 것이 Sigle Page Application다. Sigle Page Application은 기존 페이지와 달리 아이콘을 클릭하면 필요한 정보가 보이는 부분만을 새로고침 한다. 정보를 새로 불러들일 필요가 없는 부분은 새로고침 되지 않고 기존의 모습을 그대로 사용자에게 보여준다. 위에 있는 것이 기존에 사용하던 Traditi..
[게임 서버] await 사용하기
·
공부/게임 서버
직원이 한 명 뿐인 식당이 있다. 직원은 설거지, 요리, 주문, 서빙을 모두 담당해야 한다. async도 멀티스레드가 아닌 싱글스레드에서 활용되는 경우가 있다. static async void TestAsync() { Console.WriteLine("Start TestAsync"); Task t = Task.Delay(3000); t.Wait(); Console.WriteLine("End TestAsync"); } static void Main(string[] args) { TestAsync(); Console.WriteLine("while start"); while (true) { } } 메인에서는 TestAsync()를 실행한 뒤 while start라는 문장을 프린트한다. TestAsync 안에서..
[데이터베이스] 정렬(Sort/Sorting) 줄이기
·
공부/데이터베이스
정렬은 데이터베이스에서 많은 부하를 일으킨다. 데이터베이스를 사용하는 대부분의 경우 데이터의 양이 매우매우 많기 때문에 그 데이터를 정렬하기는 부담이다. 가용 메모리로 데이터를 커버할 수 없는 경우 디스크까지 찾아가야 한다. 하지만 우리가 인덱스를 적절하게 잘 사용한다면 데이터베이스에서도 불필요한 Sort를 하지 않게된다. 1️⃣ Merge Join Sort 원인 : Merge Join은 알고리즘 특성상 Merge 전 Sort를 한다. 사용할 때 유의해야 한다. ✅ 애초에 정렬된 인덱스인 Clustered Index를 사용하면 Sort 없이 조인을 할 수 있다. 2️⃣ ORDER BY 사용자가 원하는 순서로 정렬을 하기 위해 Sort가 사용된다. ✅ 테이블에 있는 인덱스 순서로 정렬을 한다면 불필요한 S..
[데이터베이스] JOIN(조인) : Nested Loop, Merge, Hash
·
공부/데이터베이스
조인은 여러 테이블에 있는 정보를 긁어와 합쳐서 살펴보는 작업을 말한다. 조인이 내부적으로 실행되는 데에는 3가지 방법이 존재한다. 1️⃣ Nested Loop (NL) 첫 번째는 흔히 NL 조인이라고 부르는 Nested Loop다. USE BaseballData; SELECT TOP 5 * FROM players AS p INNER JOIN salaries AS s ON p.playerID = s.playerID 야구 관련 기록을 담아놓은 데이터베이스에서 선수 정보와 선수 연봉 정보를 조인했다. 5개의 정보를 보여달라고 하면, SQL이 자동으로 중첩 루프 (Nested Loop)를 이용하여 조인을 하고 있다는 걸 알 수 있다. NL 조인은 2개 이상의 테이블이 있을 때 하나의 테이블을 기준으로 잡고 다..
[데이터베이스] Transaction(트랜잭션)이란?
·
공부/데이터베이스
우리가 게임을 할 때면 상대방과 거래를 하는 경우가 생긴다. 내가 100골드를 내고 상대방이 갖고 있는 방패를 구매하려고 한다. 나는 상대에게 100골드를 줬고, 상대도 나에게 방패를 줬다. 이때 게임에 오류가 발생해서 상대의 방패가 증발했다면, 매우 곤란한 상황이 펼쳐진다. 나는 돈을 냈는데 얻은 게 없고 상대도 방패를 줬으니 잘못이 없다. 이런 곤란한 상황을 막기 위해 있는 것이 바로 Transaction(트랜잭션)이다. 트랜잭션은 데이터베이스 혹은 비슷한 시스템에서 업무를 수행하는 작업단위를 말한다. 트랜잭션에는 4가지 특징이 있다. 1️⃣ 원자성(Atomicity) 게임서버에서도 중요하게 나왔던 개념이다. 한 번에 실행되어야 하는 코드는 중간에 멈추거나 삭제되지 않고 처음부터 끝까지 한 번에 실행..
[데이터베이스] 복합인덱스란?
·
공부/데이터베이스
데이터베이스의 검색 속도 향상을 위해서 사용하는 인덱스를 한 번에 여러 컬럼에 거는 것이 복합인덱스이다. 유명한 Northwind Database를 사용해서 복합인덱스의 개념을 알아보자. USE Northwind; -- Order Details를 복사한 테스트 테이블 생성 SELECT * INTO TestOrderDetails FROM [Order Details]; -- OrderID, ProductID 복합인덱스 생성 CREATE INDEX Index_TestOrderDetails ON TestOrderDetails(OrderID, ProductID); 테스트용 복합인덱스를 만들어준다. OrderID와 ProductID를 인덱스로 지정해주었다. -- 1 SELECT * FROM TestOrderDeta..
[데이터베이스] Clustered Index와 Non-Clustered Index
·
공부/데이터베이스
데이터베이스 상에서 검색 속도를 향상시키기 위해 인덱스라는 것을 사용한다. 일상 생활에서 사용하는 인덱스와 마찬가지다. 데이터베이스의 인덱스는 크게 2가지 종류로 나눌 수 있다. ✅ Clustered Index(클러스터드 인덱스) 클러스터드 인덱스는 쉽게 말해 영한 사전이다. 영한사전은 단어가 알파벳 순서로 기재된다. 사용자는 찾고자하는 단어의 알파벳을 생각하고 그 순서에 따라 단어를 찾을 수 있다. 클러스터드 인덱스도 마찬가지로 실제 데이터가 키에 따라 정렬된 상태로 저장된다. 클러스터드 인덱스는 테이블당 하나만 존재한다. 대부분의 PRIMARY KEY는 클러스터드 인덱스로 사용된다. ✅ Non-Clustered Index(논클러스터드 인덱스) 논클러스터드 인덱스는 색인을 생각하면 쉽다. 어떤 책들은 ..
[데이터베이스] Microsoft SQL 쓰는 순서와 실행 순서
·
공부/데이터베이스
쓰는 순서 SELECT - FROM - WHERE - GROUP BY - HAVING - ORDER BY 실행 순서 FROM - WHERE - GROUP BY - HAVING - SELECT - ORDER BY