스터디/Unity 2018. 11. 3. 21:38

[Unity] 작업노트 - Playmaker 연습하기 2 - Game Artz님 강좌


한글 유튜브 강의를 살짝 들어봄

https://www.youtube.com/watch?v=gA1Yxkq_uQc (Game Artz님) unity playmaker 02

https://www.youtube.com/watch?v=T36lEjrS2cQ unity playmaker 03


- 플레이메이커 설치후 중요 셋팅

- 버튼 눌러서 캐릭터 조작하기


유니티 메뉴 Playmaker > Addons>> download addons

Ecosystem browser 추가 설치해야 기타 플러그인을 사용할 있음


UI> Canvas 생성

안에 UI > button 생성

버튼에 Add FSM



버튼을 눌렀을때 오른쪽으로 이동하도록 만들어보겠음

Ecosystem browser 에서 U gui proxy full 다운로드


그러면 이제 state 에서 transition


반드시 add script 해야함

Play maker u component proxy (script) 추가!



키보드로 캐릭터가 4방향으로 로 움직이도록 했고, 버튼 누르면 구 쪽으로 달려감

Smoothy Look At, Move Towards 액션 사용




카메라가 캐릭터 쫓아가도록 main camera 오브젝트를 player캐릭터 넣음

근데 그러면 귀여운 앞모습이 보이질 않잖아..흑




카메라에 FSM 추가해서 Smoothy Follow Action 추가하면 카메라가 오브젝트를 자연스럽게 쫓아가고 회전함





https://www.youtube.com/watch?v=XRUUGhWB1Wg unity playmaker 04

큐브 위에 마우스 클릭하면 큐브가 사라지면서 다음 큐브가 나타나는 예제







다음 단계로 버튼을 누르면 캐릭터가 다음에 나타나는 큐브를 바라보도록 응용 해보았다

그리고 Cube를 누르면 Cube쪽으로 쫓아가고, sphere를 누르면 그쪽으로 쫓아감

근데 Sphere를 누르면 state가 finish 되면서 cube를 바라보는 state로 자동 넘어가서 획 돌아가버리는 느낌.

이건 어떻게 해결해야할까? finish가 되면서 cube를 바라보지 않는 state를 캐릭터에 하나 더 추가해야하나?

암튼 현재는 일일히 event 1 2 3 4 만들어서 큐브1 클릭하면 큐브 2 액티베이트 되면서 이벤트 1 보내고 rotateCube라는 글로벌 게임오브젝트에 Cube2를 넣는다. 

다음 cube2 클릭하면 cube3 액티베이트, 이벤트 2 보내고 rotateCube Cube 3 넣고.. 이렇게 동일하게 반복하게 된다. 

 이때 event 1 2 3 4 따로 보내지 않고 nextcube라는 이벤트를 만들어서 공용화하고, 다음에 액티베이트 되는 큐브를 글로벌게임오브젝트에 넣도록 공용화(함수화?)하고 싶은데 어떻게 하는지 잘 모르겠다. playmaker의 액션 종류에 대해서 좀더 공부해야할듯


getter/setter 구분해서 쓰는거랑 gameobject랑 FSMgameobject랑 변수로만 만든 gameobject랑 너무 헷갈림 0ㅁ0...


그래도 로직을 만들면서 헤매기는 하는데 연두색 선으로 state의 이동에 대한 디버그를 하면서 할수있어서 좀 다행이다


텍스트 코딩으로 했으면 내 실력으로는 어림도 없는 구성이었을듯!


playmaker 만세!








스터디/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. 9. 19. 17:10

[유니티] Playmaker

유니티용 플러그인 Playmaker를 질렀다 (65달러에서 45달러로 할인중이었음)

프로세싱으로 만들어둔 데모를 이제 본격 유니티의 세상으로 옮겨야하는데 java랑 C#이 그나마 비슷하다고는 해도 새로 배워야할 개념이 많아져서 허우적대는중

비주얼 프로그래밍이라고해서 Max/msp 같은건가 싶었는데 FSM 개념을 담은 Flow-chart?..

State Action Event간의 관계가 헷갈려서 듣던 튜토리얼을 멈추고 블로그를 뒤적거리며 개념 정리하는 중.



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

introduce unity3D and playmaker basic - Slideshare

Hutong Games사의 튜토리얼 페이지



  • 함수 단위가 아닌 FSM 단위로 비주얼 프로그래밍 가능

  • GameObject FSM (Finite State Machine : 유한상태기계) 컴포넌트 하나 추가한 것이 하나의 FSM 객체가 된다. 한 게임 오브젝트에 여러 FSM 객체를 만들수도 있으며 일종의 레이어처럼 사용할수있다 (FSM1 캐릭터의 상태 변화제어, FSM2 캐릭터의 행동변화 제어)

  • FSM : State가 특정하게 제한된 것을 Finite State라 하며, 정해진 절차에 따라 반복적으로 그 일을 수행하는 Machine



  • State : FSM에서 하나의 상태를 표현하는 객체. 여러 action과 transitino으로 구성됨
  • Action : State에서 수행할 하나의 작업을 표현하는 객체. (오브젝트 이동 회전 등등등)
  • Transition : State에서 다른 State로의 이동. Transition에 지정된 Event가 발생했을때 다음 State로 넘어감
  • Event : Mouse down..FINISHED 등
  • Variable : 변수(Global도 따로 지정 가능). FSM이 아닌 곳에서도 객체 참조하여 값 얻을수 있음 


  • Animation event를 Playmaker로 전달 : animation event 함수를 PlaymakerFSM 함수중 SendEvent로 지정

  • 모든 PlayMakerFSM 컴포넌트로부터 Action 조회하기

foreach (var fsm in Component.FindObjectsOfType<PlayMakerFSM>())
{
    if (!fsm.Fsm.Initialized)
        fsm.Fsm.InitData();

    foreach (var state in fsm.FsmStates)
    {
        foreach (var action in state.Actions)
        {
            // use action
        }
    }
}

  • 마우스 클릭한 위치에 있는 오브젝트 찾아서 PlayMakerFSM에 이벤트 전달

if(Input.GetMouseButton(0)) {
   ray = Camera.main.ScreenPointToRay(Input.mousePosition);
   if (Physics.Raycast(ray, out hit, 5000)) {
    Debug.Log("name : " + hit.collider.name);
    //PlayMakerFSM fsm = hit.collider.GetComponent<PlayMakerFSM>();
    //fsm.SendEvent("이벤트명");

   }
  }