![[Unity2D] unity와 C#, VSCode 설정(macOS, M1)](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FbuLrVk%2FbtsE91yVtr3%2FAAAAAAAAAAAAAAAAAAAAAFnr-UIAJP3JJLJoqipLCEIw8t-smMZSXIunBTWvEy--%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1753973999%26allow_ip%3D%26allow_referer%3D%26signature%3D4Gubc0mOJwJ21yL3V3CqVxpiP6E%253D)
이 글은 애플 실리콘(M1칩)을 사용하는 맥북에서 Unity와 VSCode를 설정하는 것을 다룹니다. 윈도우의 경우 다른 글을 참고하는게 좋습니다. Unity 설치 1. 유니티 허브(Unity Hub) 다운로드 및 설치 유니티 홈페이지에 접속해서 유니티 허브를 다운로드 하면 된다.▼ 다운로드 지금 Unity를 다운로드하고 전 세계적으로 가장 큰 인기를 누리는 2D/3D 멀티플랫폼 경험 및 게임 제작용 개발 플랫폼을 사용하세요. unity.com 필자는 베타버전을 사용하고 있다. 현재까진 다른 버그는 발견하지는 못했지만, 나중에 어떤 버그가 발생할 지 모르기에 안정된 일반 버전을 설치하는게 좋을 것 같다.▼ 다운로드 했다면 파일을 열고 설치하면 된다.▼ 설치를 완료했다면 유니티 계정으로 로그인하자. 2. ..
![[Unity2D] 기초에 앞서](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2Fz1z31%2FbtsFcOkGS99%2FAAAAAAAAAAAAAAAAAAAAAAqWKFuAZkEyMP9V7QEV-i82-0Kro1xa5jMs5LjJhVsQ%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1753973999%26allow_ip%3D%26allow_referer%3D%26signature%3DMkzoYiA50u1UZOqWDmHJd98r7qs%253D)
Unity2D 게임 프로그래밍에 앞서 강좌 추후에 쓰일 글들은 Udemy의 강좌, C# Unity Developer 2D Coding: Learn to Code Video Games의 내용을 기반으로 작성된다. 굉장히 기초적인 부분부터 시작하며, C#을 기준으로 코드를 짠다. C#을 몰라도 C나 C++을 알면 쉽게 따라올 수 있으며, 코딩을 처음해도 무난하게 따라올 수 있을 정도로 굉장히 쉽게 설명해준다. 강의는 윈도우에서 진행되지만, 필자는 맥 환경을 사용하기에 인터페이스에 차이가 있을 수 있다. 하지만 아주 극소수의 차이만 존재하기에 사실상 둘이 거의 같다고 할 수 있다. 원하는 버튼이나 메뉴가 보이지 않으면 당황하지 마시고 차근차근 찾길 바란다. Unity란 유니티는 2D와 3D 비디오 게임을 만드..
![[Flutter][Error] CocoaPod Dependency 오류](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2Fn5sUr%2FbtsEXrdrcaM%2FAAAAAAAAAAAAAAAAAAAAAI8JWl7wu3GZ98fk_gWIwurTbvzpYoBcfi8ouOkX9F4R%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1753973999%26allow_ip%3D%26allow_referer%3D%26signature%3D3qVJrShC2wuRKDmXCeEQKlxl7s4%253D)
개요 프로젝트에서 사용하는 DB로 Firebase firestore를 사용하려고 했다. 사용하기 간편하고 팀에 백엔드가 없는 상황에서 가장 사용하기 쉽기에 firestore를 사용할 계획이었다. 그러나 플랫폼의 특징을 띠고 있는 현재의 프로젝트 특성상 종속성이 없는 firestore는 문제가 있다고 판단이 되었다. 그리고 아래와 같이 프로젝트 방향성도 바뀌게 되면서 DB를 바꿔야 하는 상황이 되어버렸다. 바뀐 프로젝트 방향성 더보기 노인의 todos를 추가하자 장점) 1. 로그인 할때 노인의 정보를 가져올때 투두 정보를 전부 가져올 수 있다 2. 보호자가 구독중인 노인들 투두 정보를 가져올 때, 정보를 같이 가져오지 못해서 노인의 정보를 가져오려면 한 명 한명 일일이 쿼리를 또 날려야한다. 합치면 한 번..
![[SWIFT] 문자열과 문자](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FbrXpsL%2FbtsEYOlHx5q%2FAAAAAAAAAAAAAAAAAAAAALggVaXLjtoTC-TSzJh6gVKIAl_CsOTo8142V3-GLca0%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1753973999%26allow_ip%3D%26allow_referer%3D%26signature%3DOSkNgUOSsKbLq0oawTR7QmTG%252Bbg%253D)
문자열과 문자 String(문자열)은 "Hello World"와 같이 Character(문자)들이 합쳐진 것이라고 볼 수 있다. Swift에서 문자열 및 문자 타입은 코드에서 텍스트를 유니코드 호환 방법으로 제공하고 문법적인 부분은 C와 비슷하다. 문자열의 연결은 `+` 연산자를 사용하여 수행할 수 있다. 물론 문자열도 상수와 변수로 선언하여 변경 가능성을 관리해 주어야한다. 문자열 보간을 통해 어떠한 문자열에서 다른 문자열을 불러올 수도 있다. Swift의 문자열은 유니코드 문자로 구성된다고 한다. String Literals 개발자는 미리 정의되어 있는 String 값으로 문자열을 사용할 수 있다. 문자열을 사용할 때는 두 개의 `"` 안에 원하는 문자열을 써주면 된다. Multiline String..
![[SWIFT] 기본 연산자들](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FWRezw%2FbtsEYOMK2Vu%2FAAAAAAAAAAAAAAAAAAAAAMAATFXOAmWq1DQR__R-jiQGbuzt1nF6SF5gqpKzHIL0%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1753973999%26allow_ip%3D%26allow_referer%3D%26signature%3D9m3mrrcKULLl10sM5McmIXWAqA0%253D)
기본 연산자들 Operators(연산자)는 값을 확인, 변경 또는 결합하는 데 사용하는 특수 기호 또는 Phrase이다. 예를 들어 `+` 연산자나 `&&` 연산자가 있다. Swift는 C언어 연산자의 여러 코딩 오류를 제거하기 위해 기능을 향상시킨 연산자를 지원한다. `=` 연산자는 값을 반환하지 않는데 이는 `==` 연산자와의 혼동에 의해 실수로 사용되지 않도록 하기 위해서다. 산술 연산자(`+`,`-`,`*`,`/`)는 값 오버플로를 감지하고 오류를 발생시키기 때문에 허용된 값보다 크거나 작은 숫자를 사용할 수 없게 도와준다. Swift는 C에서는 찾을 수 없는 `.. `, `=`, `≤` Swift 연산자에는 `===`, `!==`도 있는데 이는 두 객체 참조가 모두 동일한 객체 인스턴스를 참조하..
![[SWIFT] Swift 문법의 기초](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FbE2goI%2FbtsEWaohNac%2FAAAAAAAAAAAAAAAAAAAAAJkT4aUWbEVsLC29dHNsw61apvFxQt8TQaJ1lA7ZF5IB%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1753973999%26allow_ip%3D%26allow_referer%3D%26signature%3D90sr2qVbWx92QpEUygB1IFqBxMs%253D)
Swift 문법의 기초 Swift는 IOS, macOS, watchOS, tvOS를 만들기 위한 새로운 프로그래밍 언어이다. 기초적인 자료형으로는 Int, Double, Float, Bool, String, Array, Set, Dictionary가 있다. C언어와 마찬가지로 Swift는 값을 저장하고 참조하기 위해 변수를 사용하고 이름으로 변수를 구분한다. Swift에는 변수 중에서도 값을 변경할 수 없는 Constant(상수)를 제공하고 이로 인해 C에서 보다 더 많은 기능을 수행할 수 있다. Swift에는 Objective-C에서는 볼 수 없는 tuple(튜플) 형식도 제공한다. 튜플을 사용해서 여러 값을 하나의 값으로 반환할 수도 있다. Swift에서는 Optional Type(옵셔널 타입)을 제..
![[iOS][ERROR] Button AddTarget 에러](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FVqMaO%2FbtsEVcGCWhB%2FAAAAAAAAAAAAAAAAAAAAAIYH8bUH5q2Hat6xVIQ6cWDxBRStdLjLfZ0L2Eq4Ygq0%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1753973999%26allow_ip%3D%26allow_referer%3D%26signature%3DCzjNaftU7maU97zmVPwzqRRqbB8%253D)
문제 발생 Flutter를 하다가 다시 iOS 네이티브를 공부하려고 돌아오면서 몇 가지 UI들에 대해 테스트를 해보고 있었다. 스토리보드를 사용하지 않고, 코드로만 UI 구성하기를 연습하고 싶어서 스토리보드를 없애고 하나씩 확인을 해보고 있었다. 그 중 버튼을 눌러서 다른 화면으로 넘어가는 것을 해보고 있었는데, 아래의 코드에서 오류가 나기 시작했다. ▼ class ViewController: UIViewController { let testButton : UIButton = { let button = UIButton() button.setTitle("Button", for: .highlighted) button.layer.cornerRadius = 20.0 button.backgroundColor = ..
![[Flutter][Package] ScreenUtil 패키지](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FdO8fIV%2FbtsEQesz4SC%2FAAAAAAAAAAAAAAAAAAAAAMQWT4vQNXXi-k6nHod4kjXg2cxynAP3ZR_oj2iCkBxb%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1753973999%26allow_ip%3D%26allow_referer%3D%26signature%3DFmII1RMO6YIQqG53Sf4y0AOsPZM%253D)
개요앱 개발을 하다보면 해상도 대응이 상당히 까다롭다.디자이너가 준 화면을 구현하고, 실제 기기에서 보면 뭔가 이상할 때가 많다.이는 해상도가 맞지 않아, UI 배치가 조금씩 틀어지면서 생기는 문제다. 각 기기마다 해상도가 다르기 때문에 모든 기기에 맞게 코드를 작성하는 것은 어렵다.이를 위해 iOS에선 Auto Layout과 같은 방법론이 등장했다. 하지만 Flutter에서는 어떨까? Flutter에서도 padding을 사용하여 CSS나 iOS와 같이 해상도 대응을 할 수 있다.일반적으로는 이게 정석인데, 약간의 꼼수를 사용할 수 있다. 바로 ScreenUtil 패키지를 이용하는 것이다. ScreenUtil 이란?ScreenUtil 패키지는 해상도를 자동 대응해주는 패키지이다.기준 화면을 설정하면, ..
![[Flutter][Widget] Spacer 위젯](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FxkyzN%2FbtsEMY4bh0C%2FAAAAAAAAAAAAAAAAAAAAAPWFx5Jc_PHj3sFAZ71bbFeiEyIaBRGgJEL4wOIjeZaH%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1753973999%26allow_ip%3D%26allow_referer%3D%26signature%3DSVKPk7Slae1ht1ErxbvopiDrNkQ%253D)
Spacer란? Spacer는 Row와 Column과 같은 Flex Container (이는 뒤에서 알아볼 것이다.)의 공간을 조절하는 빈 공간을 만들어주는 위젯이다. 이름 그대로 Space + er로 공간을 만들어주는 위젯이다. Spacer 위젯은 추가적인 공간을 잡는 위젯이기 때문에 Flex container안에 있는 Flex.mainAxisAlignment를 MainAxisAlignment.spaceAround, MainAxisAlignment.spaceBetween, MainAxisAlignment.spaceEvenly 로 설정하면 추가 공간을 모두 차지했으므로 재배포할 공간이 남아 있지 않아 가시적인 효과가 없다. 즉, Spacer는 MainAxisAlignment 속성을 모두 무시한다는 것이다..
![[Flutter] Const를 사용해야하는 이유](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2Fb2lYox%2FbtsERxqEfHl%2FAAAAAAAAAAAAAAAAAAAAADAU0kv7kxyIJlAJbPVXsQXcuzpMnZ-aHna9JU3vWZmM%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1753973999%26allow_ip%3D%26allow_referer%3D%26signature%3DrP9MX12V7%252BEQoBHmHxiSiMfPrJE%253D)
개요 Flutter로 크로스 플랫폼 앱 개발을 하다보면, 아래와 같이 `const`를 붙이라는 경고메세지가 등장한다. ▼ 이는 Error가 아닌 단순 Warning이라서 지키지 않아도 프로그램이 컴파일 되는 데에는 큰 문제가 없다. 하지만 아래에 파란줄이 남은 것을 볼 때면 굉장히 찝찝해져서 const를 붙이지 않고 넘어갈 수 없다. ▼ 이쯤되면 의문이 하나 생긴다. "도대체 왜 `const` 키워드를 붙이라고 권장하는걸까?" 프로그래밍 문법을 배울 때 const는 상수라고 배운다. 그리고 상수는 변하지 않는 값을 선언할 때 사용한다고도 배우는데, Dart에는 `const`외에 `final`이라는 키워드가 존재한다. 변하지 않는 값을 선언하는 것을 권장하는 것이라면 `const`가 아니라 `final`을..