목차

목표

작성하려는 로직

로직 시나리오

임의 오브젝트에 대해서, 아래 과정을 반복한다.

  1. 최초 위치로 이동 시킨다
    • 판단 부분 추가
      • 초기 위치로 이동시킬 것인가?
      • 현재 위치에서 바로 다른 움직임을 시작할 것인가?
  2. 다음 이동 위치를 결정한다
    • 다음 중 선택
      1. 정해진 루트를 순서대로 탐방하는 방식
      2. 정해진 루트 중에 한 곳을 임의 선택해서 이동
  3. 정해진 위치로 이동
  4. 도착하면 다른 오브젝트에 메시지를 전송
  5. 잠시 대기
  6. 2번 루트로 되돌아 가서 반복

사용하려는 오브젝트

씬 화면

움직일 오브젝트, MovingObject
2_MovPath ~ 5_MovPath에 기즈모 마크 추가

1차 : Path 순서대로 이동하기

최종 목표

움직이는 순서

  1. 최초이동
  2. 다음 이동 좌표 구하기
  3. 정한 좌표로 이동
  4. 잠시 대기, 2번으로 돌아가서 반복

사용하는 액션

나중에 한번에 찾아보기 좋게 정리해 놓은 것. 지금 봐둘 필요는 없는 부분.

= Bool Test : Bool 타입의 변수에 대해서 IF 문을 수행
= Get Child Count : 자식 오브젝트의 숫자 구하기 (Recursive인지는 모르겠네)
= Find Child : 이름으로 자식 오브젝트 찾기 & 변수에 저장<sup>변수는 따로 준비하는 것</sup>
= Wait : 대기시키는 액션
= Set Int Value : 정수 입력  
= Int Add : Int 타입 변수<sup>변수는 따로 준비하는 것</sup>에 숫자를 더한다. 정수대 정수 연산은 다른 액션을 사용한다.   
= Int Compare : 정수 2개 (값 또는 변수) 비교하고, 결과 값에 따라 <sup>같다, 작다, 크다</sup> 이벤트 발생
= Convert Int To String : 숫자(int)를 문자열로 변경
= Build String : 문자열을 조립한다.
= Move Towards : 특정 위치로 이동. 중간에 멈출 수 잇는지 아닌지 모름

PlayMaker FSM 추가

게임 오브젝트 MovingObject에 새로운 FSM 추가.

(PlayMaker 태그가 붙어 있는 스샷 추가)

'Init' State 추가

목표

작업 preview

추가할 변수

Name Type Desc
PathObjectCount Int Path 위치 역할을 하는 오브젝트의 최대 개수
PathObjectIndex Int 여러 패스 중에 몇번째 패스 오브젝트 위치를 참조할 것인가?

사용할 액션

변수 추가

Variables 탭을 눌러서 앞으로 사용할 변수를 추가

= PathObjectIndex : **MovingObject \ Position**의 Child 오브젝트 개수를 구한다.
= : 이동할 위치 정보를 갖고 있는 GameObject의 개수를 구한다.
= PathObjectCount : 이동 위치 정보 GameObject의 인덱스를 저장할 변수를 추가하고 초기화

FSM에 'Init' State 추가

< 100% 40% - >
초기 State Init를 추가

Init 상태State에 액션 추가

< 100% 40% - >
PathObjectIndex
Set Int Value 액션
PathObjectCount
Get Child Count 액션

Get Child Count 액션에서 GameObject에 Position 오브젝트를 할당.

'First React' 추가

목표

  1. 처음 시작 위치로 이동할 것인지
  2. 바로 이동할 위치 정보를 설정해서 이동할 것인지
If문 역할 하는 State를 추가하는 것을 봅니다.

작업 preview

추가할 변수

Name Type Desc
useEnteringMotion Bool 최초 '특정 위치'로 이동한 다음 Fixed경로이동을 시작할 것인지?

추가할 이벤트(Event)

FINISHED는 내장 이벤트. 현재 State가 종료되때를 가리킨다.

사용할 액션

추가할 State

< 100% - >
Bool Test 액션 결과 값에 따라, 이동할 State를 준비한다.
테스트

State, Event 추가

  1. First React라는 State 추가.
  2. Init State에 FINISHED 트랜지션을 추가
  3. FINISHED 트랜지션을 First React State로 연결 : 마우스를 FINISHED 에서 First React 로 클릭&드래깅!!

목표 1,2 중에 어떤 것을 선택할 것인지 확인할 bool 변수 추가.


true, false 일때 보낼 이벤트를 추가.


First Positioning, Goto NextReact
: 이벤트가 설정 되었을때, 액션의 결과 조건으로 이벤트가 선택 되는 경우 이동할 새로운 State를 추가한다.

다시정리

  1. StateA를 만든다.
  2. StateA에서 액션을 추가해서, 로직을 실행한다.
    • 이때, 변수를 사용할 필요가 있으니 필요한변수를 추가한다.
  3. StateA에서 액션 실행 중 또는 완료시, 다른 State로 변경 되어야 한다면
    • 이벤트를 추가한다. (추가하거나, 기존 것을 사용하거나)
    • State 변경 여부는 액션의 결과(변수 값 변경 후, 검사해서 State 변경 필요 여부를 알아낸다.)
  4. StateB 와 같이 변경될(이동할 State를 추가한다.)
  5. 잘 써먹는다

First React 로직 추가

FSM에서 Init State를 선택하고 State 탭에 액션 추가

< 100% - >
Bool 테스트 액션 추가
< 100% - >
상태변경(Transition)메뉴에서 각 이벤트를 추가
이 이벤트면 상태변경이 발생된다, 라는 뜻.
< 100% - >
각 이벤트에서 새로운 State를 연결

useEnteringMotion 변수 값에 의해,

Variables 탭에서 "useEnteringMotion" 변수 값을 변경해서 맞는 State로 이동하는지 확인.

이동 경로 State 처리

목표

  1. 다음에 이동할 위치 정보를 얻어서 이동
    1. Position 게임 오브젝트의 Child 오브젝트를 순서대로 돌아가며 이동.
  2. 목표 지점까지 이동한 다음, 잠깐 대기
  3. 다시 1번으로 돌아가서 반복

추가할 부분

  1. 특정 오브젝트를 이름으로 찾기
  2. 찾아낼 오브젝트의 이름String을 조합
  3. 오브젝트를 이동시킨다
  4. 잠시 대기

FSM 로직 상태 정리 (간단히)

1. 'Next React'새로 추가 에서,

2. 'Setup Next Position'새로 추가 에서

목적 실제로 할 것
Position의 child 오브젝트를 찾기 위한
스트링을 조합
PathObjectIndex 변수를 사용해서 찾아낼 오브젝트 이름 만들기
오브젝트를 찾은 다음, 저장해 놓기 savedNextMovingPosition 변수 추가해서 여기에 저장
PathObjectIndex 변수 값 증가 PathObjectCount보다 크면 다시 1로 설정

3. 'MoveTo'새로 추가 State

4. 'Wait'새로 추가 State

'Next React' State 처리

지금은 하는 일이 없기 때문에, Setup Next Position으로 바로 이동.

'Setup Next Position' State 처리

1단계 : 스트링 변경 작업

이 액션을 추가

실행순서 (위 → 아래) : Convert Int to String → Build String

Convert Int To String & Build String

실행 중에, 값이 반영 되어 있는 모습

결과 : PathObjectIndex 숫자 값이, nextPathObjName 스트링으로 변경.

뭐... 코드를 안쓰려고 하다보니 이런 짓도 해야 함.

2단계 : 위치 정보 저장

이 액션을 추가

위에서 만들어둔 오브젝트 이름으로 Child 를 찾아서, savedNextMovingPosition에 저장한다.

이동,대기

목표

간단한 부분이므로 퀵 정리

'MoveTo' State 처리

State 추가

액션 추가

State 간 연결(Transition)

Setup Next Position-FINISHED → MoveTo 로 연결

대충 메모 하고, 은근 슬쩍

실행 후 에러가 없다면 성공.
위치 오브젝트에 대한 변경이 없어서, 제자리에 가만 있는 것 같지만..

'Wait' State 처리

2초 대기 후, FINISHED 이벤트에서 Next React State로 이동(한다)

새로 필요한 것

지금 실행 해보면 동작 하지만에러나면 에러.. 한자리에 가만 있는다. 위치 오브젝트를 변경한 적이 없기 때문에 당연한 현상.

앞으로 할 것

Setup Next Position에서

새로 추가할 State

'++NextObject Index' State

별로 복잡하지 않아서 퀵 설명.

  1. Int Add 액션을 추가해서 PathObjectIndex에 1을 더한다. (1이면 2가 되겠지)
  2. Int Compare를 추가해서 (PathObjectIndex > PathObjectCount) 요런 상태인지 확인한다.
    • 맞다면, Need PathObjIndex 이벤트이 이벤트 추가 필요를 쏜다.

추가 State 필요한 타이밍

요 경우가 왜 State를, 언제 분리하는게 좋은가 알려줌

Event를 잘 활용하면 되긴 되지만, 복잡해질 것 같은데.
숫자를 리셋하는 타이밍을 찾는 조건 또한 다른 방법을 취할 수 있다. 
Find Child 결과가 null인지 확인한다든지. null이면 숫자를 리셋하는거지.

'Reset NextObject Index' State

State를 추가한다.
단순히 PathObjectIndex를 1로 초기화 한다.

State 연결

이 두 State 모두,

중간 확인

실행 실행 실행

지금까지 된 부분으로, 오브젝트가 Position의 Child 오브젝트들을 따라 움직여야 한다!

2차 : 남은 부분

귀찮은데 종료할까.. 생각보다 굉장히 긴데.

'MoveToFirstPosition' State 처리

여긴 나중에 정리