Midjourney 유료

StableDiffusion 오픈소스

 

prompt 기반 이미지 생성 AI

 

stable diffusion collecting package (WebUI .ver)

mpmath, typing-extensions, sympy, pillow, numpy, networkx, MarkupSafe, fsspec, filelock, jinja2, torch, torchvision

gradio

 

gradio로  로컬서버 열고 jinja로 와꾸 짜놓음

 

https://huggingface.co/models?pipeline_tag=text-to-image&sort=downloads

 

Models - Hugging Face

Active filters: text-to-image Clear all

huggingface.co

 

모델 ckpt ( = checkpoint) 파일 구하는 사이트.

프로젝트 폴더 들어가보면 친절하게 여기다가 ckpt파일 넣으라고 텍스트로 적어놓음

 

.safetensor 라는 확장자도 있는데 그냥 체크포인트 파일을 안정성있게 바꿔놓은 파일.

그냥 같은 체크포인트 파일이니까 같은데다 넣어서 쓰면된다.

 

 

 

[Midjourney]

 

프롬프트  옵션

--ar 16:9 비율 (aspect ratio)

--no fish 뒤에오는 객체 제거

 

 

<캐릭터 시트 만드는 프롬프트>

### Women, full body, front view, side view, back(=rear) view --niji 6

TurnTable 캐릭터 원화 제작

일관성있는 캐릭터 시트 제작 가능

 

<표정 + 동작 추가>

<캐릭터 시트 만드는 프롬프트>, (full body), different poses, different positions and expression

Vary (subtle)로 추가 생성

 

Remix 기능으로 기존 생성된 이미지에 편집하는 형식으로 새로운 이미지 생성 가능

 

로고도 만들수있음

 

 

[ComfyUI]

StableDiffusion 보다 비 개발자 친화적인? 노드 기반, 스테이블디퓨전을 사용하는 인터페이스.

스테이블디퓨전 깔아서 사용중이면 딱히 쓸 필요는 없지만 노드기반이라 이쪽이 편한 사람은 쓰면 좋음

 

프로젝트 폴더/

ComfyUI 실행 커맨드  :  python3 main.py

StableDiffusion 커맨드 : ./webui.sh

작업을 하기 전 중심점을 잡기 위에 미리 중심점 세팅용 공같은 오브젝트를 하이어라키에 만들어 두고 선택 불가능하게 해두는게 좋다 => Pivot 점으로 사용할 녀석임 => 문을 열리게 회전시키는걸 구현한다고 생각 => 피벗이 경첩쪽에있으면 자체 회전으로 문이 열리는걸 구현 가능하지만 피벗이 중앙에 있다면 스크립트로 돌렸을때 그냥 회전문이다


Freeze Transform

모델링된 모델의 트랜스폼의 현재 상태를 유니티의 트랜스폼 기본 0,0,0 1,1,1로 맞춰주는 기능이다.
작업 완료 후 이동툴로 객체와 피벗의 위치를 맞추고 눌러주면 해당 좌표를 기준으로 모델링의 중심점이 선택된다
스케일을 변경하거나 하는 등 트랜스폼을 원하는대로 변동하고 꼭 눌러줘야 함.
(구조물 모델링은 보통 바닥에 중심점을 두니 바닥에 두자)


Export

Probuilder 모델링 작업이 끝난 뒤에는 유니티에서 사용할 수 있도록 깔끔하게 만들어야한다.
export 옵션 - prefab이나 원하는거 선택 후 내보내면 Probuilder로 만든 모델링 작업물을 유니티에서 사용할 에셋이나 프리팹 등의 리소스로 만들수 있다.
(Obj를 선택해서 내보내면 외부 모델링 프로그램에서 사용할 파일들로 만들 수 있음, material은 blender와 호환이 안되므로 텍스쳐 설정을 변경해줘야한다. baseColor 설정에 linear면 closest로)



ctrl로 unity 고유 스냅핑 설정을 통해 좌표 스냅핑을 하면서 작업

