public static SerializableMaterialProperty Get(Material material, ShaderPropertyType type, string name) { object value = type switch { ShaderPropertyType.Float => material.GetFloat(name), ShaderPropertyType.Range => material.GetFloat(name), ShaderPropertyType.Color => SerializableColor.FromColor(material.GetColor(name)), ShaderPropertyType.Vector => SerializableVector4.FromVector(material.GetVector(name)), ShaderPropertyType.Texture => material.GetTexture(name)?.name, _ => null }; return(value == null ? null : new SerializableMaterialProperty { Name = name, Type = type, Value = value }); } }
public override void DrawEditor() { var _v4 = Value; var _x = _v4.x; var _y = _v4.y; var _z = _v4.z; var _w = _v4.w; using (new GUILayout.HorizontalScope()) { //GUILayout.Space(130); GUILayout.Label("x:"); _x = GUIFloatField.FloatField(_x); GUILayout.Label("y:"); _y = GUIFloatField.FloatField(_y); GUILayout.Label("z:"); _z = GUIFloatField.FloatField(_z); GUILayout.Label("w:"); _w = GUIFloatField.FloatField(_w); } Value = new SerializableVector4(_x, _y, _z, _w); }
public void DeserializeGameObject(SerializableGameObject serializableObject, Transform parent) { GameObject myObject = Instantiate(new GameObject(), Vector3.zero, Quaternion.identity, parent); myObject.name = serializableObject.name; foreach (SerializableComponent sComp in serializableObject.serializableComponents) { Type compType = sComp.componentType as Type; myObject.AddComponent(compType); for (int i = 0; i < sComp.propertiesNames.Count; i++) { try { string pName = sComp.propertiesNames[i]; object loadPropertyValue = sComp.values[i]; var pValue = loadPropertyValue; if (loadPropertyValue.GetType() == typeof(SerializableVector2)) { SerializableVector2 vector = (SerializableVector2)loadPropertyValue; pValue = new Vector2(vector.x, vector.y); } else if (loadPropertyValue.GetType() == typeof(SerializableVector3)) { SerializableVector3 vector = (SerializableVector3)loadPropertyValue; pValue = new Vector3(vector.x, vector.y, vector.z); } else if (loadPropertyValue.GetType() == typeof(SerializableQuaternion)) { SerializableQuaternion quat = (SerializableQuaternion)loadPropertyValue; pValue = new Quaternion(quat.x, quat.y, quat.z, quat.w); } else if (loadPropertyValue.GetType() == typeof(SerializableSprite)) { SerializableSprite sSprite = (SerializableSprite)loadPropertyValue; foreach (Sprite sprite in allSprites) { myObject.GetComponent <SpriteRenderer>().sortingOrder = 31; if (sprite.name.Equals(sSprite.spriteName)) { myObject.GetComponent <SpriteRenderer>().sprite = sprite; continue; } } } else if (loadPropertyValue.GetType() == typeof(SerializableColor)) { SerializableColor sColor = (SerializableColor)loadPropertyValue; pValue = new Color(sColor.r, sColor.g, sColor.b, sColor.a); } else if (loadPropertyValue.GetType() == typeof(SerializableVector4)) { SerializableVector4 sVector = (SerializableVector4)loadPropertyValue; pValue = new Vector4(sVector.x, sVector.y, sVector.z, sVector.w); } else if (loadPropertyValue.GetType() == typeof(SerializableBounds)) { SerializableBounds sBounds = (SerializableBounds)loadPropertyValue; pValue = new Bounds(new Vector3(sBounds.center[0], sBounds.center[1], sBounds.center[2]) , new Vector3(sBounds.size[0], sBounds.size[1], sBounds.size[2])); } else if (loadPropertyValue.GetType() == typeof(Serializable4x4Matrix)) { Serializable4x4Matrix sMatrix = (Serializable4x4Matrix)loadPropertyValue; Matrix4x4 matrix = new Matrix4x4(); //setting up the matrix values matrix[0, 0] = sMatrix.data[0, 0]; matrix[0, 1] = sMatrix.data[0, 1]; matrix[0, 2] = sMatrix.data[0, 2]; matrix[0, 3] = sMatrix.data[0, 3]; matrix[1, 0] = sMatrix.data[1, 0]; matrix[1, 1] = sMatrix.data[1, 1]; matrix[1, 2] = sMatrix.data[1, 2]; matrix[1, 3] = sMatrix.data[1, 3]; matrix[2, 0] = sMatrix.data[2, 0]; matrix[2, 1] = sMatrix.data[2, 1]; matrix[2, 2] = sMatrix.data[2, 2]; matrix[2, 3] = sMatrix.data[2, 3]; matrix[3, 0] = sMatrix.data[3, 0]; matrix[3, 1] = sMatrix.data[3, 1]; matrix[3, 2] = sMatrix.data[3, 2]; matrix[3, 3] = sMatrix.data[3, 3]; pValue = matrix; } else if (loadPropertyValue.GetType() == typeof(SerializableVector2[])) { SerializableVector2[] data = (SerializableVector2[])loadPropertyValue; Vector2[] vectors = new Vector2[data.Length]; for (int x = 0; x < data.Length; x++) { SerializableVector2 sVector = data[x]; vectors[x] = new Vector2(sVector.x, sVector.y); } pValue = vectors; } else if (loadPropertyValue.GetType() == typeof(SerializableVector3[])) { SerializableVector3[] data = (SerializableVector3[])loadPropertyValue; Vector3[] vectors = new Vector3[data.Length]; for (int x = 0; x < data.Length; x++) { SerializableVector3 sVector = data[x]; vectors[x] = new Vector3(sVector.x, sVector.y); } pValue = vectors; } else if (loadPropertyValue.GetType() == typeof(SerializableAnimatorController)) { SerializableAnimatorController sControlller = (SerializableAnimatorController)loadPropertyValue; foreach (RuntimeAnimatorController controller in allControllers) { if (controller.name.Equals(sControlller.animatorControllerName)) { myObject.GetComponent <Animator>().runtimeAnimatorController = controller; continue; } } } PropertyInfo pInfo = compType.GetProperty(pName); pInfo.SetValue(myObject.GetComponent(compType), pValue); } catch (Exception e) { Debug.LogWarning(e); } } } Vector3 position = new Vector3(); position.x = serializableObject.transformData[0][0]; position.y = serializableObject.transformData[0][1]; position.z = serializableObject.transformData[0][2]; Vector3 rotation = new Vector3(); rotation.x = serializableObject.transformData[1][0]; rotation.y = serializableObject.transformData[1][1]; rotation.z = serializableObject.transformData[1][2]; Vector3 scale = new Vector3(); scale.x = serializableObject.transformData[2][0]; scale.y = serializableObject.transformData[2][1]; scale.z = serializableObject.transformData[2][2]; myObject.transform.position = position; myObject.transform.eulerAngles = rotation; myObject.transform.localScale = scale; foreach (SerializableGameObject child in serializableObject.childs) { DeserializeGameObject(child, myObject.transform); } }
//Take a vector4 and convert it into its serializable version static SerializableVector4 vector4ToSerializableVector4(Vector4 vec4) { SerializableVector4 svec4 = new SerializableVector4(vec4.w, vec4.x, vec4.y, vec4.z); return(svec4); }
//Take a serializable vector4 and convert it into a color object static Color serializableVector4ToColor(SerializableVector4 svec4) { return(new Color(svec4.w, svec4.x, svec4.y, svec4.z)); }
//Take a serializable vector4 and convert it to a standard vector4 static Vector4 serializableVector4ToVector4(SerializableVector4 svec4) { return(new Vector4(svec4.w, svec4.x, svec4.y, svec4.z)); }
//Object //public HideFlags hideFlags; //public string name; public SerializableMesh(Mesh mesh) { bindposes = mesh.bindposes; boneWeights = mesh.boneWeights; bounds = new SerializableBounds(mesh.bounds); colors = mesh.colors; colors32 = mesh.colors32; SerializableVector3[] a = new SerializableVector3[mesh.vertices.Length]; for (int b = 0; b < a.Length; b++) { a [b] = new SerializableVector3(mesh.vertices [b]); } vertices = a; a = new SerializableVector3[mesh.normals.Length]; for (int b = 0; b < a.Length; b++) { a [b] = new SerializableVector3(mesh.normals [b]); } normals = a; subMeshCount = mesh.subMeshCount; SerializableVector4[] c = new SerializableVector4[mesh.tangents.Length]; for (int b = 0; b < c.Length; b++) { c [b] = new SerializableVector4(mesh.tangents [b]); } tangents = c; triangles = mesh.triangles; SerializableVector2[] d = new SerializableVector2[mesh.uv.Length]; for (int b = 0; b < d.Length; b++) { d [b] = new SerializableVector2(mesh.uv [b]); } uv = d; d = new SerializableVector2[mesh.uv2.Length]; for (int b = 0; b < d.Length; b++) { d [b] = new SerializableVector2(mesh.uv2 [b]); } uv2 = d; d = new SerializableVector2[mesh.uv3.Length]; for (int b = 0; b < d.Length; b++) { d [b] = new SerializableVector2(mesh.uv3 [b]); } uv3 = d; d = new SerializableVector2[mesh.uv4.Length]; for (int b = 0; b < d.Length; b++) { d [b] = new SerializableVector2(mesh.uv4 [b]); } uv4 = d; //hideFlags = mesh.hideFlags; //name = mesh.name; }
public SerializableGameObject ToSerializableGameObject(GameObject targetObject) { Component[] allComponents; allComponents = targetObject.GetComponents(typeof(Component)); List <SerializableComponent> serializableComponents = new List <SerializableComponent>(); foreach (Component comp in allComponents) { if (comp.GetType() == typeof(Transform)) { continue; } SerializableComponent sComp = new SerializableComponent(comp.GetType(), null, null); List <string> propertiesNames = new List <string>(); List <object> values = new List <object>(); foreach (PropertyInfo pInfo in comp.GetType().GetProperties()) { try { //trying to store the component property data object pValue = pInfo.GetValue(targetObject.GetComponent(comp.GetType())); if (pValue.GetType() == typeof(Vector2)) { pValue = new SerializableVector2((Vector2)pValue); } else if (pValue.GetType() == typeof(Vector3)) { pValue = new SerializableVector3((Vector3)pValue); } else if (pValue.GetType() == typeof(Quaternion)) { pValue = new SerializableQuaternion((Quaternion)pValue); } else if (pValue.GetType() == typeof(Sprite)) { pValue = new SerializableSprite((Sprite)pValue); } else if (pValue.GetType() == typeof(Color)) { pValue = new SerializableColor((Color)pValue); } else if (pValue.GetType() == typeof(Vector4)) { pValue = new SerializableVector4((Vector4)pValue); } else if (pValue.GetType() == typeof(Bounds)) { pValue = new SerializableBounds((Bounds)pValue); } else if (pValue.GetType() == typeof(Matrix4x4)) { pValue = new Serializable4x4Matrix((Matrix4x4)pValue); } else if (pValue.GetType() == typeof(Vector2[])) { Vector2[] data = (Vector2[])pValue; SerializableVector2[] vectors = new SerializableVector2[data.Length]; for (int i = 0; i < data.Length; i++) { vectors[i] = new SerializableVector2(data[i]); } pValue = vectors; } else if (pValue.GetType() == typeof(Vector3[])) { Vector3[] data = (Vector3[])pValue; SerializableVector3[] vectors = new SerializableVector3[data.Length]; for (int i = 0; i < data.Length; i++) { vectors[i] = new SerializableVector3(data[i]); } pValue = vectors; } else if (pValue.GetType() == typeof(RuntimeAnimatorController)) { pValue = new SerializableAnimatorController((RuntimeAnimatorController)pValue); } else if (!(pValue.GetType().IsSerializable) || !(pValue.GetType().IsArray&& pValue.GetType().GetElementType().IsSerializable)) { continue; } values.Add(pValue); propertiesNames.Add(pInfo.Name); } catch (Exception e) { continue; } } sComp.propertiesNames = propertiesNames; foreach (object obj in values) { if (obj.GetType().IsSerializable == false) { values.Remove(obj); propertiesNames.Remove(propertiesNames[values.IndexOf(obj)]); } Debug.Log(".............." + obj.GetType() + ".............."); } sComp.values = values; serializableComponents.Add(sComp); } List <SerializableGameObject> childs = new List <SerializableGameObject>(); foreach (Transform child in targetObject.transform) { childs.Add(ToSerializableGameObject(child.gameObject)); } List <float> position = new List <float>(); position.Add(targetObject.transform.position.x); position.Add(targetObject.transform.position.y); position.Add(targetObject.transform.position.z); List <float> rotation = new List <float>(); rotation.Add(targetObject.transform.eulerAngles.x); rotation.Add(targetObject.transform.eulerAngles.y); rotation.Add(targetObject.transform.eulerAngles.z); List <float> scale = new List <float>(); scale.Add(targetObject.transform.localScale.x); scale.Add(targetObject.transform.localScale.y); scale.Add(targetObject.transform.localScale.z); List <List <float> > transformData = new List <List <float> >(); transformData.Add(position); transformData.Add(rotation); transformData.Add(scale); SerializableGameObject sObject = new SerializableGameObject(targetObject.name, serializableComponents, transformData, childs); return(sObject); }
public static Quaternion LookRotation(this SerializableVector4 quaternion) => Quaternion.LookRotation(quaternion.ToUnityVector3());
public static Vector3 ToUnityVector3(this SerializableVector4 v) => new Vector3(v.X, v.Y, v.Z);
public static Vector4 ToUnityVector(this SerializableVector4 v) => new Vector4(v.X, v.Y, v.Z, v.W);
public static Quaternion ToVector4(this SerializableVector4 v) { return(new Quaternion(v.x, v.y, v.z, v.w)); }
public static Vector3 ToVector3(this SerializableVector4 v) { return(new Vector3(v.x, v.y, v.z)); }
public static Vector2 ToVector2(this SerializableVector4 v) { return(new Vector2(v.x, v.y)); }
// Reset value back to initial value public override void Reset() { Value = InitValue; }
public Vector4Type(Vector4 _v) { _vector4 = new SerializableVector4(_v.x, _v.y, _v.z, _v.w); }