예제 #1
0
 public override void SaveAsset(AnimatorData mb, AMTake take)
 {
     base.SaveAsset(mb, take);
     if (parameters != null)
     {
         for (var ie = parameters.GetEnumerator(); ie.MoveNext();)
         {
             AMEventParameter p = ie.Current;
             AMTakeSav.AddObjectToAsset(p, take);
         }
     }
 }
    public AMEventParameter CreateClone()
    {
        AMEventParameter a = ScriptableObject.CreateInstance <AMEventParameter>();

        a.val_bool   = val_bool;
        a.valueType  = valueType;
        a.val_int    = val_int;
        a.val_float  = val_float;
        a.val_vect2  = val_vect2;
        a.val_vect3  = val_vect3;
        a.val_vect4  = val_vect4;
        a.val_color  = val_color;
        a.val_rect   = val_rect;
        a.val_string = val_string;
        a.val_obj    = val_obj;
        foreach (AMEventParameter e in lsArray)
        {
            a.lsArray.Add(e.CreateClone());
        }
        return(a);
    }
예제 #3
0
    public bool setMethodInfo(Component component, MethodInfo methodInfo, ParameterInfo[] cachedParameterInfos)
    {
        // if different component or methodinfo
        if ((this.methodInfo != methodInfo) || (this.component != component))
        {
            this.component  = component;
            this.methodInfo = methodInfo;
            //this.parameters = new object[numParameters];
            destroyParameters();
            this.parameters = new List <AMEventParameter>();

            // add parameters
            for (int i = 0; i < cachedParameterInfos.Length; i++)
            {
                AMEventParameter a = CreateInstance <AMEventParameter>();
                a.setValueType(cachedParameterInfos[i].ParameterType);
                this.parameters.Add(a);
            }

            return(true);
        }
        return(false);
    }
예제 #4
0
        void ConvertEventParameter(AMEventParameter oldParam, EventParameter newParam)
        {
            ConvertEventData(oldParam, newParam);

            newParam.lsArray = new List <EventData>(oldParam.lsArray.Count);
            for (int i = 0; i < oldParam.lsArray.Count; i++)
            {
                EventData newParamItem;

                var oldParamItem = oldParam.lsArray[i];
                if (oldParamItem is AMEventParameter)
                {
                    newParamItem = new EventParameter();
                    ConvertEventParameter((AMEventParameter)oldParamItem, (EventParameter)newParamItem);
                }
                else
                {
                    newParamItem = new EventData();
                    ConvertEventData(oldParamItem, newParamItem);
                }

                newParam.lsArray.Add(newParamItem);
            }
        }