육각형 도형을 만들고 면을 선택한 뒤, 유니티 스케일 모드 + shift를 통해 추가로 면을 만들 수 있다. (ctrl도 같이 눌러주면 스냅핑, 스케일링까지 작동)

요약.
면 선택 > 유니티 스케일 모드 > Shift + Ctrl > 스케일 가운데 면 드래그
(Shift를 안쓰면 면 추가 없이 조절)

면 선택 > 유니티 이동도구 > Ctrl > 기즈모 드래그
(육각형의 모델링 크기를 키우거나 줄임)

단면 선택 > 이동 도구 > Shift + Ctrl > 기즈모 위로 드래그 > 벽과 천장 생성 > 안에 있던 면이 올라가는 것이므로 원래 있던 자리는 사라짐
(중간에 쉬었다 다시하면 면이 나뉘어 버린다)


Tool - Probuilder - Dimension Overlay - Show로 작업중 크기 확인가능


곡선 지붕 만드는법

면 추가 혹은 사이에 엣지 추가
면의 양 옆 엣지 선택 - Probuilder Tab Connect Edge 선택

위 과정을 여러번 반복해 면을 나눠 뾰족한 지붕 모양을 만들 수있다

엣지 선택 - Bebel 기능 옵션 - Distance 변경을 통해 엣지 나누기 가능

상단 면들을 위 방법으로 면들을 나눈뒤 면을 선택해 이동툴로 올려주면 둥글게 된다

Bebel을 날카로운 엣지에 쓰면 더 부드러워짐
스케일로 면을 부분 선택해 좀더 부드럽게
윗면 전체 선택 - Smoothing - 1로 마무리


면에 구멍 만들기

면선택 - 스케일 ctrl + shift 작게 - 엣지 선택 - 이동툴로 올리거나 내려서 원하는 면 크기 만들기 - 면선택 - shift 이동툴로 안쪽으로 밀어넣기


UV 맵핑

머터리얼 생성 - Base Map에 텍스쳐 던져넣기 - 도트텍스쳐가 머터리얼에서 번져보일때는 텍스쳐 filter mode를 Point로 바꾸고 compression(압축)을 None으로 해준다 - 빛 같은거 필요없으면 머터리얼서 smoothless 0 - 프로빌더로 만든 객체 메쉬랜더에 던져넣음 - UV Editor 선택 - ctrl+a 전체선택 - convert to Auto - 그룹핑할 한쪽 면들 선택 - Group Selected Faces - 이후 select texture group으로 그룹 선택 가능 - 이동툴로 텍스쳐가 필요한 그룹핑한 녀석들 빼놓음 - 텍스쳐가 필요없는 애들 모두 선택 - ResetUVs - fill mode > fit - anchor > upper left - offset 좌표 0, tilling 8 해서 텍스쳐 한곳에 조그맣게 구석에 몰아줌 - 빼놓은 앞면 fit, middle center - offset 0 - 그룹핑한애들 스케일, 위치 조정하면서 텍스쳐에 맞춰줌 - 텍스쳐에서 삐져나가서 반복될때는 텍스쳐의 Advanced Wrap Mode를 repeat에서 Clamp로 바꿔준다(Clamp는 맨끝 색상을 길게 늘어뜨려줌)

스프라이트 등에서 UV맵핑후 텍스쳐의 투명한 부분을 지우는법
사용한 머터리얼 - surface option - Alpha Clipping 체크


Verctex 다중 선택 팁

면들을 선택 - 버텍스 선택으로 변경 - 면을 할당한 전체 버텍스 선택됨


Vertex Color

프로빌더에서 제공하는 standard vertex 셰이더를 써야한다
면 선택 후 apply


Sprite 작업

폴리곤이 뒤집혔는지 안뒤집혔는지 보려면 유니티 씬창 Shading Mode(둥근 아이콘탭)를 WireFrame 모드로 보면서 작업해주면 된다

단면이므로 중심점을 잡고 FreezTransform을 해주는게 좋다
보통 적은 폴리곤을 사용하기 위해 스프라이트를 십자로 복사 배치해서 나무나 줄기등을 표현한다.

