Ejemplo n.º 1
0
        void Generate()
        {
            IRail Rail = railBehaviour as IRail;

            if (Rail == null)
            {
                Rail = RailManager.instance;
            }
            Mesh mesh = new Mesh();

            Vector3[] originalverts = original.vertices.ToArray();
            Vector3[] originalnorms = original.normals.ToArray();

            /*
             * if (InvertYZ)
             * {
             *  originalverts = originalverts.Select((vec) => { return new Vector3(-vec.x, vec.z, vec.y); }).ToArray();
             *  originalnorms = originalnorms.Select((vec) => { return new Vector3(-vec.x, vec.z, vec.y); }).ToArray();
             * }
             */
            List <Vector3> verts     = new List <Vector3>();
            List <int>     triangles = new List <int>();
            List <Vector2> uvs       = new List <Vector2>();
            List <Vector3> normals   = new List <Vector3>();
            List <Color>   colors    = new List <Color>();

            for (int i = 0; i < Loop; i++)
            {
                verts.AddRange(originalverts.Select((Vector3 vec) =>
                {
                    vec.Scale(Scale);
                    vec   += OffSet + Span * i;
                    vec.y += Rail.Height(vec.z);
                    return(Rail.Local2World(vec));
                }));
                triangles.AddRange(original.triangles.Select((int x) => { return(x + originalverts.Length * i); }));
                uvs.AddRange(original.uv.ToList());
                normals.AddRange(originalnorms.Select((norm, index) =>
                {
                    Quaternion qt = Rail.Rotation(originalverts[index].z + OffSet.z + Span.z * i);
                    return(qt * norm);
                }));
                colors.AddRange(original.colors.ToList());
            }
            mesh.vertices  = verts.ToArray();
            mesh.triangles = triangles.ToArray();
            mesh.uv        = uvs.ToArray();
            mesh.normals   = normals.ToArray();
            mesh.colors    = colors.ToArray();
            mesh.RecalculateBounds();
            MeshFilter filter = GetComponent <MeshFilter>();

            filter.sharedMesh = mesh;
            MeshCollider coll = GetComponent <MeshCollider>();

            if (coll != null)
            {
                coll.sharedMesh = mesh;
            }
        }
Ejemplo n.º 2
0
        public Vector3 Local2World(Vector3 LocalPosition)
        {
            float localway;
            IRail segment = Way2Segment(LocalPosition.z, out localway);

            LocalPosition.z = localway;
            return(segment.Local2World(LocalPosition));
        }
Ejemplo n.º 3
0
 void FixedUpdate()
 {
     Position += Velocity * Time.fixedDeltaTime;
     rigidbody.MovePosition(rail.Local2World(Position));
 }