예제 #5
0
    bool showFieldFor(Rect rect, string id, string name, AMEventParameter parameter, Type t, int level, ref float height_field)
    {
        rect.x = 5f * level;
        name = typeStringBrief(t) + " " + name;
        bool saveChanges = false;
        if(t.IsArray) {
            if(t.GetElementType().IsArray) {
                GUI.skin.label.wordWrap = true;
                rect.height = 40f;
                height_field += rect.height;
                GUI.Label(rect, "Multi-dimensional arrays are currently unsupported.");
                return false;
            }
            if(!arrayFieldFoldout.ContainsKey(id)) arrayFieldFoldout.Add(id, true);
            Rect rectArrayFoldout = new Rect(rect.x, rect.y + 3f, 15f, 15f);
            if(GUI.Button(rectArrayFoldout, "", "label")) arrayFieldFoldout[id] = !arrayFieldFoldout[id];
            GUI.DrawTexture(rectArrayFoldout, (arrayFieldFoldout[id] ? GUI.skin.GetStyle("GroupElementFoldout").normal.background : GUI.skin.GetStyle("GroupElementFoldout").active.background));
            Rect rectLabelArrayName = new Rect(rectArrayFoldout.x + rectArrayFoldout.width + margin, rect.y, rect.width - rectArrayFoldout.width - margin, rect.height);
            GUI.Label(rectLabelArrayName, name);
            height_field += rectLabelArrayName.height;
            if(arrayFieldFoldout[id]) {
                // show elements if folded out
                if(parameter.lsArray.Count <= 0) {
                    AMEventParameter a = new AMEventParameter();
                    a.setValueType(t.GetElementType());
                    parameter.lsArray.Add(a);
                    saveChanges = true;
                }
                Rect rectElement = new Rect(rect);
                rectElement.y += rect.height + margin;
                for(int i = 0; i < parameter.lsArray.Count; i++) {
                    float prev_height = height_field;
                    if((showFieldFor(rectElement, id + "_" + i, "(" + i.ToString() + ")", parameter.lsArray[i], t.GetElementType(), (level + 1), ref height_field)) && !saveChanges) saveChanges = true;
                    rectElement.y += height_field - prev_height;
                }
                // add to array button
                Rect rectLabelElement = new Rect(rect.x, rectElement.y, rect.width - 40f - margin * 2f, 25f);
                height_field += rectLabelElement.height;
                GUIStyle styleLabelRight = new GUIStyle(GUI.skin.label);
                styleLabelRight.alignment = TextAnchor.MiddleRight;
                GUI.Label(rectLabelElement, typeStringBrief(t.GetElementType()), styleLabelRight);
                if(parameter.lsArray.Count <= 1) GUI.enabled = false;
                Rect rectButtonRemoveElement = new Rect(rect.x + rect.width - 40f, rectLabelElement.y, 20f, 20f);
                if(GUI.Button(rectButtonRemoveElement, "-")) {
                    parameter.lsArray[parameter.lsArray.Count - 1].destroy();
                    parameter.lsArray.RemoveAt(parameter.lsArray.Count - 1);
                    saveChanges = true;
                }
                Rect rectButtonAddElement = new Rect(rectButtonRemoveElement);
                rectButtonAddElement.x += rectButtonRemoveElement.width + margin;
                GUI.enabled = !isPlaying;
                if(GUI.Button(rectButtonAddElement, "+")) {
                    AMEventParameter a = new AMEventParameter();
                    a.setValueType(t.GetElementType());
                    parameter.lsArray.Add(a);
                    saveChanges = true;
                }
            }
        }
        else if(t == typeof(bool)) {
            // int field
            height_field += 20f;
            if(parameter.setBool(EditorGUI.Toggle(rect, name, parameter.val_bool))) saveChanges = true;
        }
        else if((t == typeof(int)) || (t == typeof(long))) {
            // int field
            height_field += 20f;
            if(parameter.setInt(EditorGUI.IntField(rect, name, (int)parameter.val_int))) saveChanges = true;
        }
        else if((t == typeof(float)) || (t == typeof(double))) {
            // float field
            height_field += 20f;
            if(parameter.setFloat(EditorGUI.FloatField(rect, name, (float)parameter.val_float))) saveChanges = true;
        }
        else if(t == typeof(Vector2)) {
            // vector2 field
            height_field += 40f;
            if(parameter.setVector2(EditorGUI.Vector2Field(rect, name, (Vector2)parameter.val_vect2))) saveChanges = true;
        }
        else if(t == typeof(Vector3)) {
            // vector3 field
            height_field += 40f;
            if(parameter.setVector3(EditorGUI.Vector3Field(rect, name, (Vector3)parameter.val_vect3))) saveChanges = true;
        }
        else if(t == typeof(Vector4)) {
            // vector4 field
            height_field += 40f;
            if(parameter.setVector4(EditorGUI.Vector4Field(rect, name, (Vector4)parameter.val_vect4))) saveChanges = true;
        }
        else if(t == typeof(Color)) {
            // color field
            height_field += 40f;
            if(parameter.setColor(EditorGUI.ColorField(rect, name, (Color)parameter.val_color))) saveChanges = true;
        }
        else if(t == typeof(Rect)) {
            // rect field
            height_field += 60f;
            if(parameter.setRect(EditorGUI.RectField(rect, name, (Rect)parameter.val_rect))) saveChanges = true;
        }
        else if(t == typeof(string)) {
            height_field += 20f;
            // set default
            if(parameter.val_string == null) parameter.val_string = "";
            // string field
            if(parameter.setString(EditorGUI.TextField(rect, name, (string)parameter.val_string))) saveChanges = true;
        }
        else if(t == typeof(char)) {
            height_field += 20f;
            // set default
            if(parameter.val_string == null) parameter.val_string = "";
            // char (string) field
            Rect rectLabelCharField = new Rect(rect.x, rect.y, 146f, rect.height);
            GUI.Label(rectLabelCharField, name);
            Rect rectTextFieldChar = new Rect(rectLabelCharField.x + rectLabelCharField.width + margin, rectLabelCharField.y, rect.width - rectLabelCharField.width - margin, rect.height);
            if(parameter.setString(GUI.TextField(rectTextFieldChar, parameter.val_string, 1))) saveChanges = true;
        }
        else if(t == typeof(GameObject)) {
            height_field += 40f + margin;
            // label
            Rect rectLabelField = new Rect(rect);
            GUI.Label(rectLabelField, name);
            // GameObject field
            GUI.skin = null;
            EditorGUIUtility.LookLikeControls();
            Rect rectObjectField = new Rect(rect.x, rectLabelField.y + rectLabelField.height + margin, rect.width, 16f);
            if(parameter.setObject(EditorGUI.ObjectField(rectObjectField, parameter.val_obj, typeof(GameObject), true))) saveChanges = true;
            GUI.skin = skin;
            EditorGUIUtility.LookLikeControls();
        }
        else if(t.BaseType == typeof(Behaviour) || t.BaseType == typeof(Component)) {
            height_field += 40f + margin;
            // label
            Rect rectLabelField = new Rect(rect);
            GUI.Label(rectLabelField, name);
            GUI.skin = null;
            Rect rectObjectField = new Rect(rect.x, rectLabelField.y + rectLabelField.height + margin, rect.width, 16f);
            EditorGUIUtility.LookLikeControls();
            // field
            if(t == typeof(Transform)) { if(parameter.setObject(EditorGUI.ObjectField(rectObjectField, parameter.val_obj, typeof(Transform), true))) saveChanges = true; }
            else if(t == typeof(MeshFilter)) { if(parameter.setObject(EditorGUI.ObjectField(rectObjectField, parameter.val_obj, typeof(MeshFilter), true))) saveChanges = true; }
            else if(t == typeof(TextMesh)) { if(parameter.setObject(EditorGUI.ObjectField(rectObjectField, parameter.val_obj, typeof(TextMesh), true))) saveChanges = true; }
            else if(t == typeof(MeshRenderer)) { if(parameter.setObject(EditorGUI.ObjectField(rectObjectField, parameter.val_obj, typeof(MeshRenderer), true))) saveChanges = true; }
            //else if(t == typeof(ParticleSystem)) { if(parameter.setObject(EditorGUI.ObjectField(rectObjectField,parameter.val_obj,typeof(ParticleSystem),true))) saveChanges = true; }
            else if(t == typeof(TrailRenderer)) { if(parameter.setObject(EditorGUI.ObjectField(rectObjectField, parameter.val_obj, typeof(TrailRenderer), true))) saveChanges = true; }
            else if(t == typeof(LineRenderer)) { if(parameter.setObject(EditorGUI.ObjectField(rectObjectField, parameter.val_obj, typeof(LineRenderer), true))) saveChanges = true; }
            else if(t == typeof(LensFlare)) { if(parameter.setObject(EditorGUI.ObjectField(rectObjectField, parameter.val_obj, typeof(LensFlare), true))) saveChanges = true; }
            // halo
            else if(t == typeof(Projector)) { if(parameter.setObject(EditorGUI.ObjectField(rectObjectField, parameter.val_obj, typeof(Projector), true))) saveChanges = true; }
            else if(t == typeof(Rigidbody)) { if(parameter.setObject(EditorGUI.ObjectField(rectObjectField, parameter.val_obj, typeof(Rigidbody), true))) saveChanges = true; }
            else if(t == typeof(CharacterController)) { if(parameter.setObject(EditorGUI.ObjectField(rectObjectField, parameter.val_obj, typeof(CharacterController), true))) saveChanges = true; }
            else if(t == typeof(BoxCollider)) { if(parameter.setObject(EditorGUI.ObjectField(rectObjectField, parameter.val_obj, typeof(BoxCollider), true))) saveChanges = true; }
            else if(t == typeof(SphereCollider)) { if(parameter.setObject(EditorGUI.ObjectField(rectObjectField, parameter.val_obj, typeof(SphereCollider), true))) saveChanges = true; }
            else if(t == typeof(CapsuleCollider)) { if(parameter.setObject(EditorGUI.ObjectField(rectObjectField, parameter.val_obj, typeof(CapsuleCollider), true))) saveChanges = true; }
            else if(t == typeof(MeshCollider)) { if(parameter.setObject(EditorGUI.ObjectField(rectObjectField, parameter.val_obj, typeof(MeshCollider), true))) saveChanges = true; }
            else if(t == typeof(WheelCollider)) { if(parameter.setObject(EditorGUI.ObjectField(rectObjectField, parameter.val_obj, typeof(WheelCollider), true))) saveChanges = true; }
            else if(t == typeof(TerrainCollider)) { if(parameter.setObject(EditorGUI.ObjectField(rectObjectField, parameter.val_obj, typeof(TerrainCollider), true))) saveChanges = true; }
            else if(t == typeof(InteractiveCloth)) { if(parameter.setObject(EditorGUI.ObjectField(rectObjectField, parameter.val_obj, typeof(InteractiveCloth), true))) saveChanges = true; }
            else if(t == typeof(SkinnedCloth)) { if(parameter.setObject(EditorGUI.ObjectField(rectObjectField, parameter.val_obj, typeof(SkinnedCloth), true))) saveChanges = true; }
            else if(t == typeof(ClothRenderer)) { if(parameter.setObject(EditorGUI.ObjectField(rectObjectField, parameter.val_obj, typeof(ClothRenderer), true))) saveChanges = true; }
            else if(t == typeof(HingeJoint)) { if(parameter.setObject(EditorGUI.ObjectField(rectObjectField, parameter.val_obj, typeof(HingeJoint), true))) saveChanges = true; }
            else if(t == typeof(FixedJoint)) { if(parameter.setObject(EditorGUI.ObjectField(rectObjectField, parameter.val_obj, typeof(FixedJoint), true))) saveChanges = true; }
            else if(t == typeof(SpringJoint)) { if(parameter.setObject(EditorGUI.ObjectField(rectObjectField, parameter.val_obj, typeof(SpringJoint), true))) saveChanges = true; }
            else if(t == typeof(CharacterJoint)) { if(parameter.setObject(EditorGUI.ObjectField(rectObjectField, parameter.val_obj, typeof(CharacterJoint), true))) saveChanges = true; }
            else if(t == typeof(ConfigurableJoint)) { if(parameter.setObject(EditorGUI.ObjectField(rectObjectField, parameter.val_obj, typeof(ConfigurableJoint), true))) saveChanges = true; }
            else if(t == typeof(ConstantForce)) { if(parameter.setObject(EditorGUI.ObjectField(rectObjectField, parameter.val_obj, typeof(ConstantForce), true))) saveChanges = true; }
            //else if(t == typeof(NavMeshAgent)) { if(parameter.setObject(EditorGUI.ObjectField(rectObjectField,parameter.val_obj,typeof(NavMeshAgent),true))) saveChanges = true; }
            //else if(t == typeof(OffMeshLink)) { if(parameter.setObject(EditorGUI.ObjectField(rectObjectField,parameter.val_obj,typeof(OffMeshLink),true))) saveChanges = true; }
            else if(t == typeof(AudioListener)) { if(parameter.setObject(EditorGUI.ObjectField(rectObjectField, parameter.val_obj, typeof(AudioListener), true))) saveChanges = true; }
            else if(t == typeof(AudioSource)) { if(parameter.setObject(EditorGUI.ObjectField(rectObjectField, parameter.val_obj, typeof(AudioSource), true))) saveChanges = true; }
            else if(t == typeof(AudioReverbZone)) { if(parameter.setObject(EditorGUI.ObjectField(rectObjectField, parameter.val_obj, typeof(AudioReverbZone), true))) saveChanges = true; }
            else if(t == typeof(AudioLowPassFilter)) { if(parameter.setObject(EditorGUI.ObjectField(rectObjectField, parameter.val_obj, typeof(AudioLowPassFilter), true))) saveChanges = true; }
            else if(t == typeof(AudioHighPassFilter)) { if(parameter.setObject(EditorGUI.ObjectField(rectObjectField, parameter.val_obj, typeof(AudioHighPassFilter), true))) saveChanges = true; }
            else if(t == typeof(AudioEchoFilter)) { if(parameter.setObject(EditorGUI.ObjectField(rectObjectField, parameter.val_obj, typeof(AudioEchoFilter), true))) saveChanges = true; }
            else if(t == typeof(AudioDistortionFilter)) { if(parameter.setObject(EditorGUI.ObjectField(rectObjectField, parameter.val_obj, typeof(AudioDistortionFilter), true))) saveChanges = true; }
            else if(t == typeof(AudioReverbFilter)) { if(parameter.setObject(EditorGUI.ObjectField(rectObjectField, parameter.val_obj, typeof(AudioReverbFilter), true))) saveChanges = true; }
            else if(t == typeof(AudioChorusFilter)) { if(parameter.setObject(EditorGUI.ObjectField(rectObjectField, parameter.val_obj, typeof(AudioChorusFilter), true))) saveChanges = true; }
            else if(t == typeof(Camera)) { if(parameter.setObject(EditorGUI.ObjectField(rectObjectField, parameter.val_obj, typeof(Camera), true))) saveChanges = true; }
            else if(t == typeof(Skybox)) { if(parameter.setObject(EditorGUI.ObjectField(rectObjectField, parameter.val_obj, typeof(Skybox), true))) saveChanges = true; }
            // flare layer
            else if(t == typeof(GUILayer)) { if(parameter.setObject(EditorGUI.ObjectField(rectObjectField, parameter.val_obj, typeof(GUILayer), true))) saveChanges = true; }
            else if(t == typeof(Light)) { if(parameter.setObject(EditorGUI.ObjectField(rectObjectField, parameter.val_obj, typeof(Light), true))) saveChanges = true; }
            //else if(t == typeof(LightProbeGroup)) { if(parameter.setObject(EditorGUI.ObjectField(rectObjectField,parameter.val_obj,typeof(LightProbeGroup),true))) saveChanges = true; }
            else if(t == typeof(OcclusionArea)) { if(parameter.setObject(EditorGUI.ObjectField(rectObjectField, parameter.val_obj, typeof(OcclusionArea), true))) saveChanges = true; }
            //else if(t == typeof(OcclusionPortal)) { if(parameter.setObject(EditorGUI.ObjectField(rectObjectField,parameter.val_obj,typeof(OcclusionPortal),true))) saveChanges = true; }
            //else if(t == typeof(LODGroup)) { if(parameter.setObject(EditorGUI.ObjectField(rectObjectField,parameter.val_obj,typeof(LODGroup),true))) saveChanges = true; }
            else if(t == typeof(GUITexture)) { if(parameter.setObject(EditorGUI.ObjectField(rectObjectField, parameter.val_obj, typeof(GUITexture), true))) saveChanges = true; }
            else if(t == typeof(GUIText)) { if(parameter.setObject(EditorGUI.ObjectField(rectObjectField, parameter.val_obj, typeof(GUIText), true))) saveChanges = true; }
            else if(t == typeof(Animation)) { if(parameter.setObject(EditorGUI.ObjectField(rectObjectField, parameter.val_obj, typeof(Animation), true))) saveChanges = true; }
            else if(t == typeof(NetworkView)) { if(parameter.setObject(EditorGUI.ObjectField(rectObjectField, parameter.val_obj, typeof(NetworkView), true))) saveChanges = true; }
            // wind zone
            else {

                if(t.BaseType == typeof(Behaviour)) { if(parameter.setObject(EditorGUI.ObjectField(rectObjectField, parameter.val_obj, typeof(Behaviour), true))) saveChanges = true; }
                else { if(parameter.setObject(EditorGUI.ObjectField(rectObjectField, parameter.val_obj, typeof(Component), true))) saveChanges = true; }

            }
            GUI.skin = skin;
            EditorGUIUtility.LookLikeControls();
            //return;
        }
        else if(t == typeof(UnityEngine.Object)) {
            height_field += 40f + margin;
            Rect rectLabelField = new Rect(rect);
            GUI.Label(rectLabelField, name);
            Rect rectObjectField = new Rect(rect.x, rectLabelField.y + rectLabelField.height + margin, rect.width, 16f);
            GUI.skin = null;
            EditorGUIUtility.LookLikeControls();
            if(parameter.setObject(EditorGUI.ObjectField(rectObjectField, parameter.val_obj, typeof(UnityEngine.Object), true))) saveChanges = true;
            GUI.skin = skin;
            EditorGUIUtility.LookLikeControls();
        }
        else if(t == typeof(Component)) {
            Rect rectLabelField = new Rect(rect);
            GUI.Label(rectLabelField, name);
            Rect rectObjectField = new Rect(rect.x, rectLabelField.y + rectLabelField.height + margin, rect.width, 16f);
            GUI.skin = null;
            GUI.skin = null;
            EditorGUIUtility.LookLikeControls();
            if(parameter.setObject(EditorGUI.ObjectField(rectObjectField, parameter.val_obj, typeof(Component), true))) saveChanges = true;
            GUI.skin = skin;
            EditorGUIUtility.LookLikeControls();
        }
        else {
            height_field += 20f;
            GUI.skin.label.wordWrap = true;
            GUI.Label(rect, "Unsupported parameter type " + t.ToString() + ".");
        }

        return saveChanges;
    }