반대쪽으로 돌아갔을때 안보이는것은 Material의 Render Face 옵션이 Front로 되어있기 때문이다.
Material을 하나 만들어주고 gridBox를 base맵에 넣어준뒤 스프라이트 객체의 메쉬랜더 material을 만든 마테리얼로 바꿔준뒤 face 옵션을 both로 변경해주면 render가 된다.
(Legacy Built in, 즉 URP, HDRP가 아니면 render face 옵션있는 셰이더가 없으므로 셰이더를 따로 만들어야함)

보통 풀같은 오브젝트는 셰이더를 urp unlit을 많이쓴다. 방향전환에 따라 그림자가 지지 않아서 모든 면이 동일한 색상을 내므로 작업하기도 좋다.


Merge Object
따로 작업한 모델링 오브젝트를 하나로 합쳐줌


Merge Faces
선택한 면들을 하나로 합쳐줌


Probuilderize
유니티로 만든 capsule이나 cube 같은걸 프로빌더 형태로 만듬
콜라이더 같은 컴포넌트는 빼주고 작업
skinned mesh 쓰는 애들은 안됨.


Select Hidden : on/off
안보이는 쪽의 버텍스,엣지,면도 선택할지 여부를 정함


Delete Face
선택된 면을 지움


Detach Face
선택한 면들을 떼어 별개의 메쉬오브젝트로 만듬


Fill Hole
선택된 엣지에 인접한 구멍이 있을 경우 메꿔줌


Bridge Edge
선택한 두 엣지 사이에 면을 채워줌


Ctrl 클릭으로 선택된 면을 제외할 수 있다.


Grow Selection
선택한 면과 인접한 면들을 일괄 선택


Select Face Ring
선택한 면과 링처럼 이어지는 면들 일괄 선택


Select Face Loof
위와 같지만 루프는 좌표계와 수직인 둘러싸는 면들을 일괄선택하고 링은 사선일때 일괄선택


Extrude Faces
선택한 면들을 밖으로 뽑아낸다 (Blender의 extrude 생각하면 됨)
옵션에서 distance를 5정도 주면 풍차 날개마냥 뽑아낼수있다. 
여러번 해서 여러개의 면을 만들수있다. (distance 한만큼의 위치로 나아감. 5 > 10)


작업 중 Extrude된 face를 Scaling 할때는 유니티 기즈모를 Pivot <> Center로 변경해주며 작업함.


Material Editor
적용을 원하는 material을 만들어 (emission 머터리얼등) alt+1, alt+2 등에 넣어주고 오브젝트를 선택하며 해당 material을 적용 가능하다.


일부 메쉬에는 회전 스크립트등을 적용하려면 메쉬를 따로 나눠서 만들고 모든 메쉬 오브젝트는 0,0,0으로 
Freeze transform잡아 준뒤 다시 조립된 메쉬의 위치로 잡아주는게 좋다. 이후 하이어라키상에 상속관계를 잡아주고, Export할때는 Prefab 옵션에 Include Children을 체크해준다.


엣지 선택 - Select Edge Ring - Connect Edges  Cube같은거 한번에 반자르기 가능


Subdivide Faces
면을 격자무늬로 계속 잘라주는 기능


window - probuider - repair - Rebuild All Probuilder Objects
폴리브러쉬랑 같이 써서 메쉬가 뻑났을때 복구해주는 기능



[ Polybrush ]

모든 메쉬에서 스컬핑이 가능한 에셋 플러그인
유니티 일반 오브젝트에도 사용 가능하다.

Probuilder의 오브젝트 메쉬와 함께 사용시 스크립트 충돌로 깨져버린다.
Probuilder로 Subdivide Faces를 사용해서 버텍스를 추가하든 해서 만들고 Export해서 일반 유니티 모델로 만들어서 Probuilder 컴포넌트가 없는 상태에서 사용해야한다.

