프로젝트의 유니티 버전을 업그레이드 하니 아래와 같은 에러가 발생했었다. Shader error in 'TextMeshPro/Distance Field': Couldn't open include file 'TMPro_Properties.cginc'. at line 126 해당 에러는 TextMesh Pro 컴포넌트와 관련된 셰이더 문제라고 한다. 해결 방법은 다음과 같다. 1. TextMesh Pro 재설치 유니티를 종료하고 이전 버전의 TextMesh Pro 폴더 삭제 Window > TextMeshPro > Import TMP Essential Resources를 선택하여 필수 리소스 재설치 위 방법으로도 해결이 안된다면 경로 문제일 수도 있다. 필자는 아래 방법으로 해결했다. 2. 셰이더 파일 위치..
Unity에서 2D로 게임을 개발하다 보면 계속해서 스크롤 되는 배경이 필요할 때가 있다. 구현 방식에는 여러 가지가 있지만 이 글에서는 카메라는 고정하고 이미지 자체를 스크롤 하는 방식을 사용한다. 먼저 Canvas 오브젝트를 생성하고 Render Mode를 Screen Space - Camera로 설정한 다음, Render Camera를 현재 사용하는 카메라로 설정해 준다. 그리고 Canvas 오브젝트의 자식 오브젝트로 Image 오브젝트를 생성해 준다. Source Image는 스크롤 할 배경 이미지로 설정해 주고, Material은 새로 생성해서 설정해준 뒤 Shader를 Unlit/Transparent로 설정해 준다. 배경 이미지는 반복해서 스크롤 되어야 하므로 Warp Mode를 Repeat으..
Unity에 2D 픽셀 아트 파일을 처음 넣어서 보면 위 이미지처럼 크기가 너무 작게 나올 때가 있다. 이것은 현재 픽셀 개수보다 Pixels Per Unit 값이 너무 크게 설정되어있어서 나타나는 문제이다. 이럴 때는 스프라이트 파일의 Inspector 창에서 현재 크기를 확인하고 Inspector 창에서 Pixels Per Unit 값을 적당하게 설정해주면 된다. 그러면 크기는 원본 파일처럼 커졌지만, 흐릿하게 보이는데 이는 현재 Filter Mode 옵션이 Bilinear로 기본 설정되어있기 때문이다. Inspector 창에서 Filter Mode 옵션을 필터가 없는 옵션으로 설정해 주게 되면 이렇게 선명하게 변하게 된다. 그런데 다시 자세히 살펴보면 원본과 색이 다르게 보이는데 현재 Compres..
Unit은 유니티의 거리 단위이다. 2D Sprite의 Pixels Per Unit은 1 Unit 당 몇 Pixel을 표현할지에 대한 옵션이다. Scene 화면의 눈금 한 칸이 1x1 unit이다. 3D Object의 Scale을 (1, 1, 1)로 설정했더니 딱 1x1 unit이 된다. 256x256 pixel의 2D Sprite를 Pixels Per Unit : 100으로 설정해주면 1 Unit 당 100 Pixel을 그려주므로 256 / 100 = 2.56인 2.56x2.56 unit이 된다. 1x1 unit의 크기로 표현하고 싶다면 256 / 256 = 1 이므로 Pixels Per Unit을 256으로 설정해주면 된다.
IEnumerable와 IEnumerator : C++의 Iterator와 같은 반복자에 대해서 C#에서 제공하는 인터페이스 세트 IEnumerable : IEnumerator GetEnumerator() 함수를 구현하도록 요구하는 인터페이스 interface IEnumerable { IEnumerator GetEnumerator(); } IEnumerable 인터페이스에는 foreach 구문에서 필요한 멤버들을 약속한 IEnumerator 형식의 객체를 반환하는 GetEnumerator() 함수를 제공하고 있다. IEnumerator : foreach 구문 사용을 위해 필수적으로 구현해야 하는 인터페이스 interface IEnumerator { bool MoveNext(); void Reset(); ..
코루틴이란? 실행을 일시 중지하고 Unity에 제어권한을 반환한 후 다음 프레임에서 중단했던 위치에서 계속할 수 있는 함수 코루틴의 특징 : 일반적인 함수는 한번 실행이 되면 종료될 때까지 제어권한을 넘기지 않는다. 간단히 말해 어떤 코드를 읽는 동안에는 다른 코드 실행을 할 수가 없다. 반면에 코루틴 함수는 실행 중에 yield 구문이 나왔을 때 Unity에 제어권한을 양도해줘서 다른 코드를 실행하다가 yield 구문의 조건이 끝났을 때 다시 코루틴 함수로 돌아와서 코루틴을 마저 실행한다. 코루틴 형식 : 코루틴 함수는 반드시 IEnumerator 메서드여야 하고, yield return이 한번 이상 반드시 사용되어야 한다. IEnumerator 메서드 형식으로 코루틴 함수를 만들고 StartCorou..
오브젝트 풀링의 사용 이유 : 오브젝트의 생성과 파괴는 부하가 크고, 오브젝트의 파괴는 GC(Garbage Collector : 가비지 컬렉터)를 발생시켜 성능을 저하시킨다. 따라서 게임을 할 때 생성, 파괴가 반복되는 오브젝트들 때문에 일어나는 GC를 방지하기 위해서 오브젝트 풀링을 사용한다. 오브젝트 풀링의 개념 : 풀링을 할 오브젝트 풀 구현 → 풀에 오브젝트 일정 개수를 만들어서 넣어 논다. → 풀에서 오브젝트를 꺼내서 사용 → 사용이 끝나면 다시 풀에 넣는다. → 필요할 때 다시 꺼내서 재사용(모든 오브젝트가 사용 중이라면 새로 생성해서 사용) 유니티 엔진에서의 구현 : using System.Collections; using System.Collections.Generic; using Unit..
싱글톤 패턴이란? 오직 하나의 인스턴스만 생성해 재사용하기 위한 소프트웨어 디자인 패턴 싱글톤 오브젝트 : 게임 매니저, 오디오 매니저 등 게임 내에서 유일하게 오직 하나만 존재하는 오브젝트 싱글톤 패턴의 특징 : 오직 한 개의 클래스 인스턴스만을 갖도록 보장하고, 어디서든지 그 인스턴스에 접근이 가능 아래는 유니티에서 사용되는 싱글톤 패턴의 예제이다. public class GameManager : MonoBehaviour { public static GameManager instance; void Awake() { if (instance) { Destroy(gameObject); return; } instance = this; DontDestroyOnLoad(gameObject); } } 이런 식으로..
소켓 통신과 시리얼 통신을 이용한 파일 전송 프로그램을 개발했습니다. 사용한 소켓 통신과 시리얼 통신의 종류입니다. ●Socket ○TCP/IP ○UDP Broadcast ○UDP Multicast ○UDP Unicast ●Serial ○RS-232 클라이언트에서 서버로 파일을 보내는 식으로 만들었습니다 ※github : https://github.com/A6ly/FilePasser ↑Client ↑Server
이미지 파일을 그레이스케일로 변환 후 마우스 이벤트를 이용하여 그림을 그려주는 프로그램을 개발했습니다. 그레이스케일로 변환 후 그리는 거라 원래 흑백이었던 이미지가 깔끔하게 잘 그려집니다. 그림판에서 마우스 이벤트를 이용하여 그리는 것이므로 선의 형태나 색도 원하는 대로 그림판에서 선택하면 됩니다. ※github : https://github.com/A6ly/AutomaticDrawing +2020.08.17※.exe file : (반드시 그림판 실행 후 그림판 위에 마우스 커서를 올려놓고 실행하기!!!) ↑ 원본 ↑ 그레이스케일로 변환 ↑ 결과물
VirusTotal에 회원가입을 하면 일반 사용자가 사용할 수 있는 API key를 제공합니다. 받은 API Key를 사용해서 VirusTotal 웹페이지에 들어가지 않고 파일, URL 검사를 할 수 있습니다. https://developers.virustotal.com/v2.0/reference VirusTotal VirusTotal has built its own in-house file similarity clustering functionality. At present, this clustering works only on PE, PDF, DOC and RTF files and is based on a very simple structural feature hash. This hash can ve..
C++ 소켓 프로그래밍으로 채팅 프로그램을 개발했습니다. 소켓 프로그래밍이란, 소켓을 이용해 컴퓨터끼리 통신하는 프로그래밍 방식입니다. 소켓이란 간단히 데이터를 받고, 받은 데이터를 가공해 다른 컴퓨터에 보내주는 것입니다. 대부분의 프로그래밍 언어에서는 사용하기 쉽게 구현이 되어있어서 형식에 맞춰서 사용해주면 됩니다. 위 그림의 구조처럼 작동합니다. 저는 하나의 서버를 통해 여러 개의 클라이언트가 데이터를 주고받을 수 있게 했습니다. ※github : https://github.com/A6ly/SocketTalk
WinAPI를 이용해서 PC 카카오톡 하단에 나타나는 광고창을 비활성화시키는 프로그램을 만들어보았습니다. Spy++로 카카오톡의 클래스 구조를 본 결과 하단의 광고는 EVA_Window란 클래스이고, 그 위에 있는 카카오톡의 핵심 부분은 EVA_ChildWindow란 클래스인 것을 알 수 있었습니다. 그래서 SetWindowPos 함수로 광고 클래스를 비활성화시키고, 그 위에 있는 창의 크기를 밑으로 늘려 광고가 없어져서 생긴 하단의 빈칸을 없애주었습니다. ※github : https://github.com/A6ly/HideKakaoTalkAd 2020-02-18 사용하기 편하게 Qt 라이브러리를 사용해서 Ui를 구현했습니다. PC 카카오톡 채팅방처럼 만들어 보았습니다. ㅎㅎ
- Total
- Today
- Yesterday
- Unity
- Level 02
- hackerschool
- wargame
- 안드로이드 멘토링
- reversing.kr
- Level 01
- Programming
- CodeEngn
- xcz.kr
- Reversing
- ftz
- Advance RCE
- 안드로이드
- HackingCamp
- unity2d
- c++
- Write-up
- 17th HackingCamp CTF
- Level 06
- pwnable
- 풀이
- 유니티
- 멘토링
- Android
- Level 03
- Level 04
- Level 05
- C#
- Basic RCE
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |