private IAIBehaviour GetOrCreateAI(string type) { if (type.Equals(string.Empty, StringComparison.Ordinal)) { return(null); } if (_behaviourInstance != null && _behaviourInstance.GetType().Name.Split('.').Last() .Equals(type, StringComparison.Ordinal)) { return(_behaviourInstance); } Type t = AppDomain.CurrentDomain.GetAssemblies() .SelectMany(s => s.GetTypes()).Where(p => typeof(IAIBehaviour).IsAssignableFrom(p) && p.IsClass) .FirstOrDefault(p => p.Name.Split('.').Last().Equals(type, StringComparison.Ordinal)); if (t == null) { Debug.LogError( $"[AI BEHAVIOUR ROOT] Cannot create {type} type behaviour class! Aborting AI composition"); behaviourType = ""; return(null); } _behaviourInstance = Activator.CreateInstance(t) as IAIBehaviour; return(_behaviourInstance); }