Scatter Prefabs on meshes 탭에서 만들어둔 모델 프리팹을 편하게 뿌려줄수 있음.
(터레인에서는 터레인 오브젝트에서 밖에 안되지만 폴리브러쉬는 어느 메쉬나 가능하다)

 

 

Algorithm Always
Shortest
Path
Movement
Costs
Multiple
Start or End
Points
Speed
Breadth First
Search
Medium
Dijkstra Slow
A* Fast

 

 

A* 알고리즘은 최단경로를 찾을 때 속도와 정확도 사이에서 트레이드 오프 할 수 있다.

 

BFS 알고리즘은 이동 비용을 다루지 못함. (포인트간 간선 또는 가중치의 계산을 할 수 없음) (List, Queue 써서 쉽게 만들 수 있다)

 

A* 알고리즘은 한 포인트에서 한 포인트로 연결되는 알고리즘이라 여러 시작점과 종료점의 선택이 불가능.

 

A* 알고리즘은 정확도를 높이게 되면 느려짐.

그리고 휴리스틱 탐색 방법에 의존하기에 나쁜 방법을 고르게 되면 Dijkstra 알고리즘으로 전환되면서 아주 느려짐.

부모 객체에만 태그를 지정하고 자식들을 가져오게 할 수도 있다.

 

ex)

        GameObject parent = GameObject.FindGameObjectWithTag("Path");

        // 해당 코드로 parent.transform 에서 Transform[] 자식 객체들을 리턴한다는걸 유추할 수 있음.
        foreach (Transform child in parent.transform) 
        {

            // 그럼 거기서 이제 하나하나 필요한거 뽑아오면 된다
            path.Add(child.GetComponent<Waypoint>());
        }

 

넘버패드
1 3 7 xyz평면 정사
9 축 뒤집기
5 원근, 정사 변환
4862 회전, -+ 확대축소
. 오브젝트, 페이스 포커싱


오브젝트 모드
shift  마우스 휠 가운데   이동
N  메뉴
shift + A  오브젝트 add 창
shift + mouse R 3d 커서 위치 변경
delete 오브젝트 제거
TAB 모드 변경 (오브젝트, 편집)
Shift + D 복제
Alit + D 링크 복제 (에딧 모드에서 변경시 함께 변경)
Alit + Z X-Ray 모드
Ctrl + 드래그 박스 선택에서 제외
M 새로운 컬렉션 생성 | 선택된 오브젝트 컬렉션에 추가

T 툴바 활성화
G 오브젝트 이동 (G상태에서 x,y,z키로 축 제한)
R 오브젝트 회전 (상동)
S 오브젝트 크기 조정 (상동)
(축 제한 후 숫자키 입력으로 조정가능. 트랜스폼 드래그로 xyz 한꺼번에 변경가능)
Alt + G, Alt + R, Alt + S 각각 모든 변경 취소

스냅 기능 (중앙 상단에 위치)
(기본값 increment) Face project 선택후 Center 옵션 선택시 object origin (주황색 점)을 기준으로 페이스 위에 스냅시킴
Allign to Roation Target 활성화시 페이스의 면을 따라 회전하게 가능
Project Individual Element 활성화시 다중 선택된 오브젝트 각각의 Origin을 기반으로 페이스 위에 정렬된다

*Obejct Origin 변경법 (스냅을 위한)
1. 오브젝트 선택 - 우클릭 - set origin
2. 우측 상단 옵션 - Origin만 선택 - 기존의 위치 바꾸듯 변경
3. 프론트뷰(1) - 오브젝트포커싱(.) - 편집모드(tab) - 모두선택(A) - 뷰포트 와이어프레임모드 - z축이동(G+Z) 대충 맨아래서 위에 위치하도록
(편집모드에서 오브젝트를 이동해도 오리진은 변하지 않는다. 오브젝트 모드에서는 오리진도 함께 움직인다.)
3번 추천 모든 오브젝트 오리진을 한꺼번에 변경 가능

트랜스폼 피벗 기능 (중앙 상단) - 오브젝트 각자의 Origin을 기준으로 스케일을 줄이는법
기본값은 median point (평균 포인트)
individual Origin으로 변경후 스케일 조정시 오브젝트 각각의 Orgin을 중심으로 조정된다

오브젝트 링크 연결하는법 (Alt + D 와 유사)
연결할 오브젝트들 선택 - Ctrl + L - Link Object Data
(또는 Layout - Object - Link/Transfer Data - Link Object Data)
분리하는 법
분리할 오브젝트 선택 - Layout - Object - Relations - Make Single User - Object & Data


셰이더 모드
우클 셰이더 스무스 + 프로퍼티창 노멀, 오토 스무스 각도 적용
이비 세이더, 오클루전 쉐도우, 반사광 적용 조합
월드 선택 + environment + hdri 조합
ctrl + spacebar 셰이더 편집창 최대화
자주쓰는 셰이더 이비, 사이클
자주쓰는 노드 속성 메탈릭, 러프니스 (메탈릭 0|1, 러프0|1)
N -> View -> 렌더 카메라 잠금 가능
F12 렌더 이미지 생성


편집 모드
E 돌출
ctrl + R 루프 컷
shift + A 하위 메쉬 추가
P 루즈 파츠 (편집모드에서 추가된 메쉬 오브젝트로 분리)
E + S 돌출 모드 상태에서 스케일 조정으로 인셋 생성 (튀어나온 부분, 들어간 부분 만들기)
I 위 인셋을 한번에 하는 인셋 단축키 (바깥 쪽은 안된다)
페이스선택모드 + Alt + 연결부엣지선택 해당 패턴으로 연결된 모든 페이스 선택
Alt + A 모두 선택 해제
다중선택 S + Shift x,y,z shift x,y,z 은 고정한채 사이즈 변경
O Proportional Editin (비례 편집 모드) G 등을 눌러 편집할때 마우스 휠로 영역 안의 버텍스를 일괄 편집 가능

(루프컷 후 좌측하단 루프컷 앤 슬라이드 옵션의 Even, Flipped 옵션을 통해 상단을 기준으로 자를지, 하단을 기준으로 자를지 선택)

메쉬 생성후 좌측아래 속성창을 통해 버텍스(Vertices) 갯수 설정 가능 (미러, 반전 작업 효율을 위해 4로 나누어지는 숫자로 설정)
무언가를 조정한 뒤에는 초기 파라미터를 수정할 수 없기 때문에 메쉬 생성 후 바로 설정해줘야 한다


스컬프팅 모드
X 그리기 브러쉬
Ctrl + X 그리기 중 다시 집어넣기
Shift + 평평하게 그려진다
F 브러쉬 크기(Radius) 변경
Dyntopo 모드 (우측 상단 ctrl + D) 체크 후 그리기시 많은 페이스가 생기면서 스컬프팅
다인토포 옵션 detail을 contant로 변경시 resolution 값을 크게 줄수록 생성되는 페이스가 조밀해진다
(Relative일시 반대)
G 그랩 브러쉬 (픽셀 유동화 같은 기능. 다인토포 적용이 안되므로 페이스가 늘어나거나 하진 않는다)

데시메이트 모디파이어 (폴리 개수 변경)
레이아웃 - modifier properties - add modifier - generate(Decimate) - Ratio 변경 (하단에 Face Count 나옴)
(Apply [Ctrl + A] 를 해야 적용된다. 되돌릴 수 없으니 편집 모드등으로 모드 수정 후 적용)
- 오브젝트 모드에서만 적용 가능

우측 상단의 show overay 드롭다운 메뉴의 statics 체크를 통해 버텍스,엣지,페이스의 갯수 확인 가능



새로운 카메라를 만들어 기존 카메라에 부착하고 카메라의 Flag를 Deapth only로 하고
Clipping Planes의 near를 가깝게해 (0.01) 가까운 오브젝트가 투명해지지않도록 한뒤
Depth를 0으로 우선순위를 메인카메라보다 높게 수정하고 Culling Mask를 사용해 해당카메라가 보여주고자만 하는 오브젝트에 레이어를 넣어주고 선택한다

