1.什么是组件模式?通俗点讲,我觉得他像一个机械工程一样,像飞机,潜艇,他有许多的零件系统组成,各个零件部门相互独立,独立来加工,等把需要的组件零件都加工生产完成之后,由组装师组成一个完整的个体,而要启动这个整体飞机要起飞,潜艇要发射炮弹,各个系统组件都协调有序的运行起来。而这些组件又想独立于系统,随时可以进行更换,进行升级。
3,游戏中最常见的就是任务角色的设计,组件模式用的比较多,还有就是slg类的游戏,像建筑的升级,城堡的建设等等。我们今天来实现一个人物角色的组件设计模式。一个Avatar通常可以飞,可以跑,可能会受到伤害,可以攻击别人,这样我们都可以把这些行为作为一个组件,然后我们一个角色就可以随意的来进行组合,来达到我们要的效果。
2.在游戏中是怎么使用的?现在的游戏中大量的用到了组件模式,他比继承更具有解偶性。他更加的方便维护,来进行开发,一个好的游戏系统设计出来,当引擎无论的怎么更替,业务逻辑怎么样的变更,仍然能够井井有序思路清晰的来开发,并且bug率很少,好多比较次的游戏系统中一个文件的代码达到好几千行,像这样看着都费劲,更别说可读性了,从而整个开发的效率成几何一样的下降,并且全是bug,这样你很难去管理,同时坑队友。
我们创建一个实体EntityBase类,来作为一个主体。
using System;
using System.Collections.Generic;
using UnityEngine;
public class EntityBase
{
public IDictionary<string ,ComponentBase> componentMaps = new Dictionary<string,ComponentBase>();
/// <summary>
/// 加入组件方法
/// </summary>
/// <param name="key">Key.</param>
/// <param name="comptBase">Compt base.</param>
public void AddComponent(string key,ComponentBase comptBase)
{
if (comptBase == null)
{
Debug.Log ("add component failed: comptbase == null");
}
if(!componentMaps.ContainsKey(key))
{
componentMaps.Add (key,comptBase);
this.AttachedComponent (comptBase);
comptBase.AddFromEntity (this);
}
}
/// <summary>
///通过Key值来删除组件
/// </summary>
/// <param name="key">Key.</param>
public void RemoveComponent(string key)
{
if(componentMaps.ContainsKey(key))
{
this.RemovedCo