스터디/Unity 2018. 11. 12. 00:40

[Unity] 작업노트 - Playmaker 연습하기 7, get/set property 2- 환쟁이님 강좌

환쟁이(slee16) 강좌 따라 연습하기 계속
플레이메이커 액션 - Get/Set Property 두번째 파트

Rigid body의 gravity 옵션 켜기
Mesh Renderer에서 Cash Shadow 켜고 끄기

terrain에 큐브를 하나 만들어주고
게임오브젝트 manager_box 를 만들어 FSM 추가
Ready 스테이트에 <Get Key Up> 액션, ready_push 이벤트 추가

Result 스테이트에 cube 오브젝트를 프로젝트뷰에서 드래그앤드랍

플레이하면 큐브는 공중에 떠있고, 엔터를 누르면 Gravity가 적용되어 아래로 떨어진다 



위 예제의 큐브를 내가 만든 캐릭터 프리팹으로 교체해보고 싶었는데 생각보다 문제가 복잡해졌다

단순 큐브의 meshRender 오브젝트의 get/set property는 간단한데, 캐릭터는 상위폴더아래에 몇개의 메쉬/메쉬렌더러가 별도로 있기 때문
그래서 아래 링크를 참고해서 몇단계를 더 거쳤다

우선 변수형은 Object(게임오브젝트와의 차이를 이제서야 알았다)를 만들고 타입에서 갖가지 서브 요소타입을 정할 수 있다

 Player 1 게임오브젝트의 child인 yellowbody를 새 게임오브젝트 변수 get child에 저장하고, 
(플레이어를 구성하는 여러 파트가 있지만 그냥 몸통 부분만 일단 받아오고 나머지는 그림자 cast shadow를 아예 첨부터 꺼버렸다)
그 yellow body 게임오브젝트중 메시렌더러 부분을 아까 만든 object 변수에 저장한다


그리고 get/set property는 아까 드래그드랍을 바로 했던것과는 달리 리스트에서 변수를 불러온다

플레이!

엔터를 누르면 gravity가 활성화 되어 아래로 떨어졌다가 다시 초기 위치로 돌아가게 되고,
스페이스를 누르면 그림자가 생겼다가 없어졌다 하게 된다!


스터디/Unity 2018. 11. 11. 02:51

[Unity] 작업노트 - Playmaker 연습하기 6, get/set property - 환쟁이님 강좌

환쟁이(slee16) 강좌 따라 연습하기 계속
플레이메이커 액션 - Get/Set Property 첫번째 파트


Get / Set Property 를 유니티 UI와 연결하는 연습

Create Empty Object - UI에서 Image 선택 - 소스에서 Knob 선택 - Imagey Type Filled 를 선택 - Fill amount에 따라 원의 채워지는 퍼센트가 달라진다

-Property_Guage라는 게임오브젝트 만들고 
-circle_increase 스테이트에 아까 만든 UI 이미지를 드래그앤 드랍하면 이런 메뉴가 뜬다.
-Image에서 Set Property 선택



FillAmount 변수(0~1)에 따라 원의 채워짐이 달라지는데 이때 <animate float> <set float value>를 이용해 f_animfloat이 f_circleamunt까지 변화할때 curve곡선에 따라 변화도록 해준다



결과!


스페이스바를 누르면 값이 조금씩 증가하도록 변경
Stanby 스테이트에 <Get Key up> 추가하고 ready_to_push 이벤트

Circle_increse 스테이트에 <float add> 추가

숫자가 1이상이 되는지를 판단하는 스테이트를 추가하고 conf_no conf_yes 이벤트 추가하여 분기
1이상이 되면 reset 스테이트에 <set float value> 를 0으로 하고, 다시 standby 스테이트로 보낸다



플레이! 스페이스바 누를때마다 원이 커지고 1이상이 되면 reset 됨



100일코딩, 100DaysOfCode 시작!

https://twitter.com/Binsworld_dev

100일코딩 도전을 위해 트위터부계정을 하나 더 만들었다.


#100daysofcode 는 하루에 한시간 이상 코딩을 하고, 그 간략한 내용과 해시태그를 트위터에 남기기만 하면 된다.

봇이 리트윗도 해주고 참여자들끼리 서로 격려해주기도 하기 때문에 왠지 영어로 적는편이 더 흥할것 같다.. 

아래 홈페이지에서 좀더 자세한 프로젝트 소개가 되어있다.

https://www.100daysofcode.com/



나중에 좀더 시간이 나면 아래를 참고해서 기록 남기는 방법도 좀더 고민해봐야겠다

https://medium.freecodecamp.org/how-to-transform-your-100daysofcode-log-into-a-visual-experience-d048334af8d9



스터디/Unity 2018. 11. 11. 01:29

[Unity] 작업노트 - Playmaker 연습하기 5, 두 플레이어의 이동 - 환쟁이님 강좌

