첫번째 view는 sticky header를 만들어보자. AppStore에서 많이 볼 수 있고, 배너가 있는 view에서 주로 사용된다. 설계 상단에 배너이미지를 넣고 스크롤 할 수 있도록 아래에 적당한 내용을 추가한다. 배너는 이미지와 텍스트로 구성하며 아래로 스크롤을 하면 이미지가 스케일되면서 윗변이 화면의 상단에 붙어있는듯한 효과를 준다. 구현 var body: some View { ScrollView(.vertical) { GeometryReader {g in // content } } .edgeIgnoringSafeArea(.top) } 스크롤 기능이 있어야하기 때문에 ScrollView로 시작한다. 노치를 무시하기 위해서 상단 SafeArea를 무시하도록 설정한다. 이 안에 세로로 컨텐츠들을 ..
대부분의 게임에는 Save/Load 시스템이 있다. 로그라이크 장르처럼 세이브가 없는 게임도 있지만 그런 게임들도 클리어 횟수라던지 해금요소들이 저장되어 게임을 실행할 때마다 저장파일을 불러오기도 한다. UE4에서 게임을 어떻게 저장하는지 알아보자. 데이터를 저장하고 불러오는 등 단순한 기능은 blueprint로 구현할 수 있도록 되어있다. 물론 복잡한 저장데이터를 저장하거나 저장하고 불러올 때 특별한 처리를 해야한다면 c++코드가 필요할 수도 있지만 단순한 기능만 먼저 알아보자. SaveGame 기본적으로 SaveGame이라는 클래스의 인스턴스를 저장하고 불러온다. 이 SaveGame은 UObject 클래스로 blueprint로 만들 수 있다 사용자는 어떤 데이터를 저장할지 변수 형태로 추가하면 된다...
길찾기 알고리즘 중 하나인 A* 알고리즘에 대해 알아보자. 단순히 2D 타일맵에만 적용할 수 있다고 생각했는데 원리를 알고보니 가중치로 연결된 그래프에 모두 적용할 수 있는 방법이었다. 복잡한 공간도 다각형으로 분할한다면 A* 알고리즘을 적용시켜서 길을 찾을 수 있다. A* 알고리즘은 닫힌 목록과 열린 목록이 있고, 이 두 목록을 갱신하면서 길을 찾아간다. 현재 위치에서 갈 수 있는 위치에 대해 G, F, Parent를계산해서 열린 목록에 넣고, 열린 목록에서 최소 F값을 가지고있는 위치를 닫힌 목록에 넣은 후 반복한다. G : 해당 위치로 이동하기 위해 필요한 비용 F : G + 해당 위치에서 목표지점까지의 예상거리 Parent : 해당 위치로 오기 직전 위치 간단한 2D 길찾기 예제를 통해서 원리를 ..
SwiftUI의 철학 거창하게 철학이라고 제목을 짓긴했지만 SwiftUI를 앞으로 어떻게 접근해야할지 감을 잡기 위해 문법과 동작원리를 간단하게 알아보자. 먼저 기본적으로 생성되는 코드를 보면 AppDelegate, SceneDelegate, ContentView이렇게 3개의 파일이 생성되는것을 볼 수 있다. SceneDelegate를 열어보면 ContentView의 인스턴스를 생성해서 UIWindowScene에 등록하는것을 볼 수 있다. 그리고 ContentView를 열어보면 구조체가 정의되어있는데 이 구조체를 생성해서 등록하면 화면에 해당 view가 그려지는것이다. 구조체는 body라는 변수를 가지고있는데, 모든 View는 이 변수를 가지고있어서 꼭 정의해주어야한다. struct ContentView..
C++ 문법중에 const라는 키워드가 있다. 무언가를 상수화시킬 때 사용하는 키워드인데 공부하는 단계에서는 딱히 어떤 변수를 상수화시킬 필요성이 없기 때문에 잘 사용하지 않는 키워드이고 실제로 어떤 규모가 큰 제품을 만드는게 아닌 이상 어떤 변수를 변경시면 안되는지 알고있기 때문에 더욱 안쓰고있었다. 하지만 오픈소스 코드나 엔진 등을 열어보니 const를 적지않게 사용하는것을 볼 수 있었는데, 이번 기회에 명확하게 다시 기능을 배우고 넘어가보도록 하자. 일단 이것만 기억하자. const는 자신과 가장 가까운 것을 상수화한다. 일반 변수 변수를 상수화한다. const로 선언된 변수는 그 값을 변경할 수 없다. const int A = 10; // same expression : int const A = ..
Masking Material에 대해 알아보자. 원하는 결과물을 정하고 그 결과가 나오도록 공부하면 이해하기가 쉬운데, 서서히 화면에서 사라지는 효과를 만들면서 기본적인 원리와 사용법에 대해 알아볼 수 있다. 기본적으로 제공되는 Material 종류중에 Traslucent를 사용하면 Opacity값을 조정해서 서서히 안보이게 할 수 있지만 이렇게 할 경우 Normal Map도 쓸 수 없고 Emissive Color밖에 못쓰기떄문에 별로인것 같다. 그래서 Masked Material을 사용하는데, 이 material을 선택하면 Opacity Mask라는 입력이 활성화되는것을 알 수 있다. 이건 어떤 값을 입력해야할까? 먼저 상수값을 입력해서 어떻게 보이는지 테스트해보자. 아 0.3부터는 안보이고 그보다 작..
타일 위에서 자연스럽게 움직이는 Movement를 구현해보도록 하자. 엔진에서 제공하는 NavigationMesh를 사용해서 만들 수도 있지만 더 세밀한 개성을 주기 위해서 먼저 간단한 움직임을 직접 구현해본다. 타일 이동이기 때문에 상하좌우 4방향으로 움직일 수 있고, 한 칸씩 이동한다. 이 떄 입력이 연속적으로 발생해도 모두 기억하고 순차적으로 이동할 수 있도록한다. BlockMovement를 바로 구현하기 위해 기본적인 준비물이 몇가지 필요한데, 캐릭터 Mesh와 속도에따라 애니메이션을 재생하는 Blueprint, 그리고 기본적인 맵을 구성한다. 1. Queue 먼저 Controller에서 입력을 받으면 MovementComponent가 입력을 수신하고 Queue에 저장한다. 매 프레임 Queue를..
Actor가 배치될 수 있는 최상위 오브젝트이다. World보다 하위 개념이지만 world에 최소한 1개의 Level이 존대하기 때문에 해당 world에 하나의 level만 있다면 같은 의미로 사용될 수도 있다. 새로운 world를 생성하는게 new world가 아니라 new level인것도 이 때문이다. world에 처음 생성된, 가장 상위 level을 Persistent Level이라고 한다. 항상 유지되기 때문에 전역으로 보여지는 환경을 배치하기에 적합하다. 예를들면 태양광원이나 대기효과 등이 Persistent Level에 추가하기에 적합한 actor들이라고 할 수 있다. world에는 여러개의 level이 존재할 수 있는데 각 level은 자기자신만의 Level Blueprint를 가지고 있기 ..
- Total
- Today
- Yesterday
- Java
- ue4
- swift
- 알고리즘
- JSP
- database
- C
- game
- mongoDB
- winsock
- DesignPattern
- Spring
- ios
- 국내여행
- SHADER
- SwiftUI
- 데이터베이스
- Git
- 드라마
- C/C++
- OS
- C++
- rxswift
- machine learing
- scala
- 자료구조
- 운영체제
- SOCKET
- Cocos2d-x
- 수학
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |