[Unity] 战斗系统学习 14:Switchable 3
家电修理 2023-07-16 19:17www.caominkang.com电器维修
1. Bug协程阻塞游戏主线程
我在测试 Sitchable 的时候发现我的过渡并没有达到应有的效果,几乎是瞬间就从起点值到达了终点值,没有平滑
我把平滑时间延长了之后发现游戏有明显的阻塞,这和我对协程的第一印象相悖
原代码
使用 IEnumerator 函数用于协程
////// 模式过渡使变量在不同预设值之间切换 /// /// 预设模式 ///private IEnumerator ModeTransition(T mode) { float time = ModeTransitionTime; hile(time > 0) { time -= Time.deltaTime; Debug.Log(time); foreach (ISitchable sitchable in sitchableList) { sitchable.SitchValue(mode); } } yield return null; }
协程启动方式
////// 行动模式 /// [ShoInInspector] [Tooltip("行动模式")] private T mode; ////// 行动模式 /// public T Mode { get => mode; set { if (oner != null) { if (sitchValueCoroutine != null) oner.SCoroutine(sitchValueCoroutine); sitchValueCoroutine = oner.StartCoroutine(ModeTransition(value)); mode = value; } } }
后来我悟了……原来是还是需要 yield return
2. SitcherEnum v3Assets/MeoFrameork/Core/Sitchable/SitcherEnum.cs
// ---------------------------------------------- // 作者: 廉价喵 // 创建于: 22/04/2022 18:45 // 一次修改于: 26/04/2022 23:05 // 版权所有: CheapMeoStudio // 描述: // ---------------------------------------------- using System; using System.Collections; using System.Collections.Generic; using System.Linq; using Sirenix.OdinInspector; using UnityEngine; namespace MeoFrameork.Core.Sitchable { public class SitcherEnum: ISitcher here T: Enum { /// /// 主人 /// private SerializedMonoBehaviour oner; ////// 主人 /// public SerializedMonoBehaviour Oner { set => oner = value; } ////// 行动模式 /// [ShoInInspector] [Tooltip("行动模式")] private T mode; ////// 行动模式 /// public T Mode { get => mode; set { if (oner != null) { if (sitchValueCoroutine != null) oner.SCoroutine(sitchValueCoroutine); sitchValueCoroutine = oner.StartCoroutine(ModeTransition(value)); mode = value; } } } ////// 切换模式的过渡时间 /// [Tooltip("切换模式的过渡时间")] public float ModeTransitionTime = 1f; ////// 可切换变量列表 /// private ListsitchableList; /// /// 可切换变量列表 /// public ListSitchableList { get { if(sitchableList == null) sitchableList = ne List (); return sitchableList; } } // 缓存 /// /// 切换变量的协程 /// private Coroutine sitchValueCoroutine; ////// 模式过渡使变量在不同预设值之间切换 /// /// 预设模式 ///private IEnumerator ModeTransition(T mode) { float time = ModeTransitionTime; hile(time > 0) { time -= Time.deltaTime; foreach (ISitchable sitchable in sitchableList) { sitchable.SitchValue(mode); } yield return ne WaitForSeconds(Time.deltaTime); } yield return null; } } }
这下就对了
空调维修
- 温岭冰箱全国统一服务热线-全国统一人工【7X2
- 荆州速热热水器维修(荆州热水器维修)
- 昆山热水器故障码5ER-昆山热水器故障码26
- 温岭洗衣机24小时服务电话—(7X24小时)登记报
- 统帅热水器售后维修服务电话—— (7X24小时)登
- 阳江中央空调统一电话热线-阳江空调官方售后电
- 乌鲁木齐阳春燃气灶厂家服务热线
- 珠海许昌集成灶售后服务电话-全国统一人工【
- 乌鲁木齐中央空调维修服务专线-乌鲁木齐中央空
- 新沂热水器故障电话码维修-新沂热水器常见故障
- 诸城壁挂炉24小时服务热线电话
- 靖江空调24小时服务电话-——售后维修中心电话
- 空调室外滴水管维修(空调室外排水管维修)
- 九江壁挂炉400全国服务电话-(7X24小时)登记报修
- 热水器故障码f.22怎么解决-热水器f0故障解决方法
- 营口热水器售后维修服务电话—— 全国统一人工