教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 文库大全 > 实用文档 >

unity红绿灯功能的实现

来源:网络收集 时间:2026-08-17
导读: unity红绿灯功能的实现 红绿灯功能的实现: 使用状态机来实现红、黄、绿三个灯的切换。首先创建一个LightState类,继承BaseGameEntity类。 LightState状态初始化类: 在LightState类中定义状态机:sm_LightState 设置为一个公共的方法,给LightSwitchover状

unity红绿灯功能的实现

红绿灯功能的实现:

使用状态机来实现红、黄、绿三个灯的切换。首先创建一个LightState类,继承BaseGameEntity类。

LightState状态初始化类:

在LightState类中定义状态机:sm_LightState 设置为一个公共的方法,给LightSwitchover状态切换类调用。

在LightState类中,定义一个folat中间公共自动属性(RemainingTime)来获取红、黄、绿、闲置这四个状态的时限。

初始化4个状态的时限,红灯为33s,绿灯为30s,黄灯为0.5s,黄灯的闲置状态时限为0.5s 定义3个GameObject类型的公共自动属性,用来获取红绿灯中的红灯、绿灯、黄灯的游戏对象,分别是:Red、Green、Yellow

定义StateLights,string类型的公共的自动属性,用来获取当前红绿灯的状态,给碰撞检测使用。

定义一个公共的int类型的变量Transitions。用来设置每个红绿灯的初始状态。0初始状态设置为“绿灯状态”sm_LightState.SetCurrentState(GreenLight_State.Instance());。大于0初始状态设置为“红灯状态” sm_LightState.SetCurrentState(RedLight_State.Instance());

LightSwitchover状态切换类:

定义红灯状态类,继承State<LightState>并实现State中的抽象方法,Enter()(进入状态)、Execute()(执行状态)、Exit()(退出状态)。设置单例模式:RedLight_State。

进入Enter()

1,调用LightState类中的公共自动属性StateLights,赋一个字符串“StateLight_Red”|entityType.StateLights = "StateLight_Red";| StateLight_Red表示为红灯状态。

2,然后判断红灯对象是否为空,不为空,则将其设置为ture。

“entityType.Red.light.enabled = true;”打开红灯

3,初始化黄灯闪烁的次数:entityType.next = 3;

4,调用LightState类中,folat类型的中间公共自动属性(RemainingTime)获取红灯状态的时限:entityType.RemainingTime = entityType.redLightTime;

进入Execute()

1,设置红灯状态剩余时间,Time.fixedDeltaTime为固定的增量时间:

entityType.RemainingTime -= Time.fixedDeltaTime;

2,判断当前红灯剩余时间是否小于等于0,如果条件成立,则切换为绿灯状态: entityType.GetLight().ChangeState(GreenLight_State.Instance());

进入Exit()

1,判断红灯对象Red是否为NULL,不为NULL时,条件成立,将红灯关闭:

entityType.Red.light.enabled = false;

定义绿灯状态类,继承State<LightState>并实现State中的抽象方法,Enter()(进入状态)、Execute()(执行状态)、Exit()(退出状态)。设置单例模式:GreenLight_State。

进入Enter()

1,调用LightState类中的公共自动属性StateLights,赋一个字符串“StateLight_Green”|entityType.StateLights = "StateLight_Green";| StateLight_Green表示为绿灯状态。

unity红绿灯功能的实现

2,判断绿灯对象是否为空,不为空,则将其设置为ture。

“entityType.Green.light.enabled = true;”打开绿灯

3,调用LightState类中,folat类型的中间公共自动属性(RemainingTime)获取绿灯状态的时限:entityType.RemainingTime = entityType.GreenLightTime;

进入Execute()

1,设置绿灯状态剩余时间,Time.fixedDeltaTime为固定的增量时间:

entityType.RemainingTime -= Time.fixedDeltaTime;

2,判断当前绿灯剩余时间是否小于等于0,如果条件成立,则切换为黄灯状态: entityType.GetLight().ChangeState(Yellowight_State.Instance());

进入Exit()

1,判断绿灯对象Green是否为NULL,不为NULL时,条件成立,将绿灯关闭:

entityType.Green.light.enabled = false;

定义黄灯状态类,继承State<LightState>并实现State中的抽象方法,Enter()(进入状态)、Execute()(执行状态)、Exit()(退出状态)。设置单例模式:YellowLight_State。

进入Enter()

1,调用LightState类中的公共自动属性StateLights,赋一个字符串“StateLight_Yellow”|entityType.StateLights = "StateLight_Yellow";| StateLight_Yellow表示为绿灯状态。2,判断黄灯对象是否为空,不为空,则将其设置为ture。

“entityType.Yellow.light.enabled = true;”打开黄灯

3,调用LightState类中,folat类型的中间公共自动属性(RemainingTime)获取黄灯状态的时限:entityType.RemainingTime = entityType.YellowLightTime;

进入Execute()

1,设置黄灯状态剩余时间,Time.fixedDeltaTime为固定的增量时间:

entityType.RemainingTime -= Time.fixedDeltaTime;

2,判断当前黄灯剩余时间是否小于等于0,如果条件成立,再判断黄灯闪烁次数是否不等于1,如果条件成立,

则切换为黄灯闲置状态:

entityType.GetLight().ChangeState(IdleLight_State.Instance());

否则,切换为红灯状态:

entityType.GetLight().ChangeState(RedLight_State.Instance());

进入Exit()

1,判断黄灯对象Yellow是否为NULL,不为NULL时,条件成立,将黄灯关闭:

entityType.Yellow.light.enabled = false;

2,初始化黄灯闲置状态时限:

entityType.idleLightTime = 0.5f;

定义黄灯闲置状态类,继承State<LightState>并实现State中的抽象方法,Enter()(进入状态)、Execute()(执行状态)、Exit()(退出状态)。设置单例模式:IdleLight_State。

unity红绿灯功能的实现

进入Enter()

1,调用LightState类中,folat类型的中间公共自动属性(RemainingTime)获取黄灯闲置状态的时限:entityType.RemainingTime = entityType.idleLightTime;

进入Execute()

1,设置黄灯状态剩余时间,Time.fixedDeltaTime为固定的增量时间:

entityType.RemainingTime -= Time.fixedDeltaTime;

2,判断当前黄灯闲置状态剩余时间是否小于等于0,如果条件成立,则切换为黄灯闲置状态:

entityType.GetLight().ChangeState(IdleLight_State.Instance());

进入Exit()

1,黄灯闪烁次数,减1:

entityType.next--;

…… 此处隐藏:1636字,全部文档内容请下载后查看。喜欢就下载吧 ……
unity红绿灯功能的实现.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wenku/1113478.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)