팔, 무기 등 뚫리거나 잘리는 부위의 오브젝트에 레이어를 설정하고 해당 부위는 메인카메라의 Culling Mask에서 제외한뒤 새로운 카메라의 Culling Mask에서만 보여지도록 한다

메인 카메라와 추가된 카메라에서 보여지는 부분이 달라지므로 depth를 0으로 낮춘 카메라가 더 우선권을 갖고 Near를 수정했기 때문에 마스킹하는 부분이 오브젝트에 의해 잘리지 않게된다

'Development > Unity' 카테고리의 다른 글

Path Search Algorithms Simple Overview  (0) 2024.08.06
태그 문자열 검색 최적화 팁  (0) 2024.08.06
trival tip  (0) 2024.08.06
free resource site & app  (0) 2024.08.06
Gravity Value Modify Ref  (0) 2024.08.06

1. Project Setting - audio - system sample Rate 가 0일 경우 오디오가 적용되지 않을 수 있다 (0인데 잘 적용되긴 함)

 

 

2. Build Settings 씬을 등록해놔야 불러올 수 있다

 

 

3. gizmo 옵션에서 selection outline 체크를 해제하면 오브젝트 선택시 나오는 주황색 라인을 안보이게 함

 

 

4. Player의 레이어를 Ignore Raycast로 하면 Raycast에 플레이어 자신이 포함되는것을 제외할 수 있다

 

 

5. 애니메이터의 시작 애니메이션을 팔을 꺼내는 듯한 모습으로 시작해 idle로 전환하는게 자연스럽다 (해변에서 깨어나는 애니메이션등) 이런 식으로 state를 할 경우 idle이 기본값이 아니기 때문에 Any State 애니메이션을 사용후 자연스럽게 idle 쪽으로 transition을 설정해주는것이 좋다

 

 

6. animation option & tip
has exit time은 애니메이션이 완전히 종료될때까지 대기한다
exit타임은 애니메이션 종료시간을 설정한다 (1이면 완전히 종료될때까지 기다린다)
transition duration은 애니메이션이 종료된 뒤 대기시간을 설정한다 애니메이션이 모두 보여지게한뒤 즉각 전환하려면 0으로 한다
idle 상태에서 walk, run 등으로 자연스럽게 전환되게 하려면 hasexit를 끈뒤 duration 0.1이 적당하다.

Any State의 Can Transition To Self 옵션은 자기 자신의 State로도 전이가 가능한지를 체크하는 옵션이다

애니메이션 클립에서 Loop Pose 기능은 Loop Time이 체크된 애니메이션의 시작과 끝을 자연스럽게 이어지도록 만들어주는 옵션이다

 

애니메이터 컨트롤러는 0,0,0 좌표에 로컬트랜스폼으로 있는 오브젝트에 붙여놓는게 편하다

 

 

7.  Particle System

파티클 시스템의 scale, duration, lifetime, speed이나 Emission, Shape, Color over Lifetime, Size over Lifetime, Renderer, Texture Sheet Animation(sprite로 변경하면 renderer의 머터리얼을 sprite-default로 바꿔줘야함) 등을 만지면서 원하는 이펙트효과를 만들어낼 수 있다. (스킬의 모양이나 총구의 화염 등, 이것저것 눌러보면서 실험하자)

 

파티클을 맞는 대상에 있는 스크립트의 OnParticleCollision() 메소드는 particle의 collision이 체크되어있고 Send Collision Message가 체크되어있을때만 호출된다. 

paticle system의 collision 탭에서 lifetime loss의 값을 1로 변경하면 충돌 즉시 사라지게 할수있다. (기본값 0 : 안사라짐)
renderer 탭의 renderer alignment는 기본값이 view라 카메라의 방향에 따라 파티클의 방향도 변경된다. (velocity로 변경하자)
simulation space를 Local에서 Global로 바꾸면 처음에 발사된 파티클이 처음 발사된 방향 그대로 날아간다 (기본값 Local의 경우 Target을 추적하는 로직으로 작성한 경우 파티클이 이동중에도 타겟을 향해 유도탄처럼 휘어진다)

 

 

