logo资料库

Unity3D红绿灯实现步骤.docx

第1页 / 共3页
第2页 / 共3页
第3页 / 共3页
资料共3页,全文预览结束
红绿灯功能的实现: 使 用 状 态 机 来 实 现 红 、 黄 、 绿 三 个 灯 的 切 换 。 首 先 创 建 一 个 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并实现 State 中的抽象方法,Enter()(进入状态)、 Execute()(执行状态)、Exit()(退出状态)。设置单例模式:RedLight_State。 进入 Enter() 1,调用 LightState 类中的公共自动属性 StateLights,赋一个字符串“StateLight_Red” |entityType.StateLights = "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 为固定的增量时间: StateLight_Red 表示为红灯状态。 entityType.RemainingTime -= Time.fixedDeltaTime; 2,判断当前红灯剩余时间是否小于等于 0,如果条件成立,则切换为绿灯状态: entityType.GetLight().ChangeState(GreenLight_State.Instance()); 进入 Exit() 1,判断红灯对象 Red 是否为 NULL,不为 NULL 时,条件成立,将红灯关闭: entityType.Red.light.enabled = false; 定义绿灯状态类,继承 State并实现 State 中的抽象方法,Enter()(进入状态)、 Execute()(执行状态)、Exit()(退出状态)。设置单例模式:GreenLight_State。 进入 Enter() 1,调用 LightState 类中的公共自动属性 StateLights,赋一个字符串“StateLight_Green” |entityType.StateLights = "StateLight_Green";| StateLight_Green 表示为绿灯状态。
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并实现 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并实现 State 中的抽象方法,Enter()(进入 状态)、Execute()(执行状态)、Exit()(退出状态)。设置单例模式:IdleLight_State。
进入 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--;
分享到:
收藏