posted by 심재형 2018. 2. 9. 00:19

windows키+R 눌러서 실행 켜고 

dccw입력 후 모니터 조정

감마를 좀 높이면 해결할 수 있다.



posted by 심재형 2018. 1. 13. 16:20

<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(인덱스) : 원하는 자료를 인덱스 번호로 삭제할 수 있다.





Searches for an element that matches the conditions defined by the specified predicate, and returns the first occurrence within the entire List<T>.


지정된 조건자에 정의된 조건과 일치하는 요소를 검색하고 전체 List<T>에서 처음으로 검색한 요소를 반환

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);
}

무명 메서드가 등장하는 이상한(?) 형태를 띄고 있는데..

이는 예제에 대한 설명이다.


IDToFind 조건자 대리자를 사용하여 ID로 책을 찾는다.
IDToFind predicate delegate." xml:space="preserve">C# 예제에서는 익명 대리자를 사용.


즉, 익명 대리자에서 조건을 판별하여 리스트에서 처음으로 검색한 요소를 반환한다는 의미.





간단히 정렬도 가능


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 ();


posted by 심재형 2018. 1. 9. 09:54

리모트 저장소

리모트 저장소는 인터넷이나 네트워크 어딘가에 있는 저장소를 말한다. 저장소는 여러 개가 있을 수 있는데 어떤 저장소는 읽고 쓰기 모두 할 수 있고 어떤 저장소는 읽기 권한만 있을 수도 있다. 간단히 말해서 다른 사람들과 함께 일한다는 것은 리모트 저장소를 관리하면서 데이터를 거기에 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 브랜치이다. 이것을 로컬 브랜치중 하나에 머지하거나 체크아웃하여 브랜치 내용을 자세히 확인할 수 있다.

리모트 저장소를 Pull 하거나 Fetch 하기

앞서 설명했듯이 리모트 저장소에서 데이터를 가져오려면 간단히 아래와 같이 실행한다:

$ git fetch [remote-name]

이 명령은 로컬에는 없지만, 리모트 저장소에는 있는 데이터를 모두 가져온다. 그리고 나면 리모트 저장소의 모든 브랜치를 로컬에서 접근할 수 있어서 언제든지 머지를 하거나 내용을 살펴볼 수 있다(우리는 3장에서 브랜치를 사용하는 방법에 대해 좀 더 자세히 설명할 것이다).

저장소를 Clone하면 명령은 자동으로 리모트 저장소를 origin이라는 이름으로 추가한다. 그래서 나중에 git fetch origin을 실행하면 Clone한 이후에(혹은 마지막으로 가져온 이후에) 수정된 것을 모두 가져온다. fetch 명령은 리모트 저장소의 데이터를 모두 로컬로 가져오지만, 자동으로 머지하지 않는다. 그래서 당신이 로컬에서 하던 작업을 정리하고 나서 수동으로 머지해야 한다.

그냥 쉽게 git pull 명령으로 리모트 저장소 브랜치에서 데이터를 가져올 뿐만 아니라 자동으로 로컬 브랜치와 머지시킬 수 있다. 먼저 git clone 명령은 자동으로 로컬의 master 브랜치가 리모트 저장소의 master 브랜치를 추적하도록 한다(물론 리모트 저장소에 master 브랜치가 있다고 가정에서). 그리고 git pull 명령은 Clone한 서버에서 데이터를 가져오고 그 데이터를 자동으로 현재 작업하는 코드와 머지시킨다.

리모트 저장소에 Push하기

프로젝트를 공유하고 싶을 때 리모트 저장소에 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
posted by 심재형 2018. 1. 9. 09:52

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
posted by 심재형 2018. 1. 4. 20:10

//범위 내 중복없는 난수 발생기

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;

}

}


posted by 심재형 2017. 12. 24. 07:30

크리스마스 카드 어플 개인정보 취급방침

앱 APK에 포함된 버전 코드(1)가 특정 권한(android.permission.CAMERA)을 필요로 합니다. APK에서 이 권한을 사용하는 앱에는 개인정보처리방침 세트가 필요합니다.

android.permission.CAMERA


이미지 인식 이외에 사용되지 않습니다.


posted by 심재형 2017. 12. 24. 06:44


유투브 영상주소:

https://youtu.be/BcB_b2Vnn_0


산타들이 신나게 춤을 춥니다.

버튼을 누르면 음악도 바꿔서 들을 수 있습니다.




1. Santa카드 이미지를 인쇄하거나, 

다른 스마트폰 화면에 띄웁니다.


2. 스마트폰 앱을 실행해 카메라에 이미지가 보이도록 하면 입체 카드가 화면에 생깁니다.


3. 화면 상단의 Carol/JazzCarol/FirstNoel 버튼을 눌러 음악을 선택하여 들을 수 있습니다.


(Santa카드는 산타얼굴이 그려진 이미지로 스크린샷에 첨부했습니다. 이 카드를 인식해 입체카드를 보여줍니다.)



posted by 심재형 2017. 12. 24. 06:38


카드 공백에 선물받을 사람의 이름을 적어서 주면됩니다. 



posted by 심재형 2017. 12. 7. 21:01

1.Spec

MicrocontrollerAtmel ATmega328
Operating Voltage (logic level)5 V
Input Voltage (recommended)7-12 V
Input Voltage (limits)6-20 V
Digital I/O Pins14 (of which 6 provide PWM output)
Analog Input Pins8
DC Current per I/O Pin40 mA
Flash Memory16 KB (ATmega168) or 32 KB (ATmega328) of which 2 KB used by bootloader
SRAM1 KB (ATmega168) or 2 KB (ATmega328)
EEPROM512 bytes (ATmega168) or 1 KB (ATmega328)
Clock Speed16 MHz
Dimensions0.73" x 1.70"

2.Power

아두이노 나노 호환보드는 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
posted by 심재형 2017. 12. 5. 10:21

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




Drag 스크립트 수정

- draggedItem 설정  드래그 중인 아이템을 저장




Drop 스크립트 작성



이제 실행 해보면 아래처럼 드래그한 아이템이 Slot 중앙에 맞게 정렬된다.




**슬롯 중앙에 들어가지만, 중복되어서 들어가는 문제가 발생한다.



7. 아이템슬롯 중복 문제 해결


Drop스크립트 수정 > 슬롯 내에 Child 하나만 있도록 수정



이제 중복도 안되고 하나씩 들어간다.







'유니티 Unity' 카테고리의 다른 글

유니티 미니맵 만들기  (0) 2017.12.04