// 从资源包初始化脚本环境 public void InitializeFromAssetBundle(AssetBundle scriptsAssetBundle) { m_clsAssetBundle = scriptsAssetBundle; #if UNITY_EDITOR float timeStart = Time.realtimeSinceStartup; uint monoStart = Profiler.GetMonoUsedSize(); #endif // 获取默认的脚本实例 m_clsEnv = ToCSLight.CreateEnvironment(); m_clsContent = m_clsEnv.CreateContent(); // 预注册脚本类 #if UNITY_EDITOR && !EDITOR_FORCE_ASSET_BUNDLE string rootPath = Application.dataPath + "/CSLight/Editor/CSLogic"; string[] files = System.IO.Directory.GetFiles(rootPath, "*.cs", System.IO.SearchOption.AllDirectories); foreach (var file in files) { string className = System.IO.Path.GetFileNameWithoutExtension(file); m_clsEnv.RegType(new CLS_Type_Class(className, file.Replace('\\', '/'))); } #else StringHolder classHolder = m_clsAssetBundle.LoadAsset("class", typeof(StringHolder)) as StringHolder; foreach (string className in classHolder.content) { m_clsEnv.RegType(new CLS_Type_Class(className, className)); } #endif #if UNITY_EDITOR Debug.Log("script init cost time: " + (Time.realtimeSinceStartup - timeStart)); Debug.Log(string.Format("script init cost memory: {0:0.00}MB", (Profiler.GetMonoUsedSize() - monoStart) / (1024f * 1024f))); timeStart = Time.realtimeSinceStartup; #endif }
public static CLS_Environment CreateEnvironment() { CLS_Environment clsEnv = new CLS_Environment(new ScriptLogger()); // 名空间注册 clsEnv.RegType(new CLS_NameSpace("UnityEngine")); // 特殊类型注册 clsEnv.RegType(new RegHelper_DeleAction <BaseEventData>(typeof(UnityAction <BaseEventData>), "UnityAction<BaseEventData>")); // gen start clsEnv.RegType(new ToCSLightBehaviour()); clsEnv.RegType(new ToCSLightBoxCollider()); clsEnv.RegType(new ToCSLightCollider()); clsEnv.RegType(new ToCSLightColor()); clsEnv.RegType(new ToCSLightComponent()); clsEnv.RegType(new ToCSLightDebug()); clsEnv.RegType(new ToCSLightGameObject()); clsEnv.RegType(new ToCSLightMath()); clsEnv.RegType(new ToCSLightMathf()); clsEnv.RegType(new ToCSLightMonoBehaviour()); clsEnv.RegType(new ToCSLightQuaternion()); clsEnv.RegType(new ToCSLightSphereCollider()); clsEnv.RegType(new ToCSLightTime()); clsEnv.RegType(new ToCSLightTransform()); clsEnv.RegType(new ToCSLightRandom()); clsEnv.RegType(new ToCSLightVector2()); clsEnv.RegType(new ToCSLightVector3()); clsEnv.RegType(new RegHelper_DeleAction(typeof(Action), "Action")); clsEnv.RegType(new RegHelper_DeleAction <object>(typeof(Action <object>), "Action<object>")); clsEnv.RegType(new RegHelper_Type(typeof(Animator))); clsEnv.RegType(new RegHelper_Type(typeof(AnimatorStateInfo))); clsEnv.RegType(new RegHelper_Type(typeof(Application))); clsEnv.RegType(new RegHelper_Type(typeof(BaseEventData))); clsEnv.RegType(new RegHelper_Type(typeof(Button))); clsEnv.RegType(new RegHelper_Type(typeof(Button.ButtonClickedEvent), "Button.ButtonClickedEvent")); clsEnv.RegType(new RegHelper_Type(typeof(Camera))); clsEnv.RegType(new RegHelper_Type(typeof(Canvas))); clsEnv.RegType(new RegHelper_Type(typeof(CanvasGroup))); clsEnv.RegType(new RegHelper_Type(typeof(CanvasScaler))); clsEnv.RegType(new RegHelper_Type(typeof(Convert))); clsEnv.RegType(new RegHelper_Type(typeof(CSLightMng))); clsEnv.RegType(new RegHelper_Type(typeof(DateTime))); clsEnv.RegType(new CLS_Type_Enum(typeof(DayOfWeek))); clsEnv.RegType(new RegHelper_Type(typeof(Encoding))); clsEnv.RegType(new RegHelper_Type(typeof(EventTrigger))); clsEnv.RegType(new RegHelper_Type(typeof(EventTrigger.Entry), "EventTrigger.Entry")); clsEnv.RegType(new RegHelper_Type(typeof(EventTrigger.TriggerEvent), "EventTrigger.TriggerEvent")); clsEnv.RegType(new RegHelper_Type(typeof(Font))); clsEnv.RegType(new RegHelper_Type(typeof(Hashtable))); clsEnv.RegType(new RegHelper_Type(typeof(Image))); clsEnv.RegType(new RegHelper_Type(typeof(InputField))); clsEnv.RegType(new RegHelper_Type(typeof(Light))); clsEnv.RegType(new RegHelper_Type(typeof(MD5CryptoServiceProvider))); clsEnv.RegType(new RegHelper_Type(typeof(MemoryStream))); clsEnv.RegType(new RegHelper_Type(typeof(NavMeshAgent))); clsEnv.RegType(new RegHelper_Type(typeof(NavMeshHit))); clsEnv.RegType(new RegHelper_Type(typeof(NavMeshObstacle))); clsEnv.RegType(new RegHelper_Type(typeof(NavMeshPath))); clsEnv.RegType(new CLS_Type_Enum(typeof(ObstacleAvoidanceType))); clsEnv.RegType(new RegHelper_Type(typeof(ParticleSystem))); clsEnv.RegType(new RegHelper_Type(typeof(PointerEventData))); clsEnv.RegType(new CLS_Type_Enum(typeof(PrimitiveType))); clsEnv.RegType(new RegHelper_Type(typeof(QualitySettings))); clsEnv.RegType(new RegHelper_Type(typeof(Rect))); clsEnv.RegType(new RegHelper_Type(typeof(RectTransform))); clsEnv.RegType(new RegHelper_Type(typeof(Resources))); clsEnv.RegType(new RegHelper_Type(typeof(Rigidbody))); clsEnv.RegType(new CLS_Type_Enum(typeof(RuntimePlatform))); clsEnv.RegType(new RegHelper_Type(typeof(Screen))); clsEnv.RegType(new CLS_Type_Enum(typeof(SeekOrigin))); clsEnv.RegType(new RegHelper_Type(typeof(Slider))); clsEnv.RegType(new CLS_Type_Enum(typeof(Space))); clsEnv.RegType(new RegHelper_Type(typeof(Sprite))); clsEnv.RegType(new RegHelper_Type(typeof(StringBuilder))); clsEnv.RegType(new RegHelper_Type(typeof(Text))); clsEnv.RegType(new RegHelper_Type(typeof(Toggle))); clsEnv.RegType(new RegHelper_Type(typeof(Toggle.ToggleEvent), "Toggle.ToggleEvent")); clsEnv.RegType(new RegHelper_Type(typeof(Type))); clsEnv.RegType(new RegHelper_DeleAction(typeof(UnityAction), "UnityAction")); clsEnv.RegType(new RegHelper_DeleAction <bool>(typeof(UnityAction <bool>), "UnityAction<bool>")); clsEnv.RegType(new RegHelper_Type(typeof(UnityEngine.Object), "UnityEngine.Object")); clsEnv.RegType(new RegHelper_Type(typeof(Vector4))); clsEnv.RegType(new RegHelper_Type(typeof(WWW))); clsEnv.RegType(new CLS_Type_Array <Behaviour>("Behaviour[]")); clsEnv.RegType(new CLS_Type_List <Behaviour>("List<Behaviour>")); clsEnv.RegType(new CLS_Type_Array <BoxCollider>("BoxCollider[]")); clsEnv.RegType(new CLS_Type_List <BoxCollider>("List<BoxCollider>")); clsEnv.RegType(new CLS_Type_Array <Collider>("Collider[]")); clsEnv.RegType(new CLS_Type_List <Collider>("List<Collider>")); clsEnv.RegType(new CLS_Type_Array <Color>("Color[]")); clsEnv.RegType(new CLS_Type_List <Color>("List<Color>")); clsEnv.RegType(new CLS_Type_Array <Component>("Component[]")); clsEnv.RegType(new CLS_Type_List <Component>("List<Component>")); clsEnv.RegType(new CLS_Type_Array <GameObject>("GameObject[]")); clsEnv.RegType(new CLS_Type_List <GameObject>("List<GameObject>")); clsEnv.RegType(new CLS_Type_Array <MonoBehaviour>("MonoBehaviour[]")); clsEnv.RegType(new CLS_Type_List <MonoBehaviour>("List<MonoBehaviour>")); clsEnv.RegType(new CLS_Type_Array <Quaternion>("Quaternion[]")); clsEnv.RegType(new CLS_Type_List <Quaternion>("List<Quaternion>")); clsEnv.RegType(new CLS_Type_Array <SphereCollider>("SphereCollider[]")); clsEnv.RegType(new CLS_Type_List <SphereCollider>("List<SphereCollider>")); clsEnv.RegType(new CLS_Type_Array <Transform>("Transform[]")); clsEnv.RegType(new CLS_Type_List <Transform>("List<Transform>")); clsEnv.RegType(new CLS_Type_Array <Vector2>("Vector2[]")); clsEnv.RegType(new CLS_Type_List <Vector2>("List<Vector2>")); clsEnv.RegType(new CLS_Type_Array <Vector3>("Vector3[]")); clsEnv.RegType(new CLS_Type_List <Vector3>("List<Vector3>")); clsEnv.RegType(new CLS_Type_Array <Animator>("Animator[]")); clsEnv.RegType(new CLS_Type_List <Animator>("List<Animator>")); clsEnv.RegType(new CLS_Type_Array <AnimatorStateInfo>("AnimatorStateInfo[]")); clsEnv.RegType(new CLS_Type_List <AnimatorStateInfo>("List<AnimatorStateInfo>")); clsEnv.RegType(new CLS_Type_Array <Button>("Button[]")); clsEnv.RegType(new CLS_Type_List <Button>("List<Button>")); clsEnv.RegType(new CLS_Type_Array <Camera>("Camera[]")); clsEnv.RegType(new CLS_Type_List <Camera>("List<Camera>")); clsEnv.RegType(new CLS_Type_Array <EventTrigger.Entry>("EventTrigger.Entry[]")); clsEnv.RegType(new CLS_Type_List <EventTrigger.Entry>("List<EventTrigger.Entry>")); clsEnv.RegType(new CLS_Type_Array <Image>("Image[]")); clsEnv.RegType(new CLS_Type_List <Image>("List<Image>")); clsEnv.RegType(new CLS_Type_Array <InputField>("InputField[]")); clsEnv.RegType(new CLS_Type_List <InputField>("List<InputField>")); clsEnv.RegType(new CLS_Type_Array <ParticleSystem>("ParticleSystem[]")); clsEnv.RegType(new CLS_Type_List <ParticleSystem>("List<ParticleSystem>")); clsEnv.RegType(new CLS_Type_Array <Rect>("Rect[]")); clsEnv.RegType(new CLS_Type_List <Rect>("List<Rect>")); clsEnv.RegType(new CLS_Type_Array <RectTransform>("RectTransform[]")); clsEnv.RegType(new CLS_Type_List <RectTransform>("List<RectTransform>")); clsEnv.RegType(new CLS_Type_Array <Slider>("Slider[]")); clsEnv.RegType(new CLS_Type_List <Slider>("List<Slider>")); clsEnv.RegType(new CLS_Type_Array <Sprite>("Sprite[]")); clsEnv.RegType(new CLS_Type_List <Sprite>("List<Sprite>")); clsEnv.RegType(new CLS_Type_Array <Text>("Text[]")); clsEnv.RegType(new CLS_Type_List <Text>("List<Text>")); clsEnv.RegType(new CLS_Type_Array <Toggle>("Toggle[]")); clsEnv.RegType(new CLS_Type_List <Toggle>("List<Toggle>")); clsEnv.RegType(new CLS_Type_Array <Type>("Type[]")); clsEnv.RegType(new CLS_Type_List <Type>("List<Type>")); clsEnv.RegType(new CLS_Type_Array <UnityEngine.Object>("UnityEngine.Object[]")); clsEnv.RegType(new CLS_Type_List <UnityEngine.Object>("List<UnityEngine.Object>")); clsEnv.RegType(new CLS_Type_Array <Vector4>("Vector4[]")); clsEnv.RegType(new CLS_Type_List <Vector4>("List<Vector4>")); clsEnv.RegType(new CLS_Type_Array <WWW>("WWW[]")); clsEnv.RegType(new CLS_Type_List <WWW>("List<WWW>")); // gen end return(clsEnv); }
object ReadField(ProtoReader reader, Type memberT, string sClassName, CLS_Environment environment) { if (memberT == typeof(int)) { return(reader.ReadInt32()); } else if (memberT == typeof(uint)) { return(reader.ReadUInt32()); } else if (memberT == typeof(bool)) { return(reader.ReadBoolean()); } else if (memberT == typeof(byte)) { return(reader.ReadByte()); } else if (memberT == typeof(sbyte)) { return(reader.ReadSByte()); } else if (memberT == typeof(float)) { return(reader.ReadSingle()); } else if (memberT == typeof(double)) { return(reader.ReadDouble()); } else if (memberT == typeof(short)) { return(reader.ReadInt16()); } else if (memberT == typeof(ushort)) { return(reader.ReadUInt16()); } else if (memberT == typeof(long)) { return(reader.ReadInt64()); } else if (memberT == typeof(ulong)) { return(reader.ReadUInt64()); } else if (memberT == typeof(string)) { return(reader.ReadString()); } else if (memberT == typeof(byte[])) { return(ProtoReader.AppendBytes(null, reader)); } else if (memberT == typeof(SInstance)) { SubItemToken st = ProtoReader.StartSubItem(reader); CLS_Type_Class sClass = environment.GetTypeByKeywordQuiet(sClassName) as CLS_Type_Class; if (!sClass.compiled) { RuntimeCompilerClass(sClassName); } CLS_Content content = CLS_Content.NewContent(environment); CLS_Content.Value retVal = sClass.function.New(content, m_emptyParams); CLS_Content.PoolContent(content); SInstance sInstance = (SInstance)retVal.value; ReadSInstance(reader, sInstance, environment); ProtoReader.EndSubItem(st, reader); return(sInstance); } else { throw new NotImplementedException("未实现类型: " + memberT); } }