Exemplo n.º 1
0
    // 从资源包初始化脚本环境
    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
    }
Exemplo n.º 2
0
    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);
    }
Exemplo n.º 3
0
 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);
     }
 }