예제 #6
0
    //set target to a valid ref. for meta
    public bool setMethodInfo(GameObject target, Component component, bool setComponent, MethodInfo methodInfo, ParameterInfo[] cachedParameterInfos, bool restoreValues)
    {
        MethodInfo _methodInfo = getMethodInfo(target);

        // if different component or methodinfo
        string _componentName = component.GetType().Name;
        if((_methodInfo != methodInfo) || (this.componentName != _componentName) || !isMatch(cachedParameterInfos)) {
            this.component = setComponent ? component : null;
            this.componentName = _componentName;
            methodName = methodInfo.Name;
            cachedMethodInfo = methodInfo;
            //this.parameters = new object[numParameters];

            Dictionary<string, ParamKeep> oldParams = null;
            if(restoreValues && parameters != null && parameters.Count > 0) {
                Debug.Log("Parameters have been changed, from code? Attempting to restore data.");
                oldParams = new Dictionary<string, ParamKeep>(parameters.Count);
                for(int i = 0; i < parameters.Count; i++) {
                    if(!string.IsNullOrEmpty(parameters[i].paramName) && (parameters[i].valueType != (int)AMEventParameter.ValueType.Array || parameters[i].checkArrayIntegrity())) {
                        try {
                            object valObj = parameters[i].toObject();

                            oldParams.Add(parameters[i].paramName, new ParamKeep() { type = parameters[i].getParamType(), val = valObj });
                        }
                        catch {
                            continue;
                        }
                    }
                }
            }

            this.parameters = new List<AMEventParameter>();

            // add parameters
            for(int i = 0; i < cachedParameterInfos.Length; i++) {
                AMEventParameter a = new AMEventParameter();
                a.paramName = cachedParameterInfos[i].Name;
                a.setValueType(cachedParameterInfos[i].ParameterType);

                //see if we can restore value from previous
                if(oldParams != null && oldParams.ContainsKey(a.paramName)) {
                    ParamKeep keep = oldParams[a.paramName];
                    if(keep.type == cachedParameterInfos[i].ParameterType)
                        a.fromObject(keep.val);
                }

                this.parameters.Add(a);
            }

            return true;
        }
        return false;
    }
