windows키+R 눌러서 실행 켜고
dccw입력 후 모니터 조정
감마를 좀 높이면 해결할 수 있다.
windows키+R 눌러서 실행 켜고
dccw입력 후 모니터 조정
감마를 좀 높이면 해결할 수 있다.
<List>
리스트는 배열과 유사한 역할을 한다.
List<자료형> 변수명 형태로 선언하며, 객체이므로 new연산자를 꼭 써줘야한다.
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 32 33 34 35 36 | using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class EmptyClass : MonoBehaviour {
List<int> numbers = new List<int> ();//int들어가야하고
List<string> names = new List<string> ();//string들어가야하고
void Start()
{
numbers.Add (1);
numbers.Add (2);
numbers.Add (3);
names.Add ("Carl");
names.Add ("David");
names.Add ("Mancini");
Debug.Log (numbers[1]); //하나씩 볼 수 있다.
Debug.Log (names[1]);
}
} |
<배열과 다른점>
1. 리스트는 크기를 정해줄 필요가 없다.
Add를 사용해 값을 추가할 수 있다. 이때, 추가한 순서대로 리스트에 [x]번째가 된다.
2. Remove를 이용해 언제든지 list의 원하는값을 삭제할 수 있다.
이때, 삭제된 [x]번째보다 뒤에 있는 리스트값은 한칸씩 당겨진다.
3. 배열은 원하는 값이 있는지 확인하기 위해서는 배열의 개수만큼 전부 체크해야 하지만,
리스트는 Contains()를 이용해 원하는 값이 있는지 바로 판단할 수 있다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | // List List< string > list = new List< string >(); // 추가 list.Add( "a" ); list.Add( "b" ); list.Add( "c" ); // 탐색 foreach ( string it in list) { System.Diagnostics.Debug.WriteLine(it); } // 찾기 string key = "키" ; string result = list.Find( delegate ( string data) { return (key == data); } ); if (result != null ) { System.Diagnostics.Debug.WriteLine(result); } |
C#에서 List는 System.Collections.Generic을 추가해야 쓸 수 있다.
List 선언법
List<자료형 또는 클래스> _list = new List<자료형 또는 클래스>();
※ List 또한 객체이기 때문에 꼭 new를 해주자.
주요 메소드 ... (아래 제시된 것 보다 많음)
ⓐ _list.Add() : 원하는 자료를 컨테이너에 삽입 할 수 있다.
ⓑ _list.Remove(자료) : 원하는 자료를 컨테이너에서 삭제할 수 있다.
ⓒ _list.RemoveAt(인덱스) : 원하는 자료를 인덱스 번호로 삭제할 수 있다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | // Find a book by its ID. Book result = Books.Find( delegate (Book bk) { return bk.ID == IDtoFind; } ); if (result != null ) { DisplayResult(result, "Find by ID: " + IDtoFind); } else { Console.WriteLine( "\nNot found: {0}" , IDtoFind); }
|
간단히 정렬도 가능
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | List< int > sortList = new List< int > (); sortList.Add ( 10 ); sortList.Add ( 3 ); sortList.Add ( 7 ); sortList.Add ( 1 ); sortList.Add ( 4 ); // 정렬 !! sortList.Sort ( delegate ( int a, int b) { return a.CompareTo( b ); }); //이렇게 하면 더 간단함. List< int > sortList = new List< int > (); sortList.Add ( 10 ); sortList.Add ( 3 ); sortList.Add ( 7 ); sortList.Add ( 1 ); sortList.Add ( 4 ); // 알아서 정렬 !! sortList.Sort ();
|
리모트 저장소는 인터넷이나 네트워크 어딘가에 있는 저장소를 말한다. 저장소는 여러 개가 있을 수 있는데 어떤 저장소는 읽고 쓰기 모두 할 수 있고 어떤 저장소는 읽기 권한만 있을 수도 있다. 간단히 말해서 다른 사람들과 함께 일한다는 것은 리모트 저장소를 관리하면서 데이터를 거기에 Push하고 Pull하는 것이다.
리모트 저장소 확인
git remote
명령으로 현재 프로젝트에 등록된 리모트 저장소를 확인할 수 있다. 이 명령은 리모트 저장소의 단축 이름을 보여준다. 저장소를 Clone하면 origin이라는 리모트 저장소가 자동으로 등록되기 때문에 origin이라는 이름을 볼 수 있다:
$ git clone git://github.com/schacon/ticgit.git
Cloning into 'ticgit'...
remote: Reusing existing pack: 1857, done.
remote: Total 1857 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (1857/1857), 374.35 KiB | 193.00 KiB/s, done.
Resolving deltas: 100% (772/772), done.
Checking connectivity... done.
$ cd ticgit
$ git remote
origin
-v
옵션을 주어 단축이름과 URL을 함께 볼 수 있다:
$ git remote -v
origin git://github.com/schacon/ticgit.git (fetch)
origin git://github.com/schacon/ticgit.git (push)
리모트 저장소가 여러 개 있다면 이 명령은 전부 보여준다. 내 Grit 저장소에서 실행하면 아래와 같이 출력한다:
$ cd grit
$ git remote -v
bakkdoor git://github.com/bakkdoor/grit.git
cho45 git://github.com/cho45/grit.git
defunkt git://github.com/defunkt/grit.git
koke git://github.com/koke/grit.git
origin git@github.com:mojombo/grit.git
이렇게 리모트 저장소가 여러 개가 등록되어 있으면 다른 사람이 기여한 내용(Contributions)을 쉽게 가져올 수 있다. 그리고 origin만 SSH URL이기 때문에 origin에만 Push할 수 있다(4장에서 좀 더 자세히 다룬다).
이전 절에서도 리모트 저장소를 추가하는 것에 대해 설명했었지만 수박 겉핥기식으로 살펴봤을 뿐이었다. 여기에서는 리모트 저장소를 추가하는 방법을 자세하게 설명한다. 쉽게 새 리모트 저장소를 추가할 수 있는데 git remote add [단축이름] [url]
명령을 실행한다:
$ git remote
origin
$ git remote add pb git://github.com/paulboone/ticgit.git
$ git remote -v
origin git://github.com/schacon/ticgit.git
pb git://github.com/paulboone/ticgit.git
이제 URL 대신에 스트링 pb
를 사용할 수 있다. 예를 들어 로컬 저장소에는 없지만 Paul의 저장소에 있는 것을 가져오려면 아래과 같이 실행한다:
$ git fetch pb
remote: Counting objects: 58, done.
remote: Compressing objects: 100% (41/41), done.
remote: Total 44 (delta 24), reused 1 (delta 0)
Unpacking objects: 100% (44/44), done.
From git://github.com/paulboone/ticgit
* [new branch] master -> pb/master
* [new branch] ticgit -> pb/ticgit
로컬에서 pb/master
가 Paul의 master 브랜치이다. 이것을 로컬 브랜치중 하나에 머지하거나 체크아웃하여 브랜치 내용을 자세히 확인할 수 있다.
앞서 설명했듯이 리모트 저장소에서 데이터를 가져오려면 간단히 아래와 같이 실행한다:
$ git fetch [remote-name]
이 명령은 로컬에는 없지만, 리모트 저장소에는 있는 데이터를 모두 가져온다. 그리고 나면 리모트 저장소의 모든 브랜치를 로컬에서 접근할 수 있어서 언제든지 머지를 하거나 내용을 살펴볼 수 있다(우리는 3장에서 브랜치를 사용하는 방법에 대해 좀 더 자세히 설명할 것이다).
저장소를 Clone하면 명령은 자동으로 리모트 저장소를 origin이라는 이름으로 추가한다. 그래서 나중에 git fetch origin
을 실행하면 Clone한 이후에(혹은 마지막으로 가져온 이후에) 수정된 것을 모두 가져온다. fetch
명령은 리모트 저장소의 데이터를 모두 로컬로 가져오지만, 자동으로 머지하지 않는다. 그래서 당신이 로컬에서 하던 작업을 정리하고 나서 수동으로 머지해야 한다.
그냥 쉽게 git pull
명령으로 리모트 저장소 브랜치에서 데이터를 가져올 뿐만 아니라 자동으로 로컬 브랜치와 머지시킬 수 있다. 먼저 git clone
명령은 자동으로 로컬의 master 브랜치가 리모트 저장소의 master 브랜치를 추적하도록 한다(물론 리모트 저장소에 master 브랜치가 있다고 가정에서). 그리고 git pull
명령은 Clone한 서버에서 데이터를 가져오고 그 데이터를 자동으로 현재 작업하는 코드와 머지시킨다.
프로젝트를 공유하고 싶을 때 리모트 저장소에 Push할 수 있다. 이 명령은 git push [리모트 저장소 이름] [브랜치 이름]
으로 단순하다. master 브랜치를 origin
서버에 Push하려면(다시 말하지만 Clone하면 보통 자동으로 origin 이름이 생성된다) 아래와 같이 서버에 Push한다:
$ git push origin master
이 명령은 Clone한 리모트 저장소에 쓰기 권한이 있고, Clone하고 난 이후 아무도 리모트 저장소에 Push하지 않았을 때만 사용할 수 있다. 다시 말해서 Clone한 사람이 여러 명 있을 때, 다른 사람이 Push한 후에 Push하려고 하면 Push할 수 없다. 먼저 다른 사람이 작업한 것을 가져와서 머지한 후에 Push할 수 있다. 3장에서 서버에 Push하는 방법에 대해 자세히 설명할 것이다.
(역주, 이 절은 최신 버전의 Git이 출력하는 메시지와 조금 다르다.)
git remote show [리모트 저장소 이름]
명령으로 리모트 저장소의 구체적인 정보를 확인할 수 있다. origin
같은 단축이름으로 이 명령을 실행하면 아래와 같은 정보를 볼 수 있다:
$ git remote show origin
* remote origin
URL: git://github.com/schacon/ticgit.git
Remote branch merged with 'git pull' while on branch master
master
Tracked remote branches
master
ticgit
리모트 저장소의 URL과 추적하는 브랜치를 출력한다. 이 명령은 git pull
명령을 실행할 때 master 브랜치와 머지할 브랜치가 무엇인지 보여 준다. git pull
명령은 리모트 저장소 브랜치의 데이터를 모두 가져오고 나서 자동으로 머지할 것이다. 그리고 가져온 모든 리모트 저장소 정보도 출력한다.
좀 더 Git을 열심히 사용하게 되면 git remote show
명령은 더 많은 정보를 보여줄 것이다. 여러분도 언젠가는 아래와 같은 메시지(역주, 다수의 브랜치를 사용하는 메시지)를 볼 날이 올 것이다.
$ git remote show origin
* remote origin
URL: git@github.com:defunkt/github.git
Remote branch merged with 'git pull' while on branch issues
issues
Remote branch merged with 'git pull' while on branch master
master
New remote branches (next fetch will store in remotes/origin)
caching
Stale tracking branches (use 'git remote prune')
libwalker
walker2
Tracked remote branches
acl
apiv2
dashboard2
issues
master
postgres
Local branch pushed with 'git push'
master:master
브랜치명을 생략하고 git push
명령을 실행할 때 어떤 브랜치가 어떤 브랜치로 Push되는지 보여준다. 또 아직 로컬로 가져오지 않은 리모트 저장소의 브랜치는 어떤 것들이 있는지, 서버에서는 삭제됐지만 아직 가지고 있는 브랜치는 어떤 것인지, git pull
명령을 실행했을 때 자동으로 머지할 브랜치는 어떤 것이 있는지 보여준다.
git remote rename
명령으로 리모트 저장소의 이름을 변경할 수 있다. 예를 들어 pb
를 paul
로 변경하려면 git remote rename
명령을 사용한다:
$ git remote rename pb paul
$ git remote
origin
paul
리모트 저장소의 브랜치 이름도 바뀐다. 여태까지 pb/master
로 리모트 저장소 브랜치를 사용했으면 이제는 paul/master
라고 사용해야 한다.
리모트 저장소를 삭제해야 한다면 git remote rm
명령을 사용한다. 서버 정보가 바뀌었을 때, 더는 별도의 미러가 필요하지 않을 때, 더는 기여자가 활동하지 않을 때 필요하다:
$ git remote rm paul
$ git remote
origin
2017 티스토리 결산 (0) | 2018.01.09 |
---|---|
Unity IAD 광고플랫폼 삽입 (0) | 2017.11.28 |
adb설치 (0) | 2017.11.24 |
삼성 Gear VR 후기 (0) | 2017.11.24 |
윈도우에 Jupyter Docker설치 (0) | 2017.11.22 |
2017 티스토리 결산
git remote 확인 (0) | 2018.01.09 |
---|---|
Unity IAD 광고플랫폼 삽입 (0) | 2017.11.28 |
adb설치 (0) | 2017.11.24 |
삼성 Gear VR 후기 (0) | 2017.11.24 |
윈도우에 Jupyter Docker설치 (0) | 2017.11.22 |
//범위 내 중복없는 난수 발생기
public int[] getRandomInt(int length, int min, int max) //max포함안함 => (length)<(max-min)이어야함
{
int[] randArray = new int[length];
bool isSame;
for (int i=0; i<length; ++i)
{
while(true)
{
randArray[i] = Random.Range(min, max);
isSame = false;
for (int j=0; j<i; ++j)
{
if(randArray[j] == randArray[i])
{
isSame = true;
break;
}
}
if(!isSame) break;
}
}
return randArray;
}
}
앱 APK에 포함된 버전 코드(1)가 특정 권한(android.permission.CAMERA)을 필요로 합니다. APK에서 이 권한을 사용하는 앱에는 개인정보처리방침 세트가 필요합니다.
android.permission.CAMERA
이미지 인식 이외에 사용되지 않습니다.
유투브 영상주소:
산타들이 신나게 춤을 춥니다.
버튼을 누르면 음악도 바꿔서 들을 수 있습니다.
1. Santa카드 이미지를 인쇄하거나,
다른 스마트폰 화면에 띄웁니다.
2. 스마트폰 앱을 실행해 카메라에 이미지가 보이도록 하면 입체 카드가 화면에 생깁니다.
3. 화면 상단의 Carol/JazzCarol/FirstNoel 버튼을 눌러 음악을 선택하여 들을 수 있습니다.
(Santa카드는 산타얼굴이 그려진 이미지로 스크린샷에 첨부했습니다. 이 카드를 인식해 입체카드를 보여줍니다.)
Microcontroller | Atmel ATmega328 |
Operating Voltage (logic level) | 5 V |
Input Voltage (recommended) | 7-12 V |
Input Voltage (limits) | 6-20 V |
Digital I/O Pins | 14 (of which 6 provide PWM output) |
Analog Input Pins | 8 |
DC Current per I/O Pin | 40 mA |
Flash Memory | 16 KB (ATmega168) or 32 KB (ATmega328) of which 2 KB used by bootloader |
SRAM | 1 KB (ATmega168) or 2 KB (ATmega328) |
EEPROM | 512 bytes (ATmega168) or 1 KB (ATmega328) |
Clock Speed | 16 MHz |
Dimensions | 0.73" x 1.70" |
아두이노 나노 호환보드는 Mini-B USB를 통해 파워를 공급 받는다. 6-20V의 전원은 30번을 통해 공급될 수 있고, 5V의 전원은 27핀을 통해 직접 공급할 수 있다. 파워 소스는 자동적으로 높은 전압을 선택하게 된다. FTDI FT232RL 칩은 아두이노가 USB를 통해 파워 공급을 받을 때만 동작 가능하며, 따라서 USB가 아닌 다른 방법으로 전원을 공급 받았을 때, FTDI 칩에 의해 공급받는 3.3V의 출력은 가능하지 않고, 디지털 핀 0 혹은 1번이 "High"일 때 RX와 TX는 깜빡이게 된다.
Nano w/ATmega328을 선택.
14개의 디지털 핀들은 입력 혹은 출력으로 이용되며 pinMode(), digitalWrite(), digitalRead()라는 함수로 사용될 수 있고, 이 디지털 핀들은 5V로 작동되며 최대 40mA을 출력하거나 입력 받을 수 있다. 또한, 이들 핀들은 20-50kOhm의 풀업 저항을 내장하고 있다. 몇몇 핀들은 특정 함수를 사용할 수 있다.
3.Usage
1) Serial: 0 (RX) and 1 (TX). 시리얼 핀들은 시리얼 데이터를 받거나(RX) 전송(TX).
2) External Interrupts: 2 and 3. 2번, 3번 핀들은 외부 인터럽트로 사용된다.
attachInterrupt()라는 함수를 참조.
3) PWM: 3, 5, 6, 9, 10, and 11. 이들 6개의 핀들은 8-bit의 PWM 출력을 하며,
analogWrite() 함수 사용할 수 있다.
4) SPI: 10 (SS), 11 (MOSI), 12 (MISO), 13 (SCK). 이들 핀들은 SPI 커뮤니케이션을 서포트한다.
5) LED: 13. 13번 핀은 아두이노에 내장되어 있는 LED에 연결이 되어 있다.
나노는 8개의 아날로그 인풋을 받을 수 있는데, 이들은 10bit의 분해능을 가진다.
즉, 0V~5V의 값을 1024로 잘게 쪼개서 그 값을 읽을 수 있다. 만약 이 0V~5V의 범위를 바꾸고 싶다면 AREF에 다른 전압을 가해주면 된다. analogReference() 함수를 참조.
I2C: 4 (SDA) and 5 (SCL). 센서값을 읽을 때 종종 사용되는 I2C (TWI) 커뮤니케이션을 Wire library를 통해 지원, Wire library를 참조.
아두이노 블루투스 사용 (0) | 2017.11.03 |
---|
1. 이미지 분리
Texture Type > Sprite
Sprite Mode > Multiple
Sprite Editor > Slice > Cell Size 34*34 >Apply
34*34 크기로 쪼개진다.
2. 캔버스 제작
**앵커포인트는 영역내에서 사이즈 변화 한정한다.
변화그림
**pivot위치에 따라 resize방향결정됨
set Native button 누르면 크기에 맞춰서 자동조절
3. 정렬
SlotList > Slot
component > Layout > Grid layout
단위 크기 Padding margin left , top 5 설정 후 Ctrl+D로 여러개 복사
Cell Size > 40 * 40
Child 정렬 Child Alignment > Middle Left
여백 Spacing > 2
4. Drag 스크립트 작성
IDragHandler > refactoring
5. Drag하면 정렬 (Parent를 Inventory로 교체)
*Parent - Childe 관계는 한계층씩만 인정됨
padding margin left , top 5 설정
아래와 같이 Drag시작하면 ItemList에서 나온다.
6. Drop설정
Slot설정
Component > grid layout group
cell size > 40*40
Child alignment > middle center
Item설정
component > Layout > Canvas Group
- draggedItem 설정 드래그 중인 아이템을 저장
Drop 스크립트 작성
이제 실행 해보면 아래처럼 드래그한 아이템이 Slot 중앙에 맞게 정렬된다.
**슬롯 중앙에 들어가지만, 중복되어서 들어가는 문제가 발생한다.
7. 아이템슬롯 중복 문제 해결
Drop스크립트 수정 > 슬롯 내에 Child 하나만 있도록 수정
이제 중복도 안되고 하나씩 들어간다.
유니티 미니맵 만들기 (0) | 2017.12.04 |
---|