重新接触了一个新的编辑器,然后就忘记了之前编程时候的一些习惯,最近要把这些全部在温习一下....我的天,这是啥情况啊。。。。
单一职责:经常所犯错误就是把太多的功能都塞到一个类里。这是不符单一职责原则的。
- 每个类都应该被设计为只做好一件事情。
- 如果需要用“和“字来描述一个类的功能,那么就应该考虑把这个类拆分了。
有很多好的理由对类进行拆分。
小类让代码的可重用性更好
把类拆分成多个小类可以让它们更容易被复用。
例如,你给游戏中一个玩家类,玩家受到伤害,加血减血,碰触,控制,因此你为这个类添加一个伤害/回血方法并在同一个类里面记录生命值,任何对这个玩家的操作都将由这个玩家类来处理。若此时需要做相互伤害或给与帮助的功能,为复用伤害/回血代码,修改的时候一定回影响到其他类的玩家。那么此时代码的冗杂性和耦合度都会比较高,代码较脆弱且易出bug。较为妥当的方式就是单独做一个伤害组件,是单独处理玩家受伤失血,和加血的单独类。
public class Damage : MonoBehavior { private float max_Health = 100.0f; private float _currentHealth; void Start() { _currentHealth = max_Health ; } public void GetDamage(float amount) { _currentHealth -= amount; } public bool IsDead { get { return _currentHealth <= 0.0f; } }}
现在你可以把这个可伤害组件添加给任何能受到伤害的物体上。当有发射物碰到物体上,或当周围有爆炸发生时,你可以简单的把伤害施加到任何有可伤害组件的物体上。玩家,敌人或可破坏的物体都可以简单的检查自己的可伤害组件来确定自己是否死亡。
小类让代码更易被理解
拆分小类的另一个好处是更容易管理它们。你可以一次就把一个小类的功能都记住。这可以让调试和验证代码确实按照设计来工作变得更容易。大类通常有一些复杂的操作逻辑,也更容易隐藏Bug。
小模块设计的思想已经是RPG游戏的重要开发准则。我们有很多具有独特技能的角色,每个技能都由很多小而简单的部分组合而成,如计时器类,应用伤害事件的类,或发射抛射物的类。我们用这些小的部分再组合成更复杂的技能。一个发射物和其它物体联系的时候没有任何的硬编码行为,而只是简单的引发一个碰撞事件,这个碰撞事件可以和一个伤害事件关联,也可以和其它任何你希望发射物碰到物体的时候产生的事件相关联。
为Platform RPG游戏创建技能的魔法编辑器
因为Platform RPG游戏一个重要的机制是时间回滚,整个场景的状态要能恢复到之前的一个时间点。我们没有编写代码来保存和恢复整个技能的状态,而是让技能的每个小部分来管理他们自己的状态的保存和恢复。我们为PlatformRPG游戏编写了一个魔法编辑器,以便进行可视化编程,并用数据来驱动游戏开发,但这就是另外一个话题了。
若项目在进行当时,返现难于管理,此时可查看下代码的结构。然后查找是否各个脚本只是负责单独的功能否,是否是更小更好的管理类。