예제 #7
0
 public AMEventParameter CreateClone()
 {
     AMEventParameter a = new AMEventParameter();
     a.valueType = valueType;
     a.val_int = val_int;
     a.val_vect4 = val_vect4;
     a.val_string = val_string;
     a.val_obj = val_obj;
     foreach(AMEventParameter e in lsArray) {
         a.lsArray.Add(e.CreateClone());
     }
     return a;
 }
예제 #8
0
    public void fromObject(object dat)
    {
        switch((ValueType)valueType) {
            case ValueType.Integer:
                val_int = Convert.ToInt32(dat);
                break;
            case ValueType.Long:
                val_long = Convert.ToInt64(dat);
                break;
            case ValueType.Float:
                val_float = Convert.ToSingle(dat);
                break;
            case ValueType.Double:
                val_double = Convert.ToDouble(dat);
                break;
            case ValueType.Vector2:
                val_vect2 = (Vector2)dat;
                break;
            case ValueType.Vector3:
                val_vect3 = (Vector3)dat;
                break;
            case ValueType.Vector4:
                val_vect4 = (Vector4)dat;
                break;
            case ValueType.Color:
                val_color = (Color)dat;
                break;
            case ValueType.Rect:
                val_rect = (Rect)dat;
                break;
            case ValueType.String:
                val_string = Convert.ToString(dat);
                break;
            case ValueType.Char:
                val_string = new string(Convert.ToChar(dat), 1);
                break;
            case ValueType.Object:
                val_obj = (UnityEngine.Object)dat;
                break;
            case ValueType.Array:
                if(lsArray != null) {
                    foreach(AMEventParameter param in lsArray)
                        param.destroy();
                }

                System.Array arr = (System.Array)dat;
                lsArray = new List<AMEventParameter>(arr.Length);
                for(int i = 0; i < arr.Length; i++) {
                    object arrElem = arr.GetValue(i);
                    if(arrElem != null) {
                        AMEventParameter a = new AMEventParameter();
                        a.setValueType(arrElem.GetType());
                        a.fromObject(arrElem);
                        lsArray.Add(a);
                    }
                }
                break;
            case ValueType.Boolean:
                val_bool = Convert.ToBoolean(dat);
                break;
        }
    }