Advertisement
Guest User

slice_and_shatter.js

a guest
Apr 1st, 2013
122
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // SliceMesh function makes a single slice - call it twice with reversed plane to make both slices
  2. // Neither SliceMesh nor Shatter destroys the original object - call destroy as well if you want that
  3.  
  4. var ReplacementPrefab : GameObject;
  5. var ChunkPrefab : GameObject;
  6. var MyBreakForce : float;
  7. var SliceSurfaceMaterial : Material;
  8. var Chaos : float = 1.0f;
  9. var AttachToGround : boolean = true;
  10. var GroundJoinMultiplier : float = 2.0f;
  11.  
  12. private var thisMeshfilter : MeshFilter;
  13. private var thisMaterials : Material[];
  14.  
  15. function VertexSplit ( outv : Vector3[], outi : int, a : Vector3, b : Vector3, slice : Plane, c : Vector2, d : Vector2, outuv : Vector2[]) {
  16.     var ray : Ray;
  17.     ray.origin=a;
  18.     ray.direction=b-a;
  19.     var origdist : float = Vector3.Distance(b,a);
  20.     var dist : float;
  21.     slice.Raycast(ray,dist);
  22.     outuv[outi] = c + (d-c)*dist/origdist;
  23.     outv[outi] = a + ray.direction*dist;
  24. }
  25.  
  26. private var AntiClockwiseAngles : float[];
  27. private var slicesurfacematerialindex : int;
  28.  
  29. function AntiClockwise ( i1 : int, i2 : int) : int {
  30.     return (AntiClockwiseAngles[i1]<AntiClockwiseAngles[i2])?-1:1;
  31. }
  32.  
  33. public function SliceMesh ( mesh : Mesh, slice : Plane ) : Mesh {
  34.     var i : int;
  35.     var j  :int;
  36.     var vertices : Vector3[] = mesh.vertices;
  37.     var uv : Vector2[] = mesh.uv;
  38.     var newmesh=new Mesh();
  39.     var submeshes : int=Mathf.Max(mesh.subMeshCount,slicesurfacematerialindex+1);
  40.    
  41.     var triangles = MultiDim.JaggedInt(submeshes);
  42.     var vertexinslice : boolean[] = new boolean[vertices.Length];
  43.     var vertexconvert : int[] = new int[vertices.Length];
  44.     var sliceda : boolean = false;
  45.     var slicedb : boolean = false;
  46.     var vertexmove=0;
  47.     for (i=0; i<mesh.subMeshCount; i++) {
  48.         triangles[i]=mesh.GetTriangles(i);
  49.     }
  50.     if (i<submeshes) {
  51.         triangles[i]=new int[0];
  52.     }
  53.     for (i=0; i<vertices.Length; i++) {
  54.         vertexinslice[i]=slice.GetSide(vertices[i]);
  55.         if (vertexinslice[i]) {
  56.             vertexconvert[i]=vertexmove;
  57.             vertexmove++;
  58.             sliceda=true;
  59.         } else {
  60.             slicedb=true;
  61.         }
  62.     }
  63.     if (!sliceda || !slicedb) {return null;}
  64.    
  65.     var newvertexcount=0;
  66.     var newtrianglecount : int[]=new int[submeshes];
  67.    
  68.     var newtriangles = MultiDim.JaggedInt(submeshes);
  69.     for (j=0; j<submeshes; j++) {
  70.         for (i=0; i<triangles[j].Length; i+=3) {
  71.             var pointsinslice = (vertexinslice[triangles[j][i]]?1:0) +
  72.                                 (vertexinslice[triangles[j][i+1]]?1:0) +
  73.                                 (vertexinslice[triangles[j][i+2]]?1:0);
  74.             switch (pointsinslice) {
  75.                 case 0: break;
  76.                 case 1:
  77.                     newvertexcount += 2;
  78.                     newtrianglecount[j] += 3;
  79.                     break;
  80.                 case 2:
  81.                     newvertexcount += 2;
  82.                     newtrianglecount[j] += 6;
  83.                     break;
  84.                 case 3:
  85.                     newtrianglecount[j] += 3;
  86.                     break;
  87.             }
  88.         }
  89.         newtriangles[j]=new int[newtrianglecount[j]];
  90.     }
  91.     var newvertices : Vector3[] = new Vector3[newvertexcount+vertexmove];
  92.     var newuv : Vector2[] = new Vector2[newvertexcount+vertexmove];
  93.     vertexmove=0;
  94.     for (i=0; i<vertices.Length; i++) {
  95.         if (vertexinslice[i]) {
  96.             newvertices[vertexmove]=vertices[i];
  97.             newuv[vertexmove]=uv[i];
  98.             vertexmove++;
  99.         }
  100.     }
  101.     var oldvertexcount : int = vertexmove;
  102.     for (j=0; j<submeshes; j++) {
  103.         newtrianglecount[j]=0;
  104.         for (i=0; i<triangles[j].Length; i+=3) {
  105.             pointsinslice = (vertexinslice[triangles[j][i]]?1:0) +
  106.                             (vertexinslice[triangles[j][i+1]]?2:0) +
  107.                             (vertexinslice[triangles[j][i+2]]?4:0);
  108.             switch (pointsinslice) {
  109.                 case 0: break;
  110.                 case 1:
  111.                     newtriangles[j][newtrianglecount[j]++]=vertexconvert[triangles[j][i]];
  112.                     newtriangles[j][newtrianglecount[j]++]=vertexmove;
  113.                     VertexSplit(newvertices,vertexmove++,vertices[triangles[j][i]],vertices[triangles[j][i+1]],slice,uv[triangles[j][i]],uv[triangles[j][i+1]],newuv);
  114.                     newtriangles[j][newtrianglecount[j]++]=vertexmove;
  115.                     VertexSplit(newvertices,vertexmove++,vertices[triangles[j][i]],vertices[triangles[j][i+2]],slice,uv[triangles[j][i]],uv[triangles[j][i+2]],newuv);
  116.                     break;
  117.                 case 2:
  118.                     newtriangles[j][newtrianglecount[j]++]=vertexmove;
  119.                     VertexSplit(newvertices,vertexmove++,vertices[triangles[j][i]],vertices[triangles[j][i+1]],slice,uv[triangles[j][i]],uv[triangles[j][i+1]],newuv);
  120.                     newtriangles[j][newtrianglecount[j]++]=vertexconvert[triangles[j][i+1]];
  121.                     newtriangles[j][newtrianglecount[j]++]=vertexmove;
  122.                     VertexSplit(newvertices,vertexmove++,vertices[triangles[j][i+1]],vertices[triangles[j][i+2]],slice,uv[triangles[j][i+1]],uv[triangles[j][i+2]],newuv);
  123.                     break;
  124.                 case 3:
  125.                     newtriangles[j][newtrianglecount[j]++]=vertexconvert[triangles[j][i]];
  126.                     newtriangles[j][newtrianglecount[j]++]=vertexconvert[triangles[j][i+1]];
  127.                     newtriangles[j][newtrianglecount[j]++]=vertexmove;
  128.                     VertexSplit(newvertices,vertexmove++,vertices[triangles[j][i]],vertices[triangles[j][i+2]],slice,uv[triangles[j][i]],uv[triangles[j][i+2]],newuv);
  129.                     newtriangles[j][newtrianglecount[j]++]=vertexconvert[triangles[j][i+1]];
  130.                     newtriangles[j][newtrianglecount[j]++]=vertexmove;
  131.                     newtriangles[j][newtrianglecount[j]++]=vertexmove-1;
  132.                     VertexSplit(newvertices,vertexmove++,vertices[triangles[j][i+1]],vertices[triangles[j][i+2]],slice,uv[triangles[j][i+1]],uv[triangles[j][i+2]],newuv);
  133.                     break;
  134.                 case 4:
  135.                     newtriangles[j][newtrianglecount[j]++]=vertexmove;
  136.                     VertexSplit(newvertices,vertexmove++,vertices[triangles[j][i]],vertices[triangles[j][i+2]],slice,uv[triangles[j][i]],uv[triangles[j][i+2]],newuv);
  137.                     newtriangles[j][newtrianglecount[j]++]=vertexmove;
  138.                     VertexSplit(newvertices,vertexmove++,vertices[triangles[j][i+1]],vertices[triangles[j][i+2]],slice,uv[triangles[j][i+1]],uv[triangles[j][i+2]],newuv);
  139.                     newtriangles[j][newtrianglecount[j]++]=vertexconvert[triangles[j][i+2]];
  140.                     break;
  141.                 case 5:
  142.                     newtriangles[j][newtrianglecount[j]++]=vertexconvert[triangles[j][i+2]];
  143.                     newtriangles[j][newtrianglecount[j]++]=vertexconvert[triangles[j][i]];
  144.                     newtriangles[j][newtrianglecount[j]++]=vertexmove;
  145.                     VertexSplit(newvertices,vertexmove++,vertices[triangles[j][i+2]],vertices[triangles[j][i+1]],slice,uv[triangles[j][i+2]],uv[triangles[j][i+1]],newuv);
  146.                     newtriangles[j][newtrianglecount[j]++]=vertexconvert[triangles[j][i]];
  147.                     newtriangles[j][newtrianglecount[j]++]=vertexmove;
  148.                     newtriangles[j][newtrianglecount[j]++]=vertexmove-1;
  149.                     VertexSplit(newvertices,vertexmove++,vertices[triangles[j][i]],vertices[triangles[j][i+1]],slice,uv[triangles[j][i]],uv[triangles[j][i+1]],newuv);
  150.                     break;
  151.                 case 6:
  152.                     newtriangles[j][newtrianglecount[j]++]=vertexconvert[triangles[j][i+1]];
  153.                     newtriangles[j][newtrianglecount[j]++]=vertexconvert[triangles[j][i+2]];
  154.                     newtriangles[j][newtrianglecount[j]++]=vertexmove;
  155.                     VertexSplit(newvertices,vertexmove++,vertices[triangles[j][i+1]],vertices[triangles[j][i]],slice,uv[triangles[j][i+1]],uv[triangles[j][i]],newuv);
  156.                     newtriangles[j][newtrianglecount[j]++]=vertexconvert[triangles[j][i+2]];
  157.                     newtriangles[j][newtrianglecount[j]++]=vertexmove;
  158.                     newtriangles[j][newtrianglecount[j]++]=vertexmove-1;
  159.                     VertexSplit(newvertices,vertexmove++,vertices[triangles[j][i+2]],vertices[triangles[j][i]],slice,uv[triangles[j][i+2]],uv[triangles[j][i]],newuv);
  160.                     break;
  161.                 case 7:
  162.                     newtriangles[j][newtrianglecount[j]++]=vertexconvert[triangles[j][i]];
  163.                     newtriangles[j][newtrianglecount[j]++]=vertexconvert[triangles[j][i+1]];
  164.                     newtriangles[j][newtrianglecount[j]++]=vertexconvert[triangles[j][i+2]];
  165.                     break;
  166.             }
  167.         }
  168.     }
  169.    
  170.     var indexorder : int[] = new int[newvertexcount];
  171.     var angles : float[] = new float[newvertexcount];
  172.     var plane1 : Vector3 = Vector3.Cross(slice.normal,Vector3(1,0,0));
  173.     if (Mathf.Abs(plane1.x)<0.1f && Mathf.Abs(plane1.y)<0.1f && Mathf.Abs(plane1.z)<0.1f) plane1 = Vector3.Cross(slice.normal,Vector3(0,0,1));
  174.     plane1.Normalize();
  175.     var plane2 : Vector3 = Vector3.Cross(slice.normal,plane1);
  176.     var midpoint : Vector3 = new Vector3(0,0,0);
  177.     for (i=0; i<newvertexcount; i++) {
  178.         indexorder[i]=i;
  179.         midpoint+=newvertices[oldvertexcount+i];
  180.     }
  181.     midpoint/=newvertexcount;
  182.     var pretempsliceuvs : Vector2[] = new Vector2[newvertexcount];
  183.     for (i=0; i<newvertexcount; i++) {
  184.         var v : Vector3 = newvertices[oldvertexcount+i]-midpoint;
  185.         var x : float = Vector3.Dot(v,plane1);
  186.         var y : float = Vector3.Dot(v,plane2);
  187.         pretempsliceuvs[i].x=x; pretempsliceuvs[i].y=y;
  188.         angles[i]=Mathf.Atan2(x,y);
  189.     }
  190.     var tempsliceuvs : Vector2[] = new Vector2[newvertexcount];
  191.    
  192.     AntiClockwiseAngles=angles;
  193.     System.Array.Sort(indexorder,AntiClockwise);
  194.     var slicevertexcount : int = 1;
  195.     var tempslicevertices : Vector3[] = new Vector3[newvertexcount];
  196.     tempslicevertices[0]=newvertices[oldvertexcount+indexorder[0]];
  197.     tempsliceuvs[0]=pretempsliceuvs[indexorder[0]];
  198.     var prevline : Vector3 = newvertices[oldvertexcount+indexorder[1]]-newvertices[oldvertexcount+indexorder[0]];
  199.     i=2;
  200.     while (prevline.sqrMagnitude<0.001f && i<newvertexcount) {
  201.         prevline=newvertices[oldvertexcount+indexorder[i]]-newvertices[oldvertexcount+indexorder[0]];
  202.         i++;
  203.     }
  204.     for (; i<newvertexcount; i++) {
  205.         var nextline : Vector3 = newvertices[oldvertexcount+indexorder[i]]-newvertices[oldvertexcount+indexorder[i-1]];
  206.         if (nextline.sqrMagnitude<0.001f) continue;
  207.         if (
  208.             Vector3.Cross(
  209.                 nextline,
  210.                 prevline).sqrMagnitude>0.001) {
  211.             tempslicevertices[slicevertexcount]=newvertices[oldvertexcount+indexorder[i-1]];
  212.             tempsliceuvs[slicevertexcount]=pretempsliceuvs[indexorder[i-1]];
  213.             slicevertexcount++;
  214.             prevline=nextline;
  215.         }
  216.     }
  217.     nextline = newvertices[oldvertexcount+indexorder[0]]-newvertices[oldvertexcount+indexorder[newvertexcount-1]];
  218.     if (nextline.sqrMagnitude>0.001f && Vector3.Cross(
  219.             nextline,
  220.             prevline).sqrMagnitude>0.001) {
  221.         tempslicevertices[slicevertexcount]=newvertices[oldvertexcount+indexorder[newvertexcount-1]];
  222.         tempsliceuvs[slicevertexcount]=pretempsliceuvs[indexorder[newvertexcount-1]];
  223.         slicevertexcount++;
  224.     }
  225.     newmesh.subMeshCount=submeshes;
  226.     if (slicevertexcount>=3) {
  227.         var fullnewvertices : Vector3[] = new Vector3[vertexmove+slicevertexcount];
  228.         var fullnewuv : Vector2[] = new Vector2[vertexmove+slicevertexcount];
  229.         newvertices.CopyTo(fullnewvertices,0);
  230.         newuv.CopyTo(fullnewuv,0);
  231.         for (i=0; i<slicevertexcount; i++) {
  232.             fullnewvertices[vertexmove+i]=tempslicevertices[i];
  233.             fullnewuv[vertexmove+i]=tempsliceuvs[i];
  234.         }
  235.         var fullnewtriangles : int[] = new int[newtrianglecount[slicesurfacematerialindex] + (slicevertexcount-2)*3];
  236.         newtriangles[slicesurfacematerialindex].CopyTo(fullnewtriangles,0);
  237.         for (i=1; i<slicevertexcount-1; i++) {
  238.             fullnewtriangles[newtrianglecount[slicesurfacematerialindex]++]=vertexmove;
  239.             fullnewtriangles[newtrianglecount[slicesurfacematerialindex]++]=vertexmove+i;
  240.             fullnewtriangles[newtrianglecount[slicesurfacematerialindex]++]=vertexmove+i+1;
  241.         }
  242.         newmesh.vertices=fullnewvertices;
  243.         for (j=0; j<slicesurfacematerialindex; j++) {
  244.             newmesh.SetTriangles(newtriangles[j],j);
  245.         }
  246.         newmesh.SetTriangles(fullnewtriangles,j); j++;
  247.         for (; j<submeshes; j++) {
  248.             newmesh.SetTriangles(newtriangles[j],j);
  249.         }
  250.         newmesh.uv=fullnewuv;
  251.     } else {
  252.         newmesh.vertices=newvertices;
  253.         for (j=0; j<submeshes; j++) {
  254.             newmesh.SetTriangles(newtriangles[j],j);
  255.         }
  256.         newmesh.uv=newuv;
  257.     }
  258.     newmesh.RecalculateNormals();
  259.     return newmesh;
  260. }
  261.  
  262. function MakeChunk ( mesh : Mesh) : GameObject {
  263.     var newobj : GameObject = Instantiate(ChunkPrefab,transform.parent.position,transform.parent.rotation);
  264.     newobj.GetComponent("MeshFilter").sharedMesh = mesh;
  265.     newobj.GetComponent("MeshCollider").sharedMesh = mesh;
  266.     newobj.GetComponent("MeshRenderer").sharedMaterials = thisMaterials;
  267.     return newobj;
  268. }
  269.  
  270. public function Shatter (rows : int, xcols : int, zcols : int, container : GameObject) {
  271.     var mesh : Mesh = thisMeshfilter.sharedMesh;
  272.     var chunks : GameObject[] = new GameObject[xcols*rows*zcols];
  273.     var rowstep : float = mesh.bounds.size.y/rows;
  274.     var xcolstep : float = mesh.bounds.size.x/xcols;
  275.     var zcolstep : float = mesh.bounds.size.z/zcols;
  276.     var row_x_maxangle : float = Mathf.Atan2(rowstep,mesh.bounds.size.x) * Chaos;
  277.     var row_z_maxangle : float = Mathf.Atan2(rowstep,mesh.bounds.size.z) * Chaos;
  278.     var xcol_y_maxangle : float = Mathf.Atan2(xcolstep,mesh.bounds.size.y) * Chaos;
  279.     var xcol_z_maxangle : float = Mathf.Atan2(xcolstep,mesh.bounds.size.z) * Chaos;
  280.     var zcol_x_maxangle : float = Mathf.Atan2(zcolstep,mesh.bounds.size.x) * Chaos;
  281.     var zcol_y_maxangle : float = Mathf.Atan2(zcolstep,mesh.bounds.size.y) * Chaos;
  282.     var x_max=mesh.bounds.max.x;
  283.     var y_max=mesh.bounds.max.y;
  284.     var z_max=mesh.bounds.max.z;
  285.     for (var yit=1; mesh!=null; yit++) {
  286.         var y=y_max-rowstep*yit;
  287.         var topmesh : Mesh;
  288.         if (yit<rows) {
  289.             var row_x_angle : float=Mathf.Rad2Deg * Mathf.Lerp(-row_x_maxangle,row_x_maxangle,Random.value);
  290.             var row_z_angle : float=Mathf.Rad2Deg * Mathf.Lerp(-row_z_maxangle,row_z_maxangle,Random.value);
  291.             var normal : Vector3 = new Vector3(0,1,0);
  292.             var quat : Quaternion = Quaternion.Euler(row_x_angle,0,row_z_angle);
  293.             normal=quat*normal;
  294.             var slice : Plane = new Plane(normal,Vector3(mesh.bounds.center.x,y,mesh.bounds.center.z));
  295.             topmesh = SliceMesh(mesh,slice);
  296.             if (topmesh) {
  297.                 slice.normal=-slice.normal; slice.distance=-slice.distance;
  298.                 mesh = SliceMesh(mesh,slice);
  299.             }
  300.         } else {
  301.             topmesh = mesh;
  302.             mesh = null;
  303.         }
  304.         if (topmesh) {
  305.             var xmesh : Mesh = topmesh;
  306.             for (var xit=1; xmesh!=null; xit++) {
  307.                 var x=x_max-xcolstep*xit;
  308.                 var leftmesh : Mesh;
  309.                 if (xit<xcols) {
  310.                     var xcol_y_angle : float = Mathf.Rad2Deg * Mathf.Lerp(-xcol_y_maxangle,xcol_y_maxangle,Random.value);
  311.                     var xcol_z_angle : float = Mathf.Rad2Deg * Mathf.Lerp(-xcol_z_maxangle,xcol_z_maxangle,Random.value);
  312.                     var xnormal : Vector3 = new Vector3(1,0,0);
  313.                     var xquat : Quaternion = Quaternion.Euler(0,xcol_y_angle,xcol_z_angle);
  314.                     xnormal = xquat*xnormal;
  315.                     var xslice : Plane = new Plane(xnormal,Vector3(x,xmesh.bounds.center.y,xmesh.bounds.center.z));
  316.                     leftmesh = SliceMesh(xmesh,xslice);
  317.                     if (leftmesh) {
  318.                         xslice.normal=-xslice.normal; xslice.distance=-xslice.distance;
  319.                         xmesh = SliceMesh(xmesh,xslice);
  320.                     }
  321.                 } else {
  322.                     leftmesh = xmesh;
  323.                     xmesh = null;
  324.                 }
  325.                 if (leftmesh) {
  326.                     var zmesh : Mesh = leftmesh;
  327.                     for (var zit=1; zmesh!=null; zit++) {
  328.                         var z=z_max-zcolstep*zit;
  329.                         var backmesh : Mesh;
  330.                         if (zit<zcols) {
  331.                             var zcol_x_angle : float = Mathf.Rad2Deg * Mathf.Lerp(-zcol_x_maxangle,zcol_x_maxangle,Random.value);
  332.                             var zcol_y_angle : float = Mathf.Rad2Deg * Mathf.Lerp(-zcol_y_maxangle,zcol_y_maxangle,Random.value);
  333.                             var znormal : Vector3 = new Vector3(0,0,1);
  334.                             var zquat  : Quaternion = Quaternion.Euler(zcol_x_angle,zcol_y_angle,0);
  335.                             znormal = zquat * znormal;
  336.                             var zslice : Plane = new Plane(znormal,Vector3(zmesh.bounds.center.x,zmesh.bounds.center.y,z));
  337.                             backmesh = SliceMesh(zmesh,zslice);
  338.                             if (backmesh) {
  339.                                 zslice.normal=-zslice.normal; zslice.distance=-zslice.distance;
  340.                                 zmesh = SliceMesh(zmesh,zslice);
  341.                             }
  342.                         } else {
  343.                             backmesh=zmesh;
  344.                             zmesh=null;
  345.                         }
  346.                         if (backmesh) {
  347.                             var newobj : GameObject=MakeChunk(backmesh);
  348.                             chunks[(zit-1)*xcols*rows + (yit-1)*xcols + (xit-1)]=newobj;
  349.                             newobj.transform.parent=container.transform;
  350.                         }
  351.                     }
  352.                 }
  353.             }
  354.         }
  355.     }
  356.     for (xit=0; xit<xcols; xit++) {
  357.         for (yit=0; yit<rows; yit++) {
  358.             for (zit=0; zit<zcols; zit++) {
  359.                 var joint : FixedJoint;
  360.                 if (xit!=0) {
  361.                     joint = chunks[zit*xcols*rows + yit*xcols + xit].AddComponent("FixedJoint");
  362.                     joint.connectedBody=chunks[zit*xcols*rows + yit*xcols + xit-1].rigidbody;
  363.                     joint.breakForce=MyBreakForce;
  364.                     joint.breakTorque=MyBreakForce;
  365.                 }
  366.                 if (yit!=rows-1) {
  367.                     joint = chunks[zit*xcols*rows + yit*xcols + xit].AddComponent("FixedJoint");
  368.                     joint.connectedBody=chunks[zit*xcols*rows + (yit+1)*xcols + xit].rigidbody;
  369.                     joint.breakForce=MyBreakForce;
  370.                     joint.breakTorque=MyBreakForce;
  371.                 } else if (AttachToGround) {
  372.                     joint = chunks[zit*xcols*rows + yit*xcols + xit].AddComponent("FixedJoint");
  373.                     joint.breakForce=MyBreakForce*GroundJoinMultiplier;
  374.                     joint.breakTorque=MyBreakForce*GroundJoinMultiplier;
  375.                 }
  376.                 if (zit!=0) {
  377.                     joint = chunks[zit*xcols*rows + yit*xcols + xit].AddComponent("FixedJoint");
  378.                     joint.connectedBody=chunks[(zit-1)*xcols*rows + yit*xcols + xit].rigidbody;
  379.                     joint.breakForce=MyBreakForce;
  380.                     joint.breakTorque=MyBreakForce;
  381.                 }
  382.             }
  383.         }
  384.     }
  385. }
  386.  
  387.  
  388. function Awake() {
  389.     thisMeshfilter = ReplacementPrefab.GetComponent("MeshFilter");
  390.     thisMaterials = ReplacementPrefab.GetComponent("MeshRenderer").sharedMaterials;
  391.     if (thisMeshfilter==null) {
  392.         Debug.Log("ReplacementPrefab must exist and contain a mesh.");
  393.     }
  394.     if (!ChunkPrefab) {
  395.         Debug.Log("ChunkPrefab needs to be set.");
  396.     }
  397.     if (SliceSurfaceMaterial==null) {
  398.         slicesurfacematerialindex=0;
  399.     } else {
  400.         for (var i : int=0; i<thisMaterials.Length; i++) {
  401.             if (thisMaterials[i]==SliceSurfaceMaterial) {
  402.                 break;
  403.             }
  404.         }
  405.         slicesurfacematerialindex=i;
  406.         if (i>=thisMaterials.Length) {
  407.             var newmaterials=new Material[i+1];
  408.             thisMaterials.CopyTo(newmaterials,0);
  409.             newmaterials[i]=SliceSurfaceMaterial;
  410.             thisMaterials=newmaterials;
  411.         }
  412.     }
  413. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement