스터디/Unity 2018. 10. 29. 01:52

[Unity] 작업노트 - Playmaker again!


11월의 프로젝트 가제 <Hidden> 유니티 플레이메이커를 적극 활용하기로 했다.


가능한 범위까지만 기능을 최소화해서 11 24일경 itch.io 프로토타이핑을 제출하는 것이 목표이고, 이후에 조금씩 업데이트를 예정.

근데 실제 게임 개발을 혼자서 해본적은 없기 때문에 내가 어디까지 가능한지를 수가 없는 것이 문제.

일단은 플레이메이커만 가지고 코딩없이 게임 개발을 완료한 사례들이 있다고 해서 믿고 가보기로 했다.


2016 9월에 에셋스토어에서 Playmaker 65->45달러로 할인해서 샀고, 기본 개념 공부 포스팅 http://binsworld.tistory.com/196 했는데 3 지났는데 나는 다시 반복중이고.....ㅠㅠ

에셋스토어에는 여전히 65->45달러 할인중이라고 적혀있고?ㅋㅋ

그래도 지난 3년간 유튜브 컨텐츠는 늘어서 다행.


우선은 블로그, 유튜브, 슬라이드쉐어 링크를 모았다



https://www.slideshare.net/agebreak/play-maker

[데브루키] 유니티와 Play maker 이용한 쉽고 빠른 게임 개발



 슬라이드 쉐어로 대강 플레이메이커 핵심 구성을 살펴봄



FSM

State: 상태

정해진 절차에 따라 액션을 반복적으로 수행하는 것이 기계 : Machine

플로우 차트처럼 제한된 상태로써 논리 전개


한 게임오브젝트 내에 복수개의 FSM 생성 가능 (레이어처럼 활용)

예) FSM1 : 캐릭터의 상태 변화 제어 (축소, 확대, 변신, 무적). -> FSM 2 : 행동 변화 제어 (이동, 달리기, 점프, 공격)


STATE

FSM에서 하나의 상태를 표현하는 객체

오브젝트의 상태를 정의한다 : IDLE, 이동, 점프, 공격, 죽음..

상태에는 action이 추가된다. 

상태에 따라 액션이 없을수도 있다

설정된 EVENT 가 발생하면, 다른 State로 전의 (Transition)한다


TRANSITION : state 간의 이동. Transition에 지정된 eventr가 발생했을때 다음 state로 넘어간다


ACTION

STATE에서 수행할 하나의 작업을 표현하는 객체 

플레이메이커에서 여러 액션 제공 : 텍스쳐 변경, 마우스클릭, 오브젝트 이동, 회전 등


EVENT

스테이트에서 정의한 이벤트가 발생하면, 이벤트에 연결된 STATE 전이된다.


VARIABLE

오브젝트를 체크할때는 GameObject 변수

위치와 방향들 - Vector 변수

외에 String Int Texture

FSM 아닌 곳에도 객체 참조하여 얻을 있음


 hutong에서 쇼케이스에 소개된 fsm 예시들을 살펴보면 어떻게 활용할수있는지 감이 온다

https://hutonggames.com/showcase.html





그리고 유데미에서 플레이메이커 강좌를 구매했다. 유튜브에서도 강좌들을 찾을수 있지만 아무래도 유료가 퀄리티가 좋고, 예제 파일이 제공되고, 궁금한걸 튜터에게 직접 물어볼수있다는 장점이 있다.

유튜브는 강좌가 많아서 대표적으로 한글 강의 하나, 영어는 제작사에서 만든걸 들을 예정


https://www.udemy.com/make-your-own-fps-without-code-using-unity-playmaker/

13000

10시간


https://www.udemy.com/cant-code-who-cares-make-games-anyway/

13000

15시간


여러 강좌중 어떤걸 해야하는지 비교하던 와중에 유데미에서 둘을 번들로 묶어서 22000 어때?라고 물어서 그냥 둘다 사버림


25시간을 들을수 있을까?..





