PlayMaker 利用 FSM(Finite-state machine)有限状态机,简称状态机,使用有限个状态机,来实现交互设计。
基本概念:Fsm、States、Events、Transition、Actions、Variables
下面来个例子介绍,如何使用 PlayMaker 跟脚本如何联系到一起。
1、新建一个 Cube,添加状态机。
2、添加事件
3、在状态1添加事件
4、添加状态2
5、点击 RotateCube 事件,指向状态2
6、添加 Action,Send Message
7、编写脚本
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class RotateCube : MonoBehaviour
{
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
}
private float rotAmount;
public void RandRotCube(){
// rotAmount = Random.Range (-40, -40);
//print (rotAmount);
// transform.rotation = Quaternion.Euler (0f, rotAmount, 0f);
transform.Rotate(Vector3.up*5.0f);
}
public void PositoinChange(float num)
{
transform.position = transform.position+Vector3.left*num;
}
/*public void ApplyForce(float userForce){
GetComponent ().AddForce (0f, userForce, 0f);
}*/
}
8、PlayMaker 中应用脚本,选择 Method Name
9、点击运行,发现什么都没有。那是因为我们没有调用事件RotateCube
1、添加一个 text,同时添加上变量状态和事件
添加 Action,生成一个随机数
2、编写脚本
using System;
using System.Collections;
using System.Collections.Generic;
using HutongGames.PlayMaker;
using UnityEngine;
using UnityEngine.UI;
using Random = UnityEngine.Random;
public class FsmCall : MonoBehaviour
{
private PlayMakerFSM fsm;
// Start is called before the first frame update
void Start()
{
fsm = transform.GetComponent();
}
// Update is called once per frame
void Update()
{
}
private void OnGUI()
{
if(GUI.Button (new Rect (0, 100, 100, 100), "点我"))
{
//调用事件
fsm.Fsm.Event("radom");
//获取变量的值
transform.GetComponent().text = fsm.Fsm.GetFsmInt("number").ToString();
}
if (Input.GetKey(KeyCode.Return))
{
//修改变量的值
fsm.Fsm.GetFsmInt("number").Value = Random.Range(0, 100);
transform.GetComponent().text = fsm.Fsm.GetFsmInt("number").ToString();
}
if (Input.GetKey(KeyCode.Space))
{
//修改变量的值
setFsm(fsm.Fsm,"number",Random.Range(0, 100));
transform.GetComponent().text = fsm.Fsm.GetFsmInt("number").ToString();
}
}
void setFsm(Fsm fsm,String key,int value)
{
foreach (var one in fsm.Variables.IntVariables)
{
Debug.Log(one.Name);
if (one.Name == key)
{
one.Value = value;
return;
}
}
}
}
其中使用fsm.Fsm.Event("radom");
来调用fsm 里面设置的事件 radom
把脚本挂到 text 下。
运行工程,点击按钮发现数字再改变。空格键或者回车键也会改变数字。