Unity PlayMaker 和 脚本

PlayMaker 利用 FSM(Finite-state machine)有限状态机,简称状态机,使用有限个状态机,来实现交互设计。
基本概念:Fsm、States、Events、Transition、Actions、Variables

下面来个例子介绍,如何使用 PlayMaker 跟脚本如何联系到一起。

例子1

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<Rigidbody> ().AddForce (0f, userForce, 0f);
    }*/
}


8、PlayMaker 中应用脚本,选择 Method Name
在这里插入图片描述

9、点击运行,发现什么都没有。那是因为我们没有调用事件RotateCube

10、点击状态1,添加 Action。
在这里插入图片描述
各个参数设置
在这里插入图片描述

11、给状态2添加过渡,并连线
在这里插入图片描述
12、运行,查看效果
在这里插入图片描述

例子2,脚本调用 fsm

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<PlayMakerFSM>();
    }

    // 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>().text = fsm.Fsm.GetFsmInt("number").ToString();
        }

        if (Input.GetKey(KeyCode.Return))
        {
            //修改变量的值
            fsm.Fsm.GetFsmInt("number").Value = Random.Range(0, 100);
            transform.GetComponent<Text>().text = fsm.Fsm.GetFsmInt("number").ToString();
        }
        
        if (Input.GetKey(KeyCode.Space))
        {
            //修改变量的值
            setFsm(fsm.Fsm,"number",Random.Range(0, 100));
            transform.GetComponent<Text>().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 下。
运行工程,点击按钮发现数字再改变。空格键或者回车键也会改变数字。
在这里插入图片描述

发布了56 篇原创文章 · 获赞 24 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/u014196765/article/details/105251643
今日推荐