2018년 12월 30일 일요일

[Food] 스테이크를 잘 굽고 싶으세요? 그렇다면 이걸 보세요 - How to pan fry steak

https://youtu.be/4LedZRQhLQc

The Food Lab

당+단백질 구우면 마이야르

고기 표면은 건조한 상태에서 구워야 맛있음.

30초에 한번씩 뒤집어야 하고 대강 안심은 3분 등심은 4분 기준은 기름기가 많을 수록 오래 구워야 함.

조리 순서
포도씨유 기름은 3큰술 넣고 팬 주위에 연기가 살짝 날 때 1큰술을 넣고 고기를 넣고 30초에 한번씩 뒤집어줌.
고기를 넣은 후 연기가 나올 경우 불을 줄여줌 (연기 나는게 좋은게 아니라 함)
고기를 꺼내고 불을 끈 상태에서 라임을 넣고 버터 크게 사각으로 하나 넣고 버터가 반쯤 녹았을 때 스테이크를 넣은 후 1분간 버터로 샤워 시켜줌.
탐침형 온도계로 내부 온도 등심 61~62도 안심 56~57도 정도를 확인 후 잘라서 먹음.

2018년 12월 27일 목요일

[Unity] 이벤트 함수 실행 순서(Execution Order of Event Functions) | Lifecycle

이벤트 함수 실행 순서(Execution Order of Event Functions)

Unity 이벤트 함수는 사전에 정해진 순서대로 실행됩니다. 실행 순서는 다음과 같습니다.

에디터

  • Reset: 오브젝트에 처음 연결하거나 Reset 커맨드를 사용할 때 스크립트의 프로퍼티를 초기화하기 위해 Reset을 호출합니다.

첫 번째 씬 로드

다음 함수는 씬이 시작할 때(씬에서 오브젝트마다 한 번) 호출됩니다.
  • Awake: 이 함수는 항상 Start 함수 전에 호출되며 프리팹이 인스턴스화 된 직후에 호출됩니다. 게임 오브젝트가 시작하는 동안 비활성 상태인 경우 Awake 함수는 활성화될 때까지 호출되지 않습니다.
  • OnEnable: (오브젝트가 활성화된 경우에만): 오브젝트 활성화 직후 이 함수를 호출합니다. 레벨이 로드되거나 스크립트 컴포넌트를 포함한 게임 오브젝트가 인스턴스화될 때와 같이 MonoBehaviour를 생성할 때 이렇게 할 수 있습니다.
  • OnLevelWasLoaded: 이 함수는 세 레벨이 로드된 게임을 통지하기 위해 실행됩니다.
씬에 추가된 모든 오브젝트에 대해 Start, Update 등 이전에 호출된 모든 스크립트를 위한 Awake 및 OnEnable 함수가 호출됩니다. 원래 오브젝트가 게임플레이 도중 인스턴스화될 때 실행되지 않습니다.

첫 번째 프레임 업데이트 전에

  • Start: 스크립트 인스턴스가 활성화된 경우에만 첫 번째 프레임 업데이트 전에 호출됩니다.
씬에 추가된 모든 오브젝트에 대해 Update 등 이전에 호출된 모든 스크립트를 위한 Start 함수가 호출됩니다. 원래 오브젝트가 게임플레이 도중 인스턴스화될 때 실행되지 않습니다.

프레임 사이

  • OnApplicationPause: 이 함수는 일시 정지가 감지된 프레임의 끝, 실질적으로는 일반 프레임 업데이트 사이에 호출됩니다. 게임에 일시정지 상태를 가리키는 그래픽스를 표시하도록 OnApplicationPause 가 호출된 후에 한 프레임이 추가로 실행됩니다.

업데이트 순서