환쟁이(slee16) 강좌 따라 연습하기 계속
플레이메이커 예제 #2 - 플레이어의 이동  2

-두개의 오브젝트에서 하나를 선택하여 GameObject에 변수에 저장
-변수에 저장된 오브젝트를 제어

1.Manager_Control 오브젝트. PlayerSelect FSM


Terrain,  플레이어 1, 2 추가 


Manager_Control 오브젝트에 PlayerSelect PlayerMove 두 FSM 추가



CheckObject 스테이트
클릭한 게임오브젝트를 Obj_Object 변수에 저장 <Mouse Pick>
LayerMask에서 Terrain, Invert Mask 선택하면 terrain빼고 다른 레이어만 인식
(Mouse Pick / Mouse Pick Event의 차이는 무엇일까 다음에)



Reset State
오른쪽클릭-Mouse_Cancel- 선택한 오브젝트를 변수에서 해제 

*문제점 

클릭해보면 변수 필드에 Obj_Object의 value가 Player2 오브젝트가 아니라 그 안에 있는 세부 캡슐 조각 Capsule(4)들이 선택딘다.
혹시나 해서 빈게임오브젝트를 상위에 두고 캡슐들을 그 아래로 묶어 다시 프리팹으로 만들보았지만 결과는 그대로.
나중에 실제 게임에서 '얼굴을 클릭하면, 몸을 클릭하면, '이렇게 분할조건을 만드는데는 쓸수있겠지만.. 가장 상위 단위의 오브젝트 (Capsule(8)이 아닌 Plyaer2 )를 선택되게 하려면 어떻게 하면 좋을까?collider 추가?
=> 환쟁님의 답변 : collider 추가 맞음

*오브젝트를 만들때는 위치값, 보는 방향 원점을 항상 첨부터 잘 조정해두자. 


2.Manager_Control 오브젝트. PlayerMove FSM

오브젝트에 PlayerSelect와는 별도로 PlayerMove FSM을 하나 더 생성한다

-Standby 스테이트에 Obj_Check 이벤트 추가 (global 체크). 이후에 PlayerSelect에서 이벤트를 보낼때 사용 
-Check Object 스테이트에 진행 분리
  • 1_PlayerSelectFSM으로부터 GameObject 변수를 받아와서 Obj_Selected 변수에 쌓는다 (global체크)  <Get Fsm Game Object>
  • Select_N Select_Y 이벤트 추가
  • <Get Object Is Null> 오브젝트가 Null 인지 판단하고
    • Null 이면 Select_N 이벤트로 이전 스테이트로 돌아가고
    • Null이 아니면 Select_Y로 Ready To Move 스테이트로 이동

-
-ReadyToMove 스테이트에 마우스 오른쪽/왼쪽 클릭 구분하여 분기
-Mouse_Click , Mouse_Cancel 이벤트 등록
-<Get Mouse Button Down> 액션 추가

-Set target 스테이트에는 MousePick 된 오브젝트를 Obj_Selected 변수에 넣고, 그 위치를 Vec3 변수인 Pos_Pick에 넣게된다
-이때 PlayerSelect와는 반대로 LayerMask 1 을 Terrain을 선택해서 TerraIn만 선택

*위 그림에서  실수를 했음. Obj_Select에 Store를 하는 바람에 Terrain이 움직여버림. 아래와 같이 Pos_Pick만 Store 하도록.




-Move 스테이트에는 <Move Towards> 추가하여 선택된 오브젝트를 Pos_Pick까지 이동하게 한다.
-Ignore Vertical은 Y값 이동 막음
-오브젝트 위치 0.5 거리까지 가면 FINISHED 이벤트가 발생하여 다시 ReadyToMove 스테이트로 이동


마지막으로 1_PlayerSelect FSM으로 가서 Check Object 스테이트에 Send Event Object_Check를 보내준다.

그러면 2_PlyaerMove 의 StandBy 스테이트가 이벤트를 받아 다음 스테이트로 넘어가게 된다.

플레이 결과!

원하는 캐릭터를 왼쪽 클릭하고 땅을 클릭하면 그쪽으로 이동, 우클릭하면 해제하고 다른 캐릭터 선택 가능!

*이걸 만약에 그냥 캐릭터를 좌클릭할때마다 이전에 선택된 캐릭터를 해제하고 해당 캐릭터를 선택하는 방식으로 메카닉을 바꾸려면..
PlayerSelect FSM에서 캐릭터를 우클릭시 Obj_Selected가 Null 인지 아닌지를 체크하는 과정을 한번 더 넣어야할듯


Move 스테이트에 <Smoothy Look At>을 추가하여 좀더 자연스럽게 바라보며 이동하도록 응용해보았다.
프리팹내의 캐릭터 오브젝트가 회전를 첨부터 잘 맞춰두는 것이 중요한것 같다..







