일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- 산토리 하이볼
- 구글 컨퍼런스
- shader
- 주식단테
- 112일선
- 상계9동
- 스즈메의 문단속
- GenAI
- 이득우의 언리얼 프로그래밍1
- JavaScript
- 주식
- 2023 게이밍 인 구글 클라우드
- 작계훈련
- 리팩터링
- 공부
- URP
- 2023 게이밍
- unity
- 리팩터링 3장
- 리팩터링 4장
- 이득우의 언리얼 프로그래밍 1
- 2023 Gaming
- 2023 구글 클라우드
- 언리얼 5
- 448일선
- 1일차
- 224일선
- 전주비빔 라이스 버거
- 스포일러 주의
- 언리얼5
- Today
- Total
개발 이야기 안하는 개발자
투명앱 만들어보기 본문
영감을 받은 게임
Outcore
유니티를 사용한 게임
게임소개
게임을 시작하면 바탕화면에 작은 점이 생긴다.
점은 점점커지며 캐릭터가 되고, 캐릭터가 플레이어(유저)에게 말을 걸어 상호작용을 한다.
여기서 특이했던 기술은 바탕화면의 파일들과 WindowSystem들(시간, 파일구성 등) 과 상호작용을 한다는 것이다.
절반이상의 게임플레이는 바탕화면에서 진행된다.
어떻게 만든것일까!
씬의 메인 카메라를 수정한다.
solid Color
Background - 0,0,0,0
D3D11 체크 해제한다.
더블 버퍼링
2개의 화면버퍼를 사용해서 A버퍼에 그리고 , B버퍼에 다음 장면을 미리 그려놓고,
A버퍼를 보여준다.
A버퍼가 들어가고 B버퍼가 앞으로 나와 보여준다.
다음 A버퍼에 다음 장면을 그리고 다시 스왑하는 방식으로 사용자에게 프레임이 그려지는 과정이 나타나지 않게 하는 기법이다.
이러한 기술을 더블 버퍼링이라고 부른다.
DX는 이러한 내용을 전면과 후면의 버퍼 포인터를 서로 맞바꾸는 플리핑 기술(Flipping)을 사용하여 스왑 체인을 사용한다.
플리핑
DXGI flip model swapchain for D3D11
비활성화한 내용은 해당 스왑체인 기술을 사용하지 않겠다 라고 선언한 내용이다.
해당 기술은 화면 투명성을 지원하지 않는다.
따라서, 카메라의 뒷 화면을 투명하게 만들어도 보이지 않게 되는 원리이다.
그렇기 때문에 해당 기능을 껐고, 이렇게 끄게되면 BitBlt 모델의 스왑체인을 사용하게 된다.
BitBlt란 현재 화면 버퍼를 그리고 보여주고 나서, 다음 프레임이 되기전에 다른곳에서 그림을 그리고, 완성된 그림을 "복사" 해서 화면에 비춰지는 방식으로 진행된다. (Window7 스타일)
따라서, 화면을 투명하게 하기 위해서 기능을 비활성화 해야 한다.
[출처]docs.unity3d.com/ScriptReference/PlayerSettings-useFlipModelSwapchain.html
코드 - 복사용
extern을 사용하여 외부 dll을 읽어온다.
GetActiveWindow()
활성화된 창을 갖는다.
SetWindowLong()
창의 설정을 변경한다.
BringWindowToTop()
창의 순서를 맨 위로 올린다.
...
DwmExtendFrameIntoClientArea()
창 프레임 영역을 클라이언트 영역으로 확장한다.
화면을 확장하고,
52번줄-
새 확장 창 스타일을 설정한다.
WS_EX_LAYERED는 창을 계층화된 창으로 만든다는 뜻이다.
즉, 뒤에있으면 안보이고, 앞에있으면 보이게 한다.
55번줄-
항상 위에있으며,
크기를 수정할 수 없다.
0,0,0,0은 중앙에 배치한단 뜻.
70번 줄 - 뒤에 있는 창들은 누를 수 없다.
71번 줄 - 뒤에 있는 창을 누를 수 있다.
즉, 스페이스바를 누르면 뒤에 있는 창을 만질 수 있다.
**경고 - 그냥 시작하면 유니티 랙먹음
테스트를 위한거라면 위 코드를 꼭 제외하고 테스트하고,
그 외라면 빌드를 해서 볼 것.
빌드 결과물
입출력도 가능하기 때문에 기본적인 것은 다 되는 모양이다.
게임에서 사용되었던 시간 체크도 Window로 데이터 가져오면 된다.
파일 상호작용도 마우스에 데이터를 가져와서 지금 들고있는 파일의 이름과 비교하거나 내용을 비교하면 될 듯.
'Unity > Unity_Knowledge' 카테고리의 다른 글
Unity Profile(추가 작업할것) (0) | 2023.04.11 |
---|---|
UNITY MARS (0) | 2023.04.11 |
추가 공부중...JOB(공부 끝나면 수정할 것) (0) | 2023.04.11 |
PAD (0) | 2023.04.11 |