게임 로직, 상호작용, 애니메이션, 카메라 포지션의 트랙을 유지할 때, 사용 가능한 몇몇 다른 이벤트가 존재합니다. 일반적인 패턴은 Update 함수에 대부분의 작업을 수행하는 것이지만, 사용할 수 있는 다른 함수도 있습니다.
  • FixedUpdate: FixedUpdate 는 종종 Update 보다 더 자주 호출됩니다. 프레임 속도가 낮은 경우 프레임당 여러 번 호출될 수 있으며 프레임 속도가 높은 경우 프레임 사이에 호출되지 않을 수 있습니다. 모든 물리 계산 및 업데이트는 FixedUpdate 후 즉시 발생합니다. FixedUpdate 의 움직임 계산을 적용할 때 Time.deltaTime 만큼 값을 곱할 필요가 없습니다. FixedUpdate 가 프레임 속도와 관계없이 신뢰할 수있는 타이머에서 호출되기 때문입니다.
  • Update: Update 는 프레임당 한 번 호출됩니다. 프레임 업데이트를 위한 주요 작업 함수입니다.
  • LateUpdate: LateUpdate 는 Update 가 끝난 후 프레임당 한 번 호출됩니다. Update 에서 수행된 모든 계산은 LateUpdate 가 시작할 때 완료됩니다. LateUpdate 는 일반적으로 다음의 3인칭 카메라에 사용합니다. 캐릭터를 움직이고 Update 로 방향을 바꾸게 하는 경우 LateUpdate 에서 모든 카메라 움직임과 로테이션 계산을 수행할 수 있습니다. 이렇게 하면 카메라가 포지션을 추적하기 전에 캐릭터가 완전히 움직였는지 확인할 수 있습니다.

렌더링

  • OnPreCull: 카메라가 씬을 컬링하기 전에 호출됩니다. 컬링은 어떤 오브젝트를 카메라에 표시할지 결정합니다. OnPreCull은 컬링 발생 직전에 호출됩니다.
  • OnBecameVisible/OnBecameInvisible: 오브젝트가 카메라에 표시되거나/표시되지 않을 때 호출됩니다.
  • OnWillRenderObject: 오브젝트가 표시되면 각 카메라에 한 번 호출됩니다.
  • OnPreRender: 카메라가 씬 렌더링을 시작하기 전에 호출됩니다.
  • OnRenderObject: 모든 일반 씬 렌더링이 처리된 후 호출됩니다. 이 때 커스텀 지오메트리를 그리는 데에 GL 클래스 또는 Graphics.DrawMeshNow를 사용할 수 있습니다.
  • OnPostRender: 카메라가 씬 렌더링을 마친 후 호출됩니다.
  • OnRenderImage: 씬 렌더링이 완료된 후 호출되어 이미지의 포스트 프로세싱이 가능합니다. 포스트 프로세싱 효과를 참고하십시오.
  • OnGUI: GUI 이벤트에 따라 프레임당 여러 번 호출됩니다. 레이아웃 및 리페인트 이벤트는 우선 처리되며 각 입력 이벤트에 대해 레이아웃 및 키보드/마우스 이벤트가 다음으로 처리됩니다.
  • OnDrawGizmos: 시각화 목적으로 씬 뷰에 기즈모를 그릴 때 사용됩니다.

코루틴

일반적인 코루틴 업데이트는 Update 함수가 반환된 후 실행됩니다. 코루틴은 주어진 YieldInstruction이 완료될 때까지 실행을 중단(양보)할 수 있는 함수입니다. 코루틴의 다른 사용법은 다음과 같습니다.
  • yield 코루틴은 모든 Update 함수가 다음 프레임에 호출된 후 계속됩니다.
  • yield WaitForSeconds 지정한 시간이 지난 후, 모든 Update 함수가 프레임에 호출된 후 계속됩니다.
  • yield WaitForFixedUpdate 모든 FixedUpdate가 모든 스크립트에 호출된 후 계속됩니다.
  • yield WWW WWW 다운로드가 완료된 후 계속됩니다.
  • yield StartCoroutine 코루틴을 연결하고 MyFunc 코루틴이 먼저 완료되기를 기다립니다.

오브젝트를 파괴할 때

  • OnDestroy: 오브젝트 존재의 마지막 프레임에 대해 모든 프레임 업데이트를 마친 후 이 함수가 호출됩니다. 오브젝트는 Object.Destroy 또는 씬 종료에 대한 응답으로 파괴될 수 있습니다.

