Unity高级——状态机——Switch状态机

原创 2016年08月31日 11:51:16

Unity高级——状态机——Switch状态机

我们将要学习的内容是Switch状态机,前一节我们通过if写了一个简单的功能,就是开关灯的功能,但是开关灯的功能,并不能称之为完整的状态机,虽然说它包含了状态机中所必须的元素或者概念。比如里面也呈现了一些状态的过程……但是它并不是一个完整的状态机

 

最最简单的一个的状态机,一般我们都会使用Switch语句去实现,因为我们使用Switch的时候,会和枚举一起使用,用枚举来表示我们的状态机中不同的状态。然后用Switch来判断,当前处于什么状态再来解决应该选择哪些逻辑代码进行执行。Switch本身就是一个分支语句。


using UnityEngine;
using System.Collections;

public class LightController : MonoBehaviour {

    private Light _light;

    void Awake(){
        _light = GetComponent<Light> ();
    }

    void  Update(){
        //当前的脚步就是状态机
        //用户按键时间就是状态切换的条件——事件
        if(Input.GetKeyDown(KeyCode.O)){

            //灯的光强从0变为1时,就是状态的过渡
            //打开灯
            //灯开着的状态
            _light.intensity=1f;
    
        }

        if(Input.GetKeyDown(KeyCode.C)){

            //灯的光强从1变为0时,就是状态的过渡
            //关闭灯
            //灯处于关着的状态
            _light.intensity=0f;
        
        }
    }
}

接下来我们要模拟灯光忽明忽暗的效果!

而我们当前的代码是无法实现,我们当前的代码不能准备的去判断,我们当前的这个灯到底是处于开着的,还是关这的,接下来我们要改一下一下代码!

Update()里面的内容删除,在Update()中,使用switch来实现!



using UnityEngine;
using System.Collections;

//枚举用来表示灯光中的状态
public enum LightStates{
    Open,//打开状态
    Close,//关闭状态
    
}

public class LightController : MonoBehaviour {

    private Light _light;//当前游戏对象上的灯光组件
    private LightStates _currentStatre;//当前状态


    void Awake(){
        //初始化成员变量
        _light = GetComponent<Light> ();
    }

    void  Update(){
        //if语句实现状态机效果
        //当前的脚步就是状态机
        //用户按键时间就是状态切换的条件——事件
//        if(Input.GetKeyDown(KeyCode.O)){


            //灯的光强从0变为1时,就是状态的过渡
            //打开灯
            //灯开着的状态
//            _light.intensity=1f;

    
//        }

//        if(Input.GetKeyDown(KeyCode.C)){


            //灯的光强从1变为0时,就是状态的过渡
            //关闭灯
            //灯处于关着的状态
//            _light.intensity=0f;



        //使用Switch进行状态检测
        switch (_currentStatre) {
        case LightStates.Open:
            //当处于Open状态时要执行的代码
            print ("Open....");
            OnOpenState ();
            break;
        case LightStates.Close:
            //当处于Close状态时要执行的代码
            print ("Close...");
            OnCloseState ();
            break;
        }
        }
        //当处于Open状态时执行的代码
        private void OnOpenState(){
        //检测按键时间——按下C键是关灯
        if(Input.GetKeyDown(KeyCode.C)){
            _light.intensity = 0f;
            //更新当前状态
            _currentStatre = LightStates.Close;
            
        }
        
        }
        //当处于Close状态时要执行的代码
        private void OnCloseState(){
        //检测按键时间——按下O键是关灯
        if(Input.GetKeyDown(KeyCode.O)){
            _light.intensity = 1f;
            //更新当前状态
            _currentStatre = LightStates.Open;

        }

    }
}

 

 

 

版权声明:本文为博主原创文章,未经博主允许不得转载。

c#——switch case语句

c#——switch case语句 c#中的switch case语句有三种结构,具体形式如下图所示: (1)Switch的第一种结构:(如例1) ...
  • haiyan_cf
  • haiyan_cf
  • 2012年03月07日 17:17
  • 25491

Unity UGUI SwitchButton制作

在游戏设置中我们经常会使用到类似这样的开关组件,但是UGUI并没有直接提供,通常我们都是使用Toggle组件加自己写的脚本完成这个效果,今天我们来制作一个脚本,直接达到switchButton这样的效...
  • qq_29695345
  • qq_29695345
  • 2017年03月25日 16:33
  • 534

【游戏设计模式】之三 状态模式、有限状态机 & Unity版本实现

游戏开发过程中,各种游戏状态的切换无处不在。但很多时候,简单粗暴的if else加标志位的方式并不能很地道地解决问题,这时,就可以运用到状态模式以及状态机来高效地完成任务。状态模式与状态机,因为他们关...
  • zhmxy555
  • zhmxy555
  • 2016年10月16日 20:04
  • 25750

Unity高级——状态机——有限状态机

Unity高级——状态机——有限状态机
  • ios_song
  • ios_song
  • 2016年08月26日 13:15
  • 5563

[Unity基础]一个简单的状态机

状态机一般情况下只有两个类:状态基类以及管理状态的类。 状态机主要用于AI或者场景切换(不同场景对应的就是游戏的不同状态),当然,这只是本人的想法。 using UnityEngine; usin...
  • lyh916
  • lyh916
  • 2015年05月26日 19:12
  • 1918

Unity中状态机的使用

Unity中状态机的使用在游戏中,人物的状态是不断变化的,所以写个FSM来管理状态是必要的。 一个有限状态机是一个设备,或者是一个设备模型,具有有限数量的状态,它可以在任何给定的时间根据输入进行操...
  • xiaoge132
  • xiaoge132
  • 2017年06月15日 21:26
  • 642

Unity简单角色状态机实现

  • 2017年09月25日 22:09
  • 7KB
  • 下载

Unity中实现一个状态机

维基百科:有限状态机(英语:finite-state machine,缩写:FSM)又称有限状态自动机,简称状态机,是表示有限个状态以及在这些状态之间的转移和动作等行为的数学模型。本文参照quick-...
  • David_Dai_1108
  • David_Dai_1108
  • 2017年07月26日 23:46
  • 428

让你轻松学会unity的状态机?

Unity FSM 有限状态机 翻译了一下unity wiki上对于有限状态机的案例,等有空时在详细写一下。在场景中添加两个游戏物体,一个为玩家并修改其Tag为Player,另一个为NPC为其添...
  • quanfa206
  • quanfa206
  • 2017年11月23日 19:56
  • 53

Unity5.0状态机

Unity 动画团队一直在努力工作、同心协力,使 Unity 5.0 具有令人印象深刻的功能集。敬请期待新动画功能,下面是有关新动画功能的简要概述,希望可以对Unity 的用户们有所帮助!   状态...
  • book_longssl
  • book_longssl
  • 2015年01月19日 19:34
  • 2001
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Unity高级——状态机——Switch状态机
举报原因:
原因补充:

(最多只允许输入30个字)