public LineRendererOption(Material material, float v1, float v2, LineTextureMode mode) { this.stdMaterial = material; this.stdStartWidth = v1; this.stdEndWidth = v2; this.textureMode = mode; }
public LineRendererValues(LineRenderer lr) { loop = lr.loop; widthCurve = lr.widthCurve; colorGradient = lr.colorGradient; numCornerVertices = lr.numCornerVertices; numCapVertices = lr.numCapVertices; alignment = lr.alignment; textureMode = lr.textureMode; }
protected override void ReadFromImpl(object obj) { base.ReadFromImpl(obj); LineRenderer uo = (LineRenderer)obj; startWidth = uo.startWidth; endWidth = uo.endWidth; widthMultiplier = uo.widthMultiplier; numCornerVertices = uo.numCornerVertices; numCapVertices = uo.numCapVertices; useWorldSpace = uo.useWorldSpace; loop = uo.loop; startColor = uo.startColor; endColor = uo.endColor; positionCount = uo.positionCount; generateLightingData = uo.generateLightingData; textureMode = uo.textureMode; alignment = uo.alignment; widthCurve = uo.widthCurve; colorGradient = uo.colorGradient; shadowBias = uo.shadowBias; }
public Color cs, ce; // StartColor, EndColor /// <summary> /// Creates serializable LineRenderer from Unity component /// </summary> /// <param name="injector"></param> /// <param name="component"></param> public LineRendererSerializable(Injector injector, Component component) : base(injector, component) { LineRenderer lineRenderer = (LineRenderer)component; // Save the used Shared Material if (lineRenderer.sharedMaterial == null) { this.m = "null"; // No Material set } else { // Get reference or unique name for the material resource lineRenderer.sharedMaterial.name = injector.resourceStore.GetReferenceName(lineRenderer.sharedMaterial); // Check if resource is already in ResourceStore if (!injector.resourceStore.Contains(lineRenderer.sharedMaterial.name)) { injector.resourceStore.Add(lineRenderer.sharedMaterial); } // Store the new Material name this.m = lineRenderer.sharedMaterial.name; } this.p = new Vector3[lineRenderer.positionCount]; lineRenderer.GetPositions(this.p); this.p = CompressionUtility.Compress(component.gameObject, this.p); this.w = CompressionUtility.Compress(component.gameObject, lineRenderer.widthMultiplier); this.l = lineRenderer.loop; this.ca = lineRenderer.numCapVertices; this.co = lineRenderer.numCornerVertices; this.t = lineRenderer.textureMode; this.cs = CompressionUtility.Compress(component.gameObject, lineRenderer.startColor); this.ce = CompressionUtility.Compress(component.gameObject, lineRenderer.endColor); }
protected override JSONObject ToJSON(WXHierarchyContext context) { JSONObject json = new JSONObject(JSONObject.Type.OBJECT); JSONObject data = new JSONObject(JSONObject.Type.OBJECT); json.AddField("type", "LineRenderer"); json.AddField("data", data); JSONObject materialArray = new JSONObject(JSONObject.Type.ARRAY); Material[] materials = renderer.sharedMaterials; foreach (Material material in materials) { WXMaterial materialConverter = new WXMaterial(material, renderer); string materialPath = materialConverter.Export(context.preset); materialArray.Add(materialPath); context.AddResource(materialPath); } data.AddField("materials", materialArray); ShadowCastingMode mode = renderer.shadowCastingMode; StaticEditorFlags shadowFlags = GameObjectUtility.GetStaticEditorFlags(renderer.gameObject); if (mode == ShadowCastingMode.Off || (shadowFlags & StaticEditorFlags.LightmapStatic) != 0) { data.AddField("castShadow", false); } else { data.AddField("castShadow", true); } bool receiveShadow = renderer.receiveShadows; data.AddField("receiveShadow", receiveShadow); int alignmentNum = 0; #if UNITY_2017_1_OR_NEWER LineAlignment alignment = renderer.alignment; switch (alignment) { case LineAlignment.View: alignmentNum = 0; break; #if UNITY_2018_2_OR_NEWER case LineAlignment.TransformZ: alignmentNum = 1; break; #else case LineAlignment.Local: alignmentNum = 1; break; #endif } data.AddField("alignment", alignmentNum); #endif Color startColor = renderer.startColor; data.AddField("startColor", parseColor(startColor)); Color endColor = renderer.endColor; data.AddField("endColor", parseColor(endColor)); float startWidth = renderer.startWidth; data.AddField("startWidth", startWidth); float endWidth = renderer.endWidth; data.AddField("endWidth", endWidth); LineTextureMode textureMode = renderer.textureMode; int textureModeNum = 0; switch (textureMode) { case LineTextureMode.Stretch: textureModeNum = 0; break; case LineTextureMode.Tile: textureModeNum = 1; break; } data.AddField("textureMode", textureModeNum); int positionCount = 0; #if UNITY_2017_1_OR_NEWER positionCount = renderer.positionCount; #else positionCount = renderer.numPositions; #endif Vector3[] positionsVec = new Vector3[positionCount]; renderer.GetPositions(positionsVec); JSONObject jSONObject = new JSONObject(JSONObject.Type.ARRAY); for (int i = 0; i < positionCount; i++) { JSONObject vec = new JSONObject(JSONObject.Type.ARRAY); vec.Add(positionsVec[i].x * -1f); vec.Add(positionsVec[i].y); vec.Add(positionsVec[i].z); jSONObject.Add(vec); } data.AddField("positions", jSONObject); data.AddField("numCapVertices", renderer.numCapVertices); data.AddField("numCornerVertices", renderer.numCornerVertices); #if UNITY_2017_1_OR_NEWER data.AddField("loop", renderer.loop); #endif data.AddField("useWorldSpace", renderer.useWorldSpace); data.AddField("gColor", GetGradientColor(renderer.colorGradient)); data.AddField("widthCurve", GetCurveData(renderer.widthCurve)); data.AddField("widthMultiplier", renderer.widthMultiplier); return(json); }
/// <summary> /// Extrudes the cross section along the curve. /// </summary> /// <param name="curve">The curve to extrude along.</param> /// <param name="crossSection">The cross section of the extrusion.</param> /// <param name="distanceCounter">A counter for customizing longitudinal texture coordinates.</param> /// <returns>A structure containing the result.</returns> public static ExtruderResult Extrude(Curve curve, CrossSection2D crossSection, ref float distanceCounter, LineTextureMode textureMode = LineTextureMode.Tile) { // Calculate counting parameters int sliceCount = curve.Count; int segmentCount = sliceCount - 1; int vertexCount = crossSection.vertexCount * sliceCount; int triangleCount = 2 * crossSection.edgeCount * segmentCount; int triangleIndexCount = 3 * triangleCount; // Declare storage List <Vector3> vertices = new List <Vector3>(vertexCount); List <Vector3> normals = new List <Vector3>(vertexCount); List <Vector4> tangents = new List <Vector4>(vertexCount); List <Vector2> uv = new List <Vector2>(vertexCount); List <int> triangles = new List <int>(triangleIndexCount); // Compute spatial vectors foreach (OrientedPoint orientedPoint in curve) { // Add per-slice vertices foreach (Vector3 vertex in crossSection.vertices) { vertices.Add(orientedPoint.TransformPoint(vertex)); } // Add per-slice normals foreach (Vector3 normal in crossSection.normals) { normals.Add(orientedPoint.TransformDirection(normal)); } // Add per-slice tangents Vector3 tangent = orientedPoint.TransformDirection(Vector3.forward); for (int i = 0; i < crossSection.vertexCount; i++) { tangents.Add(tangent); } } // Compute texture vectors for (int i = 0; i < curve.Count; i++) { distanceCounter += curve.deltas[i]; // Add per-slice uvs foreach (Vector2 crossSectionUV in crossSection.uv) { float u, v; switch (textureMode) { case LineTextureMode.Stretch: u = curve.distances[i] / curve.Length; break; case LineTextureMode.DistributePerSegment: u = (float)i / curve.Count; break; case LineTextureMode.RepeatPerSegment: u = i; break; default: u = distanceCounter; break; } v = crossSectionUV.y; Vector2 texCoord = new Vector2(u, v); uv.Add(texCoord); } } // Compute triangle indices for (int i = 0, baseIndex = 0; i < segmentCount; i++, baseIndex += crossSection.vertexCount) { // Add per-segment triangles (triangle indices) foreach (Vector2Int edge in crossSection.edges) { int a = baseIndex + edge.x; int b = baseIndex + edge.y; int c = baseIndex + edge.x + crossSection.vertexCount; int d = baseIndex + edge.y + crossSection.vertexCount; triangles.Add(a); triangles.Add(b); triangles.Add(d); triangles.Add(a); triangles.Add(d); triangles.Add(c); } } return(new ExtruderResult( vertices, normals, tangents, uv, triangles )); }
/// <summary> /// Extrudes the cross section along the curve. /// </summary> /// <param name="curve">The curve to extrude along.</param> /// <param name="crossSection">The cross section of the extrusion.</param> /// <returns>A structure containing the result.</returns> public static ExtruderResult Extrude(Curve curve, CrossSection2D crossSection, LineTextureMode textureMode = LineTextureMode.Tile) { float distanceCounter = 0.0f; return(Extrude(curve, crossSection, ref distanceCounter, textureMode)); }
protected override JSONObject ToJSON(WXHierarchyContext context) { JSONObject json = new JSONObject(JSONObject.Type.OBJECT); JSONObject data = new JSONObject(JSONObject.Type.OBJECT); json.AddField("type", "TrailRenderer"); json.AddField("data", data); data.AddField("active", renderer.enabled); JSONObject materialArray = new JSONObject(JSONObject.Type.ARRAY); Material[] materials = renderer.sharedMaterials; foreach (Material material in materials) { WXMaterial materialConverter = new WXMaterial(material, renderer); string materialPath = materialConverter.Export(context.preset); materialArray.Add(materialPath); context.AddResource(materialPath); } data.AddField("materials", materialArray); ShadowCastingMode mode = renderer.shadowCastingMode; StaticEditorFlags shadowFlags = GameObjectUtility.GetStaticEditorFlags(renderer.gameObject); #if UNITY_2019_2_OR_NEWER if (mode == ShadowCastingMode.Off || (shadowFlags & StaticEditorFlags.ContributeGI) != 0) #else if (mode == ShadowCastingMode.Off || (shadowFlags & StaticEditorFlags.LightmapStatic) != 0) #endif { data.AddField("castShadow", false); } else { data.AddField("castShadow", true); } bool receiveShadow = renderer.receiveShadows; data.AddField("receiveShadow", receiveShadow); int alignmentNum = 0; #if UNITY_2017_1_OR_NEWER LineAlignment alignment = renderer.alignment; switch (alignment) { case LineAlignment.View: alignmentNum = 0; break; #if UNITY_2018_2_OR_NEWER case LineAlignment.TransformZ: alignmentNum = 1; break; #else case LineAlignment.Local: alignmentNum = 1; break; #endif } data.AddField("alignment", alignmentNum); #endif Color startColor = renderer.startColor; data.AddField("startColor", parseColor(startColor)); Color endColor = renderer.endColor; data.AddField("endColor", parseColor(endColor)); float startWidth = renderer.startWidth; data.AddField("startWidth", startWidth); float endWidth = renderer.endWidth; data.AddField("endWidth", endWidth); float time = renderer.time; data.AddField("time", time); LineTextureMode textureMode = renderer.textureMode; int textureModeNum = 0; switch (textureMode) { case LineTextureMode.Stretch: textureModeNum = 0; break; case LineTextureMode.Tile: textureModeNum = 1; break; } data.AddField("textureMode", textureModeNum); data.AddField("numCapVertices", renderer.numCapVertices); data.AddField("numCornerVertices", renderer.numCornerVertices); data.AddField("minVertexDistance", renderer.minVertexDistance); data.AddField("gColor", GetGradientColor(renderer.colorGradient)); data.AddField("widthCurve", GetCurveData(renderer.widthCurve)); data.AddField("widthMultiplier", renderer.widthMultiplier); return(json); }