종료 시

다음 함수는 씬의 활성화된 모든 오브젝트에서 호출됩니다.
  • OnApplicationQuit: 이 함수는 애플리케이션 종료 전 모든 게임 오브젝트에서 호출됩니다. 에디터에서 사용자가 플레이 모드를 중지할 때 호출됩니다.
  • OnDisable: 동작이 비활성화되거나 비활성 상태일 때 이 함수가 호출됩니다.

스크립트 수명 주기 플로우차트

다음 다이어그램은 스크립트의 수명 동안 이벤트 함수의 호출 순서에 대한 요약입니다.

[Dev] ASCII Table and Description | 아스키 코드표



[Dev] Git Doc

https://git-scm.com/docs


.gitignore
Library
Temp
obj
*.csproj
*.sln
.vscode


.gitmodules
[submodule "Assets/Ecs"]
path = Assets/Ecs
url = https://github.com/Unity-Technologies/EntityComponentSystemSamples.git
branch = master
[submodule "Assets/Ecs.UnityIntegration"]
path = Assets/Ecs.UnityIntegration
url = https://github.com/Unity-Technologies/EntityComponentSystemSamples.git
branch = master

2018년 12월 21일 금요일

[Music] 드럼 (Drum)

음표 보는




드럼 용어
# 그립(grip): 스틱을 쥐는 법 

# 매치드그립(matched grip): 엄지손가락과 집게손가락으로 스틱을 잡고 나머지 세 손가락을 가볍게 붙이는 모양의 그립 형태. 보통 rock계열의 음악들에서 많이 사용하는 그립. 

# 레귤러그립(regular grip): 왼손의 엄지손가락과 집게손가락의 밑부분에 스틱을 끼우고 약손가락을 구부려 중간에 얹고 집게손가락과 가운데 손가락을 가볍게 붙인 그립 형태. 오른손은 매치드그립과 같다. 보통 째즈드러머들이 많이 사용하는 그립. 

# 싱글 스트로크(single stroke): 한손에 한번씩 번갈아서 내리치는 주법. 

# 더블 스트로크(double stroke): 헤드의 반발력을 이용하여,한손에 2번씩을 연타하는 주법. 

# 쇼트(=샷/shot): 드럼 헤드를 스틱으로 칠때의 연속적인 동작. 

# 스냅(snap): 쇼트하기 직전의 손목의 움직임. 

# 4way: 양손발을 의식적으로 분산시켜 연주하는 트레이닝. 

# 필인(fill in): 말그대로 드러머의 역량,센스에 따라 곡 중간에 삽입되는 오로지 드러머에 의존하는 리프,프레이즈. 

# 플램(flam) / 러프(ruff): 둘다 원음직전에 치는 꾸밈음표. 플램은 꾸임음표가 하나, 러프는 꾸밈음표가 두개이상이다. 

# 핑거컨트롤(finger control): 섬세한 음, 더블스트로크등을 빠르게 칠때의 손가락 동작, 가운데(중지)손가락의 움직임이 키 포인트. 

# 파라디들(paradiddles): 싱글스트로크(쇼트한번에 울림한번)와 더블스트로크를 조합하여 만드는 리듬기술. 

# 헤드(head): 스틱으로 때리는 부분.드럼통의 가죽부분(=드럼피,덮개) 

# 싱코페이션(syncopation): 통상적으로 엑센트가 붙지 않는 애프터 비트(약박)에 엑센트가 붙은 것. 

# 하프 오픈(half Open): 하이햇의 절반 열기. 2장의 하이햇 심벌에 1cm 정도의 사이를 둔 주로 강한 하이햇 효과를 얻기 위해 사용함. 

# 브레이크(break): 리듬을 멈추는 일. 

# 뮤트(mute): 악기의 소리를 약하게(=부드럽게) 조절하는 것. 

# 튜닝(tuning): 음정을 변화시키거나 뮤트해서 좋아하는 음색 또는 원하는 사운드에 맞게 조절하는 것. 

