赞
踩
在你想制作一个技能的时候,一般情况下你需要有一个技能类,然后你需要实例化这个技能类,制作一个单例,填入不同的构造函数。
而这个时候,就可以选择使用Scriptable Object,脚本化对象。
Scriptable Object在unity中的图标样式:
Scriptable Object简单来说就是个数据容器,它将实例化的对象都以脚本的方式存储在文件夹中。
以我现在做的项目为例简单介绍Scriptable Object的使用:
注意:此技能类是需要继承ScriptableObject,不需要挂载在任何gameobject上。因为是保存在文件夹当中,也可以利用此特性做到数据的储存。
using UnityEngine; [CreateAssetMenu(fileName ="New Skill",menuName ="Skills/Minion")] public class Skill:ScriptableObject { [Header("技能名称")] public new string skillName; [Header("最小释放距离")] public int minDistance; [Header("最大释放距离")] public int maxDistance; [Header("立即伤害值/恢复值")] public int damage; [Header("技能图标")] public Sprite skillIcon; [Header("技能CD回合数")] public int CD; [Header("技能已经进入CD几回合")]//当nowCD==CD 技能可以释放 public int nowCD; [Header("是否是个buff类技能")] public bool isDot; [Header("对谁释放的技能:0对自己,1对敌人")] public int isToEnemy; [Header("持续回合数")] public int keepRound; [Header("已经持续的回合数")]//当nowRound == keepRound 技能效果消失 public int nowRound; [Header("增加/降低生命值")] public int addHp; [Header("增加/降低攻击力")] public int addPower; [Header("增加/降低防御力")] public int addDef; [Header("增加/降低攻击距离")] public int addAttackDistance; [Header("增加/降低移动距离")] public int addMoveDistance; [Header("是否是个群体技能")] public bool isAOE; [Header("群体技能最小范围")] public int aoeMinDistance; [Header("群体技能最大范围")] public int aoeMaxDistance; [Header("技能特效")] public GameObject skillEffects; }
第一步完成之后,在Asset窗口点击右键–Create–Skills–Minion就可以创建ScriptableObject了。这个时候你只需要填值就可以了。每次新建一个Skill的ScriptableObject,都相当于新建了一个技能。可以把这个技能有关的任何数据都储存在里面。包括音乐,特效,谁可以释放,动画,持续几回合等等。而它的数据类型就是之前建的Skill类。
碎碎念
因为Scriptable Object的特性,在游戏中对Scriptable Object的更改,在游戏结束之后,也会保存下来。所以说游戏进行的过程中,应该用某些方法,将技能的scriptable Object中的数据复制一份作为临时数据。而游戏中操作和更改的都是临时数据。这样就会保证游戏结束的时候技能的Scriptable Object不会改变。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。