当前位置:   article > 正文

Unity PlayMaker 和 脚本_如何把脚本复制到palymaker的action中

如何把脚本复制到palymaker的action中

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);
    }*/
}


  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37

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;
            }
        }
    }
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65

其中使用fsm.Fsm.Event("radom");来调用fsm 里面设置的事件 radom
把脚本挂到 text 下。
运行工程,点击按钮发现数字再改变。空格键或者回车键也会改变数字。
在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/码创造者/article/detail/772000
推荐阅读
相关标签
  

闽ICP备14008679号