# 림(rim): 베이스 드럼, 스네어 드럼, 탐류의 헤드를 누르는 것으로 보통 재질은 금속. 

# 림 쇼트(rim shot): 스네어 드럼의 림 부분을 두드리는 것. 

# 롤(roll): 두번치기. 오른손 두번치기와 왼손 두번치기에서 각각 오른손,왼손 모두 제1타는 때린후 스틱을 바운드하여 위로 올리고 제2타는 다시 처음 자세로 돌아가는 형태. 이때 제1타와 제2타 음의 크기가 같아야 함. 

# 셔플(shuffle): 3잇단음표를 기본으로 한 리듬.

[Unity] The new spriteatlas always change make the version control conflict very easyly.

.sprites 가 계속 Unix 로 바뀌에서 Git 리스트에 뜨는 버그 수정.

Assets / Editor 하위에 .cs 파일 만들어서 추가하면 됨.


using UnityEngine;
using UnityEditor;
using System.IO;

class ProjectAssetPostprocessor : AssetPostprocessor
{
    private void OnPreprocessAsset()
    {
        if(assetImporter != null && assetImporter.assetPath != "" && assetImporter.assetPath != null)
        {
            string extension = Path.GetExtension(assetImporter.assetPath);
            if (extension.IndexOf(".spriteatlas") != -1)
            {
                const string Windows = "\r\n";
                const string Unix = "\n";
                const string Mac = "\r";

                string targetEndingType = Windows;

                string ending = Windows;
                if (targetEndingType == "win")
                {
                    ending = Windows;
                }
                else if (targetEndingType == "unix")
                {
                    ending = Unix;
                }
                else if (targetEndingType == "mac")
                {
                    ending = Mac;
                }

                string fullPath = Path.GetFullPath(assetImporter.assetPath);
                if (!File.Exists(fullPath))
                {
                    Debug.LogError("Error " + fullPath);
                    return;
                }

                string fileContents = File.ReadAllText(fullPath);
                fileContents = fileContents.Replace(Windows, Unix);
                fileContents = fileContents.Replace(Mac, Unix);
                fileContents = fileContents.Replace(Unix, ending);
                File.WriteAllText(fullPath, fileContents);

                EditorApplication.delayCall += () =>
                {
                    AssetDatabase.ImportAsset(fullPath, ImportAssetOptions.ForceUpdate);
                };
            }
        }
    }
}

[Food] 햄치즈계란말이

햄치즈계란말이
재료: 계란8개, 슬라이스 치즈 4장, 슬라이스 햄 6장
요리 방법
  • 흰자와 노른자 분리
  • 노른자 넣고 넣음
  • 흰자 넣고 체다 치즈
  • 흰자 넣고 체다 치즈
  • 노른자 넣고
  • 노른자 넣고
  • 노른자 넣고 마무리


[Unity] Nested Prefab

중요 기능은 총 세가지

1. Prefab Mode
 - 해당하는 프리팹을 수정하는 모드
 - Hierarchy 윈도우에서 > 를 클릭 시 접근 가능
 - Project 윈도우에서 더블 클릭으로 접근 가능

2. Nested Prefabs
 - 프리팹 안에 다른 프리팹을 넣을 수 있는 기능
 - 예) 사람 프리팹을 만들고 무기 프리팹을 만들어서 그 사람 프리팹 안에 넣을 수 있는 무 기 프리팹을 넣고 각 프리팹을 Prefab Mode 로 수정가능 (사람1, 사람2, 사람3 프리팹은 따로 쓰고 무기 프리팹은 하나로 관리 가능.)

3. Prefab Variants
 - 기존 프리팹의 데이터를 그대로 받아서 사용하되 하위 프리팹에 값을 넣을 경우 하위 프리팹에 사용된 값으로 적용됨.
 - 예) 원본 프리팹의 ScaleX 값이 0.1 일 경우 Variants 프리팹도 0.1 로 적용되지만 Variants 프리팹에 값 0.1 외의 값을 넣는 경우 넣은 값으로 변경됨. 이 사항은 컨포넌트 및 모든 것들에 해당됨.


