public ICharacterManager CreateCharacterManager(Type cmType, CharacterControllerBase owner, params CharacterStateBase[] states) { if (owner == null) { throw new GameFrameworkException("Invalid Owner to create CharacterManager"); } if (states.Length < 1) { throw new GameFrameworkException("Must has at least One State to create a CharacterManager"); } string tName = cmType.FullName; if (cmType.GetInterface("ICharacterManager") == null) { throw new GameFrameworkException(string.Format("Invalid Type {0} to create CharacterManager.", tName)); } ICharacterManager ret = null; Dictionary <string, ICharacterManager> dict = null; if (m_CharacterInstancesDict.TryGetValue(tName, out dict)) { string instName = string.Format("{0}.{1}", owner.name, cmType.Name); if (dict.ContainsKey(instName)) { Log.Warning("{0} already Exists, will be replaced", instName); } ret = (ICharacterManager)Activator.CreateInstance(cmType); ret.Initialize(GameFrameworkEntry.GetModule <IFsmManager>(), owner, states); dict [instName] = ret; } else { throw new GameFrameworkException(string.Format("Invalid Type {0} to create CharacterManager.", tName)); } return(ret); }