Example #1
0
 public LineRendererOption(Material material, float v1, float v2, LineTextureMode mode)
 {
     this.stdMaterial   = material;
     this.stdStartWidth = v1;
     this.stdEndWidth   = v2;
     this.textureMode   = mode;
 }
Example #2
0
 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;
        }
Example #4
0
        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);
        }
Example #5
0
        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);
        }
Example #6
0
        /// <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
                       ));
        }
Example #7
0
        /// <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);
        }