private void _GenerateObject(MeshItem mesh) { GameObject newObject = (GameObject)Object.Instantiate(_meshPrefab); newObject.transform.SetParent(_meshParent.transform); MeshFilter _meshFilter = newObject.GetComponent<MeshFilter>(); PolygonCollider2D _collider = newObject.GetComponent<PolygonCollider2D>(); List<Vector2> _uvs = new List<Vector2>(); List<int> _triangles = new List<int>(); Mesh _mesh = new Mesh(); for (int i = 0; i < mesh.points.Count; i++) { _uvs.Add(new Vector2(mesh.points[i].x, mesh.points[i].y)); } for (int i = 0; i < (mesh.points.Count - 2); i++) { _triangles.Add(0); _triangles.Add(i + 2); _triangles.Add(i + 1); } _mesh.vertices = mesh.points.ToArray(); _mesh.uv = _uvs.ToArray(); _mesh.triangles = _triangles.ToArray(); _mesh.RecalculateNormals(); _meshFilter.mesh = _mesh; _collider.points = _uvs.ToArray(); }
public void CreateMesh(List<Vector3> points) { MeshItem newMesh = new MeshItem(); for (int i = 0; i < points.Count; i++) newMesh.AddPoint(points[i]); meshes.Add(newMesh); _GenerateObject(meshes[meshes.Count - 1]); }
public unsafe bool CanUseInstancingForTransparentWith(ref MeshItem meshItem) { if (BoundingBoxCenter != meshItem.BoundingBoxCenter) { return(false); } if (BoundingSphere != meshItem.BoundingSphere) { return(false); } if (CastShadows != meshItem.CastShadows) { return(false); } if (ReceiveDecals != meshItem.ReceiveDecals) { return(false); } if (ReplaceMaterial != meshItem.ReplaceMaterial) { return(false); } if (ReplaceMaterialSelectively != null || meshItem.ReplaceMaterialSelectively != null) { if (ReplaceMaterialSelectively != null && meshItem.ReplaceMaterialSelectively != null) { if (ReplaceMaterialSelectively.Length != meshItem.ReplaceMaterialSelectively.Length) { return(false); } for (int n = 0; n < ReplaceMaterialSelectively.Length; n++) { if (ReplaceMaterialSelectively[n] != meshItem.ReplaceMaterialSelectively[n]) { return(false); } } } else { return(false); } } if (AnimationData != null || meshItem.AnimationData != null) { return(false); } if (MeshData != meshItem.MeshData) { return(false); } if (LODValue != meshItem.LODValue) { return(false); } //if( LODValue != 0 || meshItem.LODValue != 0 ) // return false; if (Layers != null || meshItem.Layers != null) { return(false); } //public GpuVertexBuffer BatchingInstanceBuffer; //public object Creator; //public object AnyData; ////public BillboardData[] BillboardArray; return(true); }