플레이메이커를 사용하기 위해서는 유한상태기계 FSM 방식을 이해해야하는데

 http://smartacademy.tistory.com/39 자판기를 예시로 설명한 이 포스팅이 처음 이해하는데 많은 도움이 되었다

물론, 직접 플레이메이커로 예제를 구성해보는 것이 제일 빠른 도움이 된다.



http://unityindepth.tistory.com/25 

http://unityindepth.tistory.com/26

http://unityindepth.tistory.com/27

http://unityindepth.tistory.com/47

http://unityindepth.tistory.com/48

http://unityindepth.tistory.com/49


여기에 외국의 아티클을 한글로 번역한 유한상태기계에 대한 설명이 좀더 자세하게 되어있긴한데 텍스트코딩 기반 유한상태기계 방식이어서 어렵다..(도망)




한글 블로그 강좌 환쟁이님

https://slee16.blog.me/220243746501  플레이메이커 기초#1 - 기본 조작 및 이해

이렇게 상태의 흐름을 바로 볼수있어서 너무 좋다


잠시 건너뛰어서 여기서도 기초 실습 참고

http://smartacademy.tistory.com/42 비주얼 프로그래밍이란? Playmaker 사용해보기

http://smartacademy.tistory.com/44 비주얼 프로그래밍이란? - State 구성하기




https://slee16.blog.me/220267175122 플레이메이커 기초#2 - 변수의 활용 응용
https://blog.naver.com/slee16/220316046075  플레이메이커 기초#3 - 변수의 전달 및 연산
Get FSM Int : 다른 FSM에 저장된 Int 변수 불러오기
Int operator : 두개의 int 변수 연산 후 결과 저장
Send Event

UI필드로 변수등록 수정하는거랑, Inspector 체크하면 public 변수인것처럼 인스펙터에 뜨는것, 카테고리 지정하면 폴더처럼 쓸수있는거 너무 좋군 



3강에서 slee16님 포스팅 잠시 캡쳐

그리고나서 Send Event는 E_Hit



여기에 GUI_E_HP 라는 HP 표시를 하나 넣고, E_HP_changed라는 이벤트를 하나 더 만들어서 Enemy FSM-HP down state에서 attack 받으면 HP가 깎일때 GUI에 E_HP_changed라는 이벤트를 동시에 보내도록 하였다.



GUI에서 그 이벤트를 받으면 Enemy_HP를 다시 받아온다 (근데 GUI_HP에만 get Fsm Int를 넣는게 맞는지, GUI_HP와 HP updated 둘다에 넣는게 맞는지 모르겠네, 일단 둘다 됨)




그리하여 버튼 누르면 Attack하여 enemy HP 낮추는 것까지 GIF









스터디/Unity 2016. 8. 2. 04:25

[유니티] 네트워크 The Basics of Unity 5 Networking



네트워크 프로그래밍 난생처음 맛보기..

유투브에서 30분 분량의 튜토리얼을 보고 그대로 따라 해보긴 하는데 실제로는 기초 지식이 필요할것 같다 




The Basics of Unity 5 Networking


https://www.youtube.com/watch?v=JlKf0h0K5PU


Import Asset > CrossPlatformInput

drive.cs 작성. pika 오브젝트에 스크립트 add


오브젝트 Add component > Network > network identity

local player authority 체크

add > network > network transfer

transform sync mode : sync transform

Create Empty  > 이름 NetworkManager

여기에 Add > network>network manager

Add>network>network manager HUD


오브젝트를 프리팹으로 만들어놓고 비활성화

NetworkManager 오브젝트 > Spawn Info > Player Prefab 칸에 pika 프리팹을 드래그


BUILD할때 FULLSCREEN해제

하나는 호스트 접속. 하나는 클라이언트 접속해서 방향키 테스트 해보기

(이때 스폰되는 좌표가 0,0,0이어서 카메라뷰에 안들어오는 바람에 처음엔 오류로 착각했음


그리고 둘이 같은 키보드 인풋을 받기 떄문에 동시에 움직이는 문제가 발생한다

pika 프리팹에서 Drive 스크립트 비활성화

그리고 새로운 스크립트 만들기 > 이름 SetupLocalPlayer



이 코드를 pika 프리팹에 드래그앤드랍하고서 플레이해보면 스폰된 clone 오브젝트 클릭해보면 아까 비활성화했던 drive 스크립트가 자동으로 활성화됨.

빌드해서 호스트+클라이언트 테스트해보면 이제 따로 움직임


프리팹에있던 pika를 다시 씬으로 꺼내서 child에 3d Text꺼내서 Player 입력 


이제 회전을 해도 같은 방향으로 보도록 수정해야함

새 스크립트 faceCamera.cs 만들어서 카메라 방향으로 rotate되도록 코드 작성


name 차일드 오브젝트에 이 코드 붙여줌


플레이어 이름 입력받기

SetupLocalPlayer열어서 OnGUI와 Update에 키보드 인풋으로 이름 바꾸는 코드 작성

//OnGui()를 OnGUI()로. 대소문자 유의



SetupLocalPlayer  다시 열어서 여러개의 이름 받을수있도록 하기 

[SyncVar] 추가해주고 public으로 변수. pname이 바뀌면 서버에서 모든 클라이언트에게 이 변수를 동기화하라고 하는 one-way direction.

저장하고 나오면 SetupLocalPlayer컴포넌트에 Pname player SyncVar가 생김



그다음 현재 구현된 GUI는 매 업데이트마다 텍스트를 보내는 형식이라 비효율적이므로 버튼 누르면 바뀌도록 작성 


버튼 + [Command]  

CmdChangeName(pname); 으로 클라이언트로부터 서버에 텍스트 보냄 

이 [SyncVar]와 [Command]관계를 이용해 게임에서 응용 가능 


1. 첫번째 테스트 : local host로 2명의 유저 접속


 유니티에디터에서 맥 app으로 빌드 (이때 카메라 뷰를 살짝 다르게 해줘봤음) -> 유니티에디터에서 게임 플레이 -> 아까 빌드한 맥 app 재생 -> 에디터의 게임뷰에서 LAN Host 실행 -> 맥 app 에서는 localhost로 LAN client 실행 하고나면 맨 첫 이미지처럼 두 캐릭터가 나타나며, 초기 위치는 동일





160809 추가


2. 두번째 테스트. localhost가 아닌, usb로 연결된 스마트폰과 맥을 unity remote로 연동



우선 unity remote (https://docs.unity3d.com/Manual/UnityRemote4.html) 를 안드로이드폰 (테스트는 nexus 7으로 했음) 에 설치하고 개발자 설정에 가서 usb 디버깅 가능하게 체크 -> 맥에는 안드로이드 빌드 환경이 되어있어야 함 (android sdk와 java sdk) -> 유니티 옵션에서 안드로이드 sdk 경로 지정해줌. 혹은 안드로이드로 빌드 설정하면 sdk 경로 지정하라고 뜨기도 함. -> 이때 identifier 이름 제대로 지정되어있나 다시 확인잘해보고 -> 안드로이드에서 unity remote 켜놓고 맥에서 build & run 하면 폰화면에 실행됨!


맥에서 LAN Host + 안드로이드에서 Client 옆칸에 맥 ip주소 입력

안드로이드에서 LAN Host + 안드로이드에서 폰 ip 주소 입력.

둘이 usb 연결되어있어서 같은 localhost로 될줄 알았는데 안되는거 같다.


3. 세번째 테스트 : 안드로이드용 apk로 설치하여 외부 접속


맥은 안드로이드 폴더에 접속이 바로 안되서 android file transfer(https://www.android.com/filetransfer/)를 깔면 된다는데 이유는 모르겠으나 안되서 인터넷으로 apk 파일 업로드 (이때 확인되지 않은 외부 앱 사용용가능하도록 안드로이드 보안 설정 바꾸어주어야 함) 다운로드하여 설치 .


2번처럼 잘 됨 :) 


4. 네번째 테스트 : 웹 브라우저


PC <> Mac <> web 다 됨



(여기서부터 과정은 암유발..지저분한 링크들..)


1) 유니티 에디터에서 웹플레이어 버젼 빌드 (튜토리얼  https://www.youtube.com/watch?v=8u06DdPy7ec

이때 switch platform 선택. 폴더 지정해주면 html 파일과 unity 파일 두개가 생긴다.


2) 이제 이 두 파일을 웹에 올려야 하는데.. 


일단 크롬은 유니티 웹플레이어가 지원이 안되서 사파리, 파이어폭스, 익스플로러로 열어야 함. 그리고 모바일 브라우저도 안됨. 


2-1) 로컬에서 열기 (내컴퓨터)


