Unity高级——状态机——Switch状态机
来源:互联网 发布:网络老虎机破解方法 编辑:程序博客网 时间:2024/05/30 23:04
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;
}
}
}
- Unity高级——状态机——Switch状态机
- Unity框架——状态机
- Unity高级——状态机——有限状态机
- Unity高级——状态机——有限状态机二
- Unity高级——状态机——有限状态机
- 状态机——protothreads
- [Q学习]15 Qt状态机框架——状态机停止
- react——state(状态机)
- 按键状态机—实现连发
- unity状态机
- 往死里写——ECAT_Main()状态机处理
- 【学习小记】UML——状态机图
- uml精粹——10.状态机图
- LabVIEW设计模式系列——状态机
- verilog学习笔记——三段式状态机
- 状态机生成工具——SMC
- [Q学习]13 Qt状态机框架——简单的状态机
- 状态机
- 欢迎使用CSDN-markdown编辑器
- 各大主流.Net的IOC框架性能测试比较
- Android - 文件读写操作 总结
- iOS图片上传到服务器
- undefiined和null
- Unity高级——状态机——Switch状态机
- Android 6.0 权限问题解决方法
- 专业的工具帮你处理关于需求的那些事
- js sleep 实现等待 setTimeOut
- 5-52 两个有序链表序列的交集 (20分)
- js基础
- 记一次基于mssql的入侵
- 块级元素在块级别元素中居中
- LGPhotoBrowser 网络请求图片 报出This application is modifying the autolayout engine from a background thread