스터디/Unity 2018. 10. 13. 15:23

[Unity] 작업노트 - 유니티 유료 에셋을 백업해보자


OOV 게임 프로젝트 종료로 유료 에셋 공유 계정도 클로징 예정이라 다시한번 깨끗한 프로젝트 파일에 백업하는 작업을 하고 있다. 


개발자님이 지난 데모버젼까지 오류 수정과 주석 작업을 해주시면 그걸로 다시한번 파일 정리를 하고나서, 11월 전시용 작업 진행할 예정


-진행하던 프로젝트 파일에서 export package 해서 공유하는 경우 가끔 안되서 에셋스토어에서 새로 받아야하는 경우도 있고해서 백업해둠 (아래 프로젝트 전체 익스포트하기 문제 발견)


-에디터 버젼 업데이트나 에셋 버젼 업데이트가 있는 경우 한번씩 다시 받아줘야하는데 이부분은 계정이 없어져서 더이상 지원이 어려울듯, 심각한 문제가 발생하는 경우에 구매한 인보이스 pdf 보관해두고 개발자에게 직접 컨택해서 업데이트를 부탁해보자 (...)


- 에셋을 다운로드하고 임포트하는데도 시간이 엄청 오래걸림 


-에셋을 많이 받으면 프로젝트 용량이 커져서 (1)새 프로젝트 파일에 300메가+20메가 짜리 배경 에셋 두개 받았는데 프로젝트 파일 크기 1.6기가 2)마지막 개발버젼 폴더는 4기가 .......) 유티니에서 열기만 하는데도 너무 오래걸려서 분리해두는게 나을것 같았음.. 백그라운드/모델링/그래픽효과/개발플러그인으로 분리해서 보관해두면 좋을거 같지만 일단 구매순으로 3-4개 정도로


-좀더 찾아보니 에셋스토어에서 다운로드하면 공통으로 로컬에 저장되는 경로가 있었네. 아래 링크 참고


-팀즈 백업에서 궁금한점 : 구독을 해제했지만, 추후에 다시 같은 멤버로 등록하면 백업 파일과 히스토리가 남아있는가?




[에셋스토어 구입한 패키지 저장되는 경로]


에셋스토어에서 다운로드 - 임포트 하게 되는데 다운로드한 파일이 저장되는 곳으로 보여짐


Windows : \Users\accountName\AppData\Roaming\Unity\Asset Store

Mac : “open ~/Library/Unity/Asset Store”


-맥의 경우 라이브러리 폴더는 숨겨져있다. 접근 방법 http://macnews.tistory.com/203

-제일 간단하게는 Finder - 보기에서 옵션 키 누르면 “라이브러리”가 보임


-회사명 폴더로 되어있음 해당 폴더명이 패키지명과 다르니 주의요망!!

-에셋 폴더는 항상 라이브러리 폴더 (메타데이터와 연결 정보 담고있음) 와 함께 백업 (안그러면 재앙이)...

-프로젝트 폴더 내의 Assets 폴더 안에 파일을 붙여넣기 하면 프로젝트 뷰에서 알아서 불러와진다



에셋 패키지 (임포트, 익스포트)

https://docs.unity3d.com/kr/2017.4/Manual/AssetPackages.html


에셋 임포트 (폴더 복사)

https://docs.unity3d.com/kr/550/Manual/ImportingAssets.html



[유니티 프로젝트 전체 익스포트하기]


프로젝트 파일 자체도 유니티팀즈 구독이 해제 되기 때문에 한번더 백업해두었지만 팀즈 종료후에 익스포트 패키지 형태로 공유하게 되면 태그나 레이어 등의 프로젝트 세팅은 함께 익스포트 되지 않는다고 한다


https://www.ijemin.com/blog/%EC%9C%A0%EB%8B%88%ED%8B%B0-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EC%A0%84%EC%B2%B4-%EC%9D%B5%EC%8A%A4%ED%8F%AC%ED%8A%B8%ED%95%98%EA%B8%B0/


유니티에 기본 내장된 패키지 제작툴(Assets > Export Package)은 태그와 레이어, 빌드 세팅 등의 프로젝트 세팅은 함께 익스포트 해주지 않는다.

라이트 유저에게는 프로젝트 세팅까지 같이 익스포트하는게 오버킬이라 생각하는 듯.

프로젝트 세팅까지 모두 익스포트하고 싶으면 AssetDatabase.ExportPackage 에 대한 내용을 참조하여 커스텀 메뉴를 만들면 된다.





백업 와중에 하드 용량이 다찼다

유니티도 안돌아가고 일반 사용시에도 너무 느려서 조만간 업그레이드 예정



*CPU i5 -> i7

*SSD 삼성 pro 1T?2T?
분리한 HDD 외장케이스 씌워서 재활용 (1-2만원 추가)

타임 머신에 백업부터..