추가 기능 설명
1. 프리팹 연결 끊기
 - 예) 만약 프리팹 안에 프리팹을 넣었는데 (Nested Prefabs) 안에 있는 프리팹을 부모의 프리팹 안에 합치고 싶을 경우.
 - 해당하는 프리팹을 오른쪽 마우스 버튼을 눌러서 Unpack Prefab 후 Overrides 하면 됨.
 - Unpack Prefab 과 Unpack Prefab Completely 의 차이
 - Unpack Prefab 은 선택된 프리팹만 연결 끊음.
 - Unpack Prefab Completely 는 선택된 프리팹과 하위에 있는 Nested Prefabs 모두 연결 끊음.


유튜브
https://www.youtube.com/watch?v=6_gAiPPKyUg


소개 블로그 - 한글
https://blogs.unity3d.com/kr/2018/06/20/introducing-new-prefab-workflows/

[Unity] Lightweight Render Pipeline

블로그
https://blogs.unity3d.com/kr/2018/02/21/the-lightweight-render-pipeline-optimizing-real-time-performance/

ChangeLog
https://github.com/Unity-Technologies/ScriptableRenderPipeline/blob/master/com.unity.render-pipelines.lightweight/CHANGELOG.md

포럼
https://forum.unity.com/threads/lwrp-4-2-0-preview-18-3-5-1-0-19-1-are-out.562291/

[Unity] 엔티티 컴포넌트 시스템(ECS)




기본적으로 고성능 코드를 작성할 수 있는 새로운 모델

ECS를 어디서부터 시작해야 할 지 모를 때 도움이 되는 학습 방법 정리

1. 아래 예제 동영상을 본다.

2. 아래 프로젝트를 받아서 Two-stick shooter를 classic(non ecs 기존 방식), hybrid ecs, pure ecs 세 가지로 구현한 것을 비교해 본다.

* Two-stick shooter에 대한 설명은 아래


.NET 4.x 필수
  1. .Scripting Runtime Version 에서 .NET 4.x 바꿔줘야
구조
  1. Entities: GameObject 같은
  2. Components: 데이터를 담는 그릇
  3. Systems: 해당하는 모든 Entities 컨트롤하는 시스템
Pure ECS
  1. 완전 새로운 코딩 방식
  2. GameObject MonoBehaviur 모두 사용 못함.
Hybrid ECS
  1. 기존 체계에서 ECS 사용을 보다 쉽게 해줌
  2. Pure ECS 보다는 성능 향상이 떨어짐
  3. MonoBehaviours 사용 가능

[Dev] C# 자료형의 크기와 범위 (데이터 형식)


분류
자료형
크기

기본값
저장 값의 범위

유효숫자


바이트
비트

최소값
최대값

 정수
 byte
 1
 8
 0
 0
 255


 sbyte
 1
 8
 0
 -128
 127


 short
 2
 16
 0
 -32,768
 32,767


 ushort
 2
 16
 0
 0
 65,535


 int
 4
 32
 0
 -2,147,483,648
 2,147,483,647


 uint
 4
 32
 0
 0
 4,294,967,295


 long
 8
 64
 0L
 -922,337,203,685,477,508
 922,337,203,685,477,507


 ulong
 8
 64
 0
 0
 18,446,744,073,709,551,615

 실수
 float
 4
 32
 0.0F
 ±1.5e-45
 ±3.4e38
 7 자리

 double
 8
 64
 0.0D
 ±5.0e-324
 ±1.7e308
 15~16 자리

 decimal
 16
 128
 0.0M
 ±1.0 × 10e28
 ±7.9 × 10e28
 28~29 자리
 논리
 bool


 false
 false
  true

 문자
 char
 2
 16
 '\0'
 U+0000
 U+FFFF

 문자열
 string


 문자열(string) 문자(char)들의 모임



 객체
 object


 모든 데이터 형식으로 사용 가능



 구조체
 struct


 여러 데이터 형식의 집합



 열거
 enum


 정수 데이터 형식의 집합