强化界面2
PlaneProperty
PlaneProperty
脚本是动态挂载在Property对象上的脚本,用来动态加载PropertyItem,显示当前战机的各种属性和加点情况。
属性加点部分也是需要配置的,我们修改InitPlane.json文件
1 | { |
value是初始值,cost是升级所需要的花费,grouth是每次升级的成长点数,maxValue是成长最大值。
攻速在这里是“attackTime/value”,attackTime表示基础攻速,attackTime = 1表示每1秒发射一颗子弹,攻速的Value值表示战机的基础攻速占真正发射子弹的时间间隔站的百分比,当攻速的Value = 80时,这个战机的真正攻速是1 / 80% = 1.25,也就是每1.25秒发射一颗子弹。
为了更好地反映配置,在PlaneProperty
脚本中添加内部的枚举Property,每个枚举值和配置文件中的相对应,这样就可以快速通过修改配置文件和枚举值来实现不同的UI,这也是尽量修改配置不修改逻辑的思想。
1 | using System.Collections.Generic; |
别忘了在StrengthenView
内动态挂载此脚本
1 | protected override void InitChild() |
遍历枚举的三种方式
1 | using UnityEngine; |
第一种方式,使用
System.Enum.GetNames(System.Type enumType)
,这种方式会将枚举值转化为string第二种方式,使用
System.Enum.GetValues(typeof(Property)
,这种方式会返回一个Array
类,我们可以强转成对应的Enum
类型第三种方式,使用for循环,因为枚举本质上还是int,所以可以使用枚举类型代替int来循环
PropertyItem
这个脚本是动态挂载在Item的UIPrefab上的。
1 | using UnityEngine; |
这个脚本也是用了静态变量来让自己的id自增的方法,和协程管理器的协程id分配方式一样。
每个Item自己设定在Rect中的位置,不使用Layout组件,配合id来自动设置。
每个Item配合
ItemKey
枚举,动态查找需要显示的数据。
PlayerPrefsMemory
在其中实现GetObject
方法,来解决使用Get<T>
方法时,泛型类型指定的不准确就不返回值的问题。同时我们也实现一下SetObject
方法
1 | public class PlayerPrefsMemory : IDataMemory |
IDataMemory
和DataMgr
也要添加GetObject
和SetObject
方法,这里省略。
静态拓展类ExtendUtil
在Utility文件夹内新建ExtendUtil
脚本,用来简化获取RectTransform
组件的方法,只需要调用transform.GetRect()
即可。
1 | using UnityEngine; |
静态拓展方法只能通过实例来调用,不能使用类名静态调用,也即是使用
Transform.GetRect()
是不行的。