/** * 组件的公共部分 Rect */ public static void SetRect(this JContainer jsonNode, string desc, Rect data, int?digits = null) { JArray arr = new JArray(); arr.AddNumber(data.x, digits); arr.AddNumber(data.y, digits); arr.AddNumber(data.width, digits); arr.AddNumber(data.height, digits); jsonNode.Add(new JProperty(desc, arr)); }
//-------------------------------扩展部分-------------------------------- /** * 组件的公共部分,Vector2 */ public static void SetVector2(this JContainer jsonNode, string desc, Vector2 value, Vector2?defalutValue = null, int?digits = null) { if (defalutValue == null || (defalutValue != null && !value.Equals(defalutValue))) { JArray arr = new JArray(); arr.AddNumber(value.x, digits); arr.AddNumber(value.y, digits); jsonNode.Add(new JProperty(desc, arr)); } }
public static void SetUVTransform(this JContainer jsonNode, string desc, Vector4 data, int?digits = null) { var tx = data.z; var ty = data.w; var sx = data.x; var sy = data.y; var cx = 0.0f; var cy = 0.0f; var rotation = 0.0f; var c = Math.Cos(rotation); var s = Math.Sin(rotation); JArray arr = new JArray(); arr.AddNumber(sx * c); arr.AddNumber(sx * s); arr.AddNumber(-sx * (c * cx + s * cy) + cx + tx); arr.AddNumber(-sy * s); arr.AddNumber(sy * c); arr.AddNumber(-sy * (-s * cx + c * cy) + cy + ty); arr.AddNumber(0.0); arr.AddNumber(0.0); arr.AddNumber(1.0); jsonNode.Add(new JProperty(desc, arr)); }
public static void SetColor3(this JContainer jsonNode, string desc, Color value, Color?defalutValue = null, int?digits = null) { if (defalutValue == null || (defalutValue != null && !value.Equals(defalutValue))) { JArray arr = new JArray(); arr.AddNumber(value.r, digits); arr.AddNumber(value.g, digits); arr.AddNumber(value.b, digits); jsonNode.Add(new JProperty(desc, arr)); } }
protected override void Serialize(Component component, ComponentData compData) { SphereCollider comp = component as SphereCollider; var arr = new JArray(); arr.AddNumber(comp.center.x); arr.AddNumber(comp.center.y); arr.AddNumber(comp.center.z); arr.AddNumber(comp.radius); compData.properties.Add("sphere", arr); }
protected void AddCurve(JObject curveItem, string key, Keyframe[] keys) { JArray frmes = new JArray(); foreach (Keyframe k in keys) { JArray keyItem = new JArray(); keyItem.AddNumber(k.time); keyItem.AddNumber(k.value); frmes.Add(keyItem); } curveItem.Add(key, frmes); }
protected override void Serialize(Component component, ComponentData compData) { BoxCollider comp = component as BoxCollider; var halfSize = comp.size * 0.5f; var minimum = comp.center - halfSize; var maximum = comp.center + halfSize; JArray aabbItem = new JArray(); aabbItem.AddNumber(minimum.x); aabbItem.AddNumber(minimum.y); aabbItem.AddNumber(minimum.z); aabbItem.AddNumber(maximum.x); aabbItem.AddNumber(maximum.y); aabbItem.AddNumber(maximum.z); compData.properties.Add("aabb", aabbItem); }
protected override void Serialize(Component component, ComponentData compData) { var obj = component.gameObject; ParticleSystem comp = component as ParticleSystem; //main { var main = comp.main; var mainItem = new JObject(); compData.properties.Add(new JProperty("main", mainItem)); mainItem.SetNumber("duration", main.duration); mainItem.SetBool("loop", main.loop); this.AddMinMaxCurve(mainItem, "startDelay", main.startDelay); this.AddMinMaxCurve(mainItem, "startLifetime", main.startLifetime); this.AddMinMaxCurve(mainItem, "startSpeed", main.startSpeed); mainItem.SetBool("startSize3D", main.startSize3D); if (main.startSize3D) { this.AddMinMaxCurve(mainItem, "startSizeX", main.startSizeX); this.AddMinMaxCurve(mainItem, "startSizeY", main.startSizeY); this.AddMinMaxCurve(mainItem, "startSizeZ", main.startSizeZ); } else { this.AddMinMaxCurve(mainItem, "startSizeX", main.startSize); this.AddMinMaxCurve(mainItem, "startSizeY", main.startSize); this.AddMinMaxCurve(mainItem, "startSizeZ", main.startSize); } mainItem.SetBool("_startRotation3D", main.startRotation3D); if (main.startRotation3D) { this.AddMinMaxCurve(mainItem, "startRotationX", main.startRotationX); this.AddMinMaxCurve(mainItem, "startRotationY", main.startRotationY); this.AddMinMaxCurve(mainItem, "startRotationZ", main.startRotationZ); } else { this.AddMinMaxCurve(mainItem, "startRotationX", main.startRotation); this.AddMinMaxCurve(mainItem, "startRotationY", main.startRotation); this.AddMinMaxCurve(mainItem, "startRotationZ", main.startRotation); } this.AddMinMaxGradient(mainItem, "startColor", main.startColor); this.AddMinMaxCurve(mainItem, "gravityModifier", main.gravityModifier); mainItem.SetEnum("_simulationSpace", main.simulationSpace); mainItem.SetEnum("scaleMode", main.scalingMode); mainItem.SetBool("playOnAwake", main.playOnAwake); var value = this.EstimateMaxParticles(comp); mainItem.SetInt("_maxParticles", value); MyLog.Log(comp.gameObject.name + " 粒子估算:" + value); } //emission { var emissionItem = new JObject(); compData.properties.Add(new JProperty("emission", emissionItem)); // compData.properties.Add("emission", emissionItem); this.AddMinMaxCurve(emissionItem, "rateOverTime", comp.emission.rateOverTime); var burstsArr = new JArray(); emissionItem.Add("bursts", burstsArr); var bursts = new ParticleSystem.Burst[comp.emission.burstCount]; comp.emission.GetBursts(bursts); foreach (var burst in bursts) { JArray burstItem = new JArray(); burstItem.AddNumber(burst.time); burstItem.AddInt(burst.minCount); burstItem.AddInt(burst.maxCount); burstItem.AddInt(burst.cycleCount); burstItem.AddNumber(burst.repeatInterval); burstsArr.Add(burstItem); } } //shape if (comp.shape.enabled) { var shapItem = new JObject(); compData.properties.Add(new JProperty("shape", shapItem)); // compData.properties.Add("shape", shapItem); shapItem.SetEnum("shapeType", comp.shape.shapeType); shapItem.SetNumber("angle", comp.shape.angle); shapItem.SetNumber("length", comp.shape.length); shapItem.SetEnum("arcMode", comp.shape.arcMode); shapItem.SetNumber("arc", comp.shape.arc); shapItem.SetNumber("arcSpread", comp.shape.arcSpread); shapItem.SetEnum("radiusMode", comp.shape.radiusMode); shapItem.SetNumber("radius", comp.shape.radius); shapItem.SetNumber("radiusSpread", comp.shape.radiusSpread); shapItem.SetVector3("box", comp.shape.box); shapItem.SetBool("randomDirection", comp.shape.randomDirectionAmount > 0); shapItem.SetBool("spherizeDirection", comp.shape.sphericalDirectionAmount > 0); this.AddMinMaxCurve(shapItem, "arcSpeed", comp.shape.arcSpeed); } //velocityOverLifetiem if (comp.velocityOverLifetime.enabled) { var velocityOverItem = new JObject(); compData.properties.Add(new JProperty("velocityOverLifetime", velocityOverItem)); // compData.properties.Add("velocityOverLifetime", velocityOverItem); velocityOverItem.SetEnum("_mode", comp.velocityOverLifetime.x.mode); velocityOverItem.SetEnum("_space", comp.velocityOverLifetime.space); this.AddMinMaxCurve(velocityOverItem, "_x", comp.velocityOverLifetime.x); this.AddMinMaxCurve(velocityOverItem, "_y", comp.velocityOverLifetime.y); this.AddMinMaxCurve(velocityOverItem, "_z", comp.velocityOverLifetime.z); } //colorOverLifetime if (comp.colorOverLifetime.enabled) { var colorOverItem = new JObject(); compData.properties.Add(new JProperty("colorOverLifetime", colorOverItem)); // compData.properties.Add("colorOverLifetime", colorOverItem); this.AddMinMaxGradient(colorOverItem, "_color", comp.colorOverLifetime.color); } //sizeOverLifetime if (comp.sizeOverLifetime.enabled) { var sizeOverItem = new JObject(); compData.properties.Add(new JProperty("sizeOverLifetime", sizeOverItem)); // compData.properties.Add("sizeOverLifetime", sizeOverItem); sizeOverItem.SetBool("_separateAxes", comp.sizeOverLifetime.separateAxes); this.AddMinMaxCurve(sizeOverItem, "_size", comp.sizeOverLifetime.size); this.AddMinMaxCurve(sizeOverItem, "_x", comp.sizeOverLifetime.x); this.AddMinMaxCurve(sizeOverItem, "_y", comp.sizeOverLifetime.y); this.AddMinMaxCurve(sizeOverItem, "_z", comp.sizeOverLifetime.z); } //rotationOverLifetime if (comp.rotationOverLifetime.enabled) { var rotationOverItem = new JObject(); compData.properties.Add(new JProperty("rotationOverLifetime", rotationOverItem)); // compData.properties.Add("rotationOverLifetime", rotationOverItem); rotationOverItem.SetBool("_separateAxes", comp.rotationOverLifetime.separateAxes); this.AddMinMaxCurve(rotationOverItem, "_x", comp.rotationOverLifetime.x); this.AddMinMaxCurve(rotationOverItem, "_y", comp.rotationOverLifetime.y); this.AddMinMaxCurve(rotationOverItem, "_z", comp.rotationOverLifetime.z); } //textureSheetAnimationModule if (comp.textureSheetAnimation.enabled) { var textureSheetAnimation = new JObject(); compData.properties.Add(new JProperty("textureSheetAnimation", textureSheetAnimation)); // compData.properties.Add("textureSheetAnimation", textureSheetAnimation); textureSheetAnimation.SetInt("_numTilesX", comp.textureSheetAnimation.numTilesX); textureSheetAnimation.SetInt("_numTilesY", comp.textureSheetAnimation.numTilesY); textureSheetAnimation.SetEnum("_animation", comp.textureSheetAnimation.animation); textureSheetAnimation.SetBool("_useRandomRow", comp.textureSheetAnimation.useRandomRow); textureSheetAnimation.SetInt("_cycleCount", comp.textureSheetAnimation.cycleCount); textureSheetAnimation.SetInt("_rowIndex", comp.textureSheetAnimation.rowIndex); this.AddMinMaxCurve(textureSheetAnimation, "_frameOverTime", comp.textureSheetAnimation.frameOverTime, comp.textureSheetAnimation.numTilesX * comp.textureSheetAnimation.numTilesY); this.AddMinMaxCurve(textureSheetAnimation, "_startFrame", comp.textureSheetAnimation.startFrame); } }