유니티 웹플레이어가 깔려 있어야 하고 ( http://unity3d.com/kr/webplayer)

실행하려면 자바 보안 설정 변경해야함 : 윈도우 시작메뉴 -> 자바구성 실행 -> 예외사이트에 http://webplayer.unity3d.com 추가

https://www.java.com/ko/download/faq/exception_sitelist.xml

맥, 윈도우 둘다 로컬에서 열어서 호스트 ip만

입력하면 잘 연결됨 


2-2) 드랍박스에서 열기 


http://answers.unity3d.com/questions/954694/is-it-still-possible-to-host-web-player-builds-thr.html

맥과 윈도우 둘다 잘 안됨. pro 계정으로 업그레이드 해야 호스트 기능이 사용 가능한듯?


2-3)  구글드라이브에서 열기 


https://www.youtube.com/watch?v=8u06DdPy7ec 이 예전 영상에서는 구글드라이브에서 바로 호스팅 주소를 따올수있었는데 ui가 바뀌면서  http://answers.unity3d.com/questions/937188/unity-web-player-on-google-drive-not-loading.html http://kkangeva.tistory.com/24  이 게시물처럼 해당 파일 id를 따서 주소를 고쳐서 사용해야 한다. 이때 한참 애를 먹었던 부분이 html 파일 주소 아이디로 했더니 web player는 뜨는데 로딩이 안되는 현상. 결국 폴더 id로 새주소 만든 다음에  /파일이름.html  이렇게 바꾸어줘야 잘됨.

어쨌든 구글도 구글도 2016년 8월 31일 까지만 지원하고 그 이후로는 안된다고하니 어서 버려야겠다


2-4. 개인 호스팅 


결국 내 홈페이지에 ftp 로 올려서 하니까 진짜 2초 만에 잘된다. 으 날린 네시간이 아까워.

사실 ftp 도 하도 오랜만에 써서 아이디 비번도 까먹고 맥 ftp 앱 윈도우 ftp 앱 뭔가 둘다 잘 안되고 새로 받은 filezilla만 잘되네. 이유는 모르겠다. 



모두 모여라





스터디/Unity 2016. 7. 6. 19:18

[유니티] 초보자를 위한 유니티 C# 스크립트 강좌 수강






거의 일년전에 배우다만 유니티에 다시 도전. ([지난글] : 유니티4 기초테크닉 80 + Roll a Ball + zombie run)

지난주부터 유니티4 기초테크닉 수업을 첨부터 다시 듣고, 3d 캠퍼스 프로젝트를 살짝 업그레이드했다.

ibatstudio 강좌가 꽤 맘에 들어서 스크립트 강좌도 55불에 결제했다.

(유투브에도 강좌가 꽤 있긴 하지만...돈 들이면 아까워서라도 더 열심히 하겠지.......)

한번 결제해놓으면 동영상 파일을 다운받아서 무제한으로 들을수 있게 되어있다.

단지 아쉬운 건 지난 epub 버젼과 달리 텍스트 버젼이 없어서 

추후에 급히 배웠던 내용을 찾아보기가 어려울 것 같음

에버노트에 정리하면서 들어야할듯


http://www.ibatstudio.com/csharp/

자바랑 그나마 조금 비슷해서 다행이다.