8. optimize

* 연산량이 많이 들어가는 메쉬콜라이더는 필요할때만 쓴다

(모델링에 딱 맞춰 메쉬를 생성해준다)
(메쉬콜라이더의 컨벡스 항목을 체크하면 메쉬를 단순화 시켜 연산량을 크게 줄여주지만 그래도 나무나 석재같은 맵 전체에 깔리는
오브젝트에 쓰기에는 부적합하다)

* 이럴때는 그냥 박스 콜라이더같은 일반 콜라이더를 쓰자

 

모든 객체들이 가지는 동일한 데이터들을 ScriptableObject 로서 한 군데에 에셋으로서 모아 관리하고 생성되는 오브젝트들이 이 동일한 에셋을 참조하면 메모리를 효율적으로 쓸 수 있게 된다. 예를 들어 ScriptableObject 을 상속 받는 ZombieData 클래스를 만들고 이 곳에 좀비가 가지는 데이터들을 모아 두고 이를 에셋으로 생성하여서 좀비 오브젝트들이 이 곳을 참조하게 하면 된다!

메모리 사용을 줄인다. -> 여러 사본들이 생성되는 것을 방지
이 ScriptableObject을 참조하게 된다.
MonoBehavior 대신 ScriptableObject를 상속 받는다면
다른 스크립트와 달리 오브젝트에 컴포넌트로서 붙일 수 없다. [MonoBehavior를 상속 받지 못 했으니까]

이벤트는 OnEnable, OnDisable, OnDestroy 만 받을 수 있다.

스크립트는 아닌 에셋이다. 어떤 고유한 파일로서.
클래스이름.CreateInstance 와 클래스이름.CreateAsset 으로, 이 클래스의 인스턴스를 만들고 이를 하나의 에셋으로서 생성할 수 있다.
그냥 스크립트나 폴더 추가하듯이 [CreateAssetMenu]로 에셋 생성 메뉴에 쉽게 추가할 수 있도록 할 수도 있다.
[CreateAssetMenu](filename, menuName, order)
// filename 이 에셋을 생성하게 되면 기본적으로 지어질 이름
// menuName 유니티 에셋-우클-Create- 메뉴에 보일 이름
// order 메뉴에 보일 순서 (기본적으론 첫 번째)
[CreateAssetMenu(fileName = "New Item", menuName = "New Item/item")]
public class Item : ScriptableObject  
{

}
Item 클래스는 ScriptableObject 를 상속받는다.
다른 스크립트와 달리 오브젝트에 컴포넌트로서 붙일 수가 없다.
아이템들이 가지는 기본적인 데이터들을 관리한다.
에셋으로서 만들어 둘 수 있다.

 

 

9. OnEndDrag 과 OnDrop 의 차이
OnEndDrag -> 나 자신을 드래그 하는 것을 끝냈을 때 호출
내가 드래그 되는 것이 끝났을 때!
드래그가 종료했을 때, 드래그 대상이 되었던 오브젝트에서 호출 됨.
OnDrop -> 누군지 모르겠지만 내 자신한테 드롭 된 무언가가 있을 때 호출.
나한테 누가 드롭 되었을 때!
드래그를 멈춘 위치에 있는 오브젝트에서 호출 됨.
드롭 된 다른 곳의 OnDrop 이, 드래그를 끝낸 내 OnEndDrag 보다 먼저 실행된다.

 

 

10. Trigger 사용시 주의점

Trigger는 상대 오브젝트에 RigidBody가 있는 경우에만 반응하기 때문에
적용할 오브젝트에 mass drag usegravity등 속성값을 전부 없애고 is Kinematic만 넣은 껍데기 리지드바디를 넣어준다

 

 

 

freesound.org 무료 음원 사이트 (상용 서비스에 적용시 라이센스 확인 필요)
audacity 녹음 및 음질변환 프로그램

DaFont 무료 폰트 많음

+ Recent posts