상세 컨텐츠

본문 제목

유니티 플레이메이커와 C# 간 변수 엑세스

UNITY PlayMaker

by 오픈플레이 2019. 6. 13. 11:25

본문

유니티 비쥬얼 스크립팅 플러그인인 플레이메이커는 초보 제작자들에게 게임 제작 알고리즘 및 스크립트 작성의 원리를 배울 수 있는 좋은 플러그인이라고 생각합니다. 허나 아무리 간단한 게임이라도, 혼자서 만들기는 쉽지가 않지요.

 

때때로 다른분들의 도움을 받을 때가 있을텐데, 특히 프로그래머와 협업하기에는 그다지 환영받는 플러그인은 아닙니다.

 

이유는... 보기가 쉽지 않다는 것이 첫번째 이유이며, 두번째는 유니티의 많은 유용한 함수 / 변수를 공식적으로 지원하지 않는데 있습니다. 실제로 List라던가, binaryFormatter, aciveInHierachy 등을 쓸 수 없으며, 기본 액션에 포함되지 않는경우 EcoSystem을 통해 원하는 액션을 찾아야하는 번거로움이 있지요. 사실 플레이메이커로 유니티 스크립트, C# 스크립트의 많은 기능을 쓰지 않아도 게임을 원하는 방향으로 제작하고 완성하는데 불가능은 없습니다. 단, 효율이 좀 좋지 않지요.

 

여튼 프로그래머와 유연한 작업을 위해서는 C# 스크립트와 연계가 필수이며, 가장 기본적으로 변수에 접근하고 수정할 수 있어야 되겠습니다.

 

플레이메이커 FSM에 있는 변수를 C#에서 액세스 하려면 다음과 같습니다.

 


1. <PlayMakerFSM> 컴포넌트

먼저 HutongGame.PlayMaker를 선언 해준 다음, <PlayMakerFSM>의 컴포넌트를 받아와야 합니다.

using HutongGames.PlayMaker;

public class tutorial_accessFsm : MonoBehaviour
{
    public PlayMakerFsm fsmBox;
    
    void Start
    {
    	// PlayMakerFSM 컴포넌트를 받습니다.
    	fsmBox = GameObject.Find ("mister_box").GetComponent<PlayMakerFSM>();
    }
}

해당 게임오브젝트가 다른 클래스 (C# 스크립트)를 함께 가지고 있다면, 다음과 같은 방법으로 컴포넌트를 받아올 수 있겠지요.

public GameObject box;
public PlayMakerFsm fsmBox;

void Start
    {
    	box = GameObject.Find ("mister_box").gameObject;
        // 게임오브젝트에 포함된 PlayMakerFSM 컴포넌트를 받습니다.
    	fsmBox = box.GetComponent<PlayMakerFSM>();
    }

 


2. FSM 변수 받아오기

플레이메이커 컴포넌트를 받아왔다면, 해당 변수를 받아와야 하는데, 전용 변수를 받아와야 합니다.

'Fsm'접두어가 붙으며, 뒤에 속성을 붙이면 됩니다.

FsmInt

FsmFloat

FsmBool

FsmGameObject

... 등등 나머지 변수들은 직접확인 해 보시기 바랍니다. 에디터가 다 찾아주거든요.

 

그럼 테스트로 만든 Fsm의 변수 중 'hp' float 변수를 받아 오도록 해봅시다. ㅇㅅㅇ.

float 'hp'의 변수에 45를 넣었습니다.

 

fsmFloat fsmHp;
// FSM float 변수를 검색 후 받아옵니다.
fsmHp = fsmBox.FsmVariables.GetFsmFloat("hp");

float 변수인 fsmFloat 변수를 지정해주고,

fsm오브젝트.FsmVariables.GetFsmFloat("변수명");

이렇게 진행합니다. 조금 번거롭습니다.

 

public float boxHp;

boxHp = fsmHp.Value;

C# 스크립트 내 변수에 받아올 float 변수를 지정해 주고,

float변수 = fsm변수.Value;

이렇게 하여 최종으로 C#내 변수를 받아옵니다. 항상 fsm변수 다음에 .Value;를 붙여야 에러가 나지 않습니다.

 

실행을 해보죠.

FSM 컴포넌트와 변수 boxHp가 잘 들어옵니다.

 

 

그렇다면, C#을 통해 Fsm변수를 수정하려면 어떻게 해야 할까요. ㅇㅅㅇ.

 

 


3. FSM 변수 수정하기

 

Fsm float 변수, atkDamage를 수정 해 보겠습니다.

 

fsmBox.FsmVariables.GetFsmFloat("atkDamage").Value = 15.5f;

앞에서 살펴본 형식과 거의 같습니다. 단지 ' = ' 순서를 바꾸면 됩니다.

'SetFsmFloat'을 사용할 것 같지만, 해당 함수는 가지고 있지 않아요. 

 

실행하면 변수가 변경된 것을 볼 수 있습니다.

변수가 성공적으로 변경 되었습니다.

 

 

감사합니다. ㅇㅅㅇ.

 

관련글 더보기

댓글 영역