[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; } } }
这下就对了
空调维修
- 海信电视维修站 海信电视维修站点
- 格兰仕空调售后电话 格兰仕空调维修售后服务电
- 家电售后服务 家电售后服务流程
- 华扬太阳能维修 华扬太阳能维修收费标准表
- 三菱电机空调维修 三菱电机空调维修费用高吗
- 美的燃气灶维修 美的燃气灶维修收费标准明细
- 科龙空调售后服务 科龙空调售后服务网点
- 华帝热水器维修 华帝热水器维修常见故障
- 康泉热水器维修 康泉热水器维修故障
- 华凌冰箱维修电话 华凌冰箱维修点电话
- 海尔维修站 海尔维修站点地址在哪里
- 北京海信空调维修 北京海信空调售后服务
- 科龙空调维修 科龙空调维修故障
- 皇明太阳能售后 皇明太阳能售后维修点
- 海信冰箱售后服务 海信冰箱售后服务热线电话
- 海尔热水器服务热线