Search Unity

I'm getting the "noob error"- Nulll Reference [edit] SO CLOSE!!!!

Discussion in 'Scripting' started by keenanwoodall, Jul 29, 2014.

  1. keenanwoodall

    keenanwoodall

    Joined:
    May 30, 2014
    Posts:
    598
    Sooo, I'm not a young nooblet programmer, spamming the forums with the most common error! Just though I'd clear that up :) I've been trying to edit a subdivision script from the unify community so that it can be used in the editor. http://wiki.unity3d.com/index.php/MeshSubdivision I've been changing tons of stuff, trying to make the code look nice while working inside the inspector. The code from the link is pretty messy, which has made it hard for me to rewrite/modify. Anyways, here's my code (Sorry for the huge post)
    Code (js):
    1.  
    2. @CustomEditor (MeshRenderer)
    3. class MeshRendererInspector extends Editor
    4. {
    5.     @HideInInspector
    6.     var buildMesh : boolean = false;
    7.     private var verts : Vector3[];
    8.     private var norms : Vector3[];
    9.     private var uvs : Vector2[];
    10.     private var trigs : int[];
    11.     private var mesh : Mesh;
    12.     private var originalMesh : Mesh;
    13.     //Make a function that replaces the Transform Component in the Inpector
    14.     public function  OnInspectorGUI ()
    15.     {
    16.         GUILayout.BeginVertical();
    17.         DrawDefaultInspector();
    18.         if (GUILayout.Button("Show Mesh Values", GUILayout.Width(150)))
    19.         {
    20.             var selectedObject = Selection.activeGameObject.gameObject.GetComponent(MeshFilter);
    21.             if (selectedObject != null)
    22.             {
    23.                 Debug.Log (Selection.activeTransform.name + " has " + selectedObject.sharedMesh.triangles.Length/3 + " triangles.");
    24.                 Debug.Log (Selection.activeTransform.name + " has " + selectedObject.sharedMesh.vertices.Length + " vertices.");
    25.             }
    26.             else
    27.             {
    28.                 Debug.Log ("This object is either null, or it doesn't have a mesh, or more specifically a Mesh Filter.");
    29.             }
    30.         }
    31.         if (GUILayout.Button("Subdivide-Edge", GUILayout.Width(150)))
    32.         {
    33.             SubdividerAwake ();
    34.             Subdivide (false);
    35.         }
    36.         if (GUILayout.Button("Subdivide-Center", GUILayout.Width(150)))
    37.         {
    38.             SubdividerAwake ();
    39.             Subdivide (true);
    40.         }
    41.         if (GUILayout.Button("Restore Mesh", GUILayout.Width(150)))
    42.         {
    43.             SubdividerAwake ();
    44.             CopyMesh(originalMesh, mesh);
    45.         }
    46.         GUILayout.EndVertical();
    47.     }
    48.     function SubdividerAwake ()
    49.     {
    50.         if (this.gameObject.GetComponent(MeshFilter) == null)
    51.         {
    52.             buildMesh = true;
    53.             this.gameObject.AddComponent(MeshFilter);
    54.         }
    55.         if(this.gameObject.GetComponent(MeshRenderer) == null)
    56.         {
    57.             this.gameObject.AddComponent(MeshRenderer);
    58.         }
    59.         UpdateMesh ();
    60.         if (buildMesh)
    61.         {
    62.             verts = [Vector3(0,-1,0),Vector3(1,1,0),Vector3(-1,1,0),Vector3 (0,1,-1)];
    63.             uvs = [Vector2(0,0),Vector2(0,1),Vector2(1,0),Vector2(0,0)];
    64.             trigs = [0,1,2,1,3,2];
    65.             ApplyMesh();
    66.             mesh.RecalculateNormals();
    67.         }
    68.         originalMesh = new Mesh();
    69.         CopyMesh(mesh, originalMesh);
    70.     }
    71.     function Subdivide (center : boolean)
    72.     {
    73.         verts = mesh.vertices;
    74.         trigs = mesh.triangles;
    75.         uvs = mesh.uv;
    76.         norms = mesh.normals;
    77.      
    78.         var nv = new Array(verts);
    79.         var nt = new Array(trigs);
    80.         var nu = new Array(uvs);
    81.         var nn = new Array(norms);
    82.      
    83.         if (!center)
    84.         {
    85.             for (var i : int = 2; i < trigs.length; i += 3)
    86.             {
    87.                 var p0trigwho : int = trigs [i-2];
    88.                 var p1trigwho : int = trigs [i-1];
    89.                 var p2trigwho : int = trigs [i];
    90.                 var p0trigwhere : int = i-2;
    91.                 var p1trigwhere : int = i-1;
    92.                 var p2trigwhere : int = i;
    93.                 var p0 : Vector3 = verts [p0trigwho];
    94.                 var p1 : Vector3 = verts [p1trigwho];
    95.                 var p2 : Vector3 = verts [p2trigwho];
    96.                 var pn0 : Vector3 = norms [p0trigwho];
    97.                 var pn1 : Vector3 = norms [p1trigwho];
    98.                 var pn2 : Vector3 = norms [p2trigwho];
    99.                 var pu0 : Vector2 = uvs [p0trigwho];
    100.                 var pu1 : Vector2 = uvs [p1trigwho];
    101.                 var pu2 : Vector2 = uvs [p2trigwho];
    102.                 var p0mod : Vector3 = (p0+p1)/2;
    103.                 var p1mod : Vector3 = (p1+p2)/2;
    104.                 var p2mod : Vector3 = (p0+p2)/2;
    105.                 var pn0mod : Vector3 = ((pn0+pn1)/2).normalized;
    106.                 var pn1mod : Vector3 = ((pn1+pn2)/2).normalized;
    107.                 var pn2mod : Vector3 = ((pn0+pn2)/2).normalized;
    108.                 var pu0mod : Vector2 = (pu0+pu1)/2;
    109.                 var pu1mod : Vector2 = (pu1+pu2)/2;
    110.                 var pu2mod : Vector2 = (pu0+pu2)/2;
    111.                 var p0modtrigwho = nv.length;
    112.                 var p1modtrigwho = nv.length+1;
    113.                 var p2modtrigwho = nv.length+2;
    114.                 nv.push(p0mod);
    115.                 nv.push(p1mod);
    116.                 nv.push(p2mod);
    117.                 nn.push(pn0mod);
    118.                 nn.push(pn1mod);
    119.                 nn.push(pn2mod);
    120.                 nu.push(pu0mod);
    121.                 nu.push(pu1mod);
    122.                 nu.push(pu2mod);
    123.                 nt[p0trigwhere] = p0trigwho;
    124.                 nt[p1trigwhere] = p0modtrigwho;
    125.                 nt[p2trigwhere] = p2modtrigwho;
    126.                 nt.push(p0modtrigwho);
    127.                 nt.push(p1modtrigwho);
    128.                 nt.push(p2modtrigwho);
    129.                 nt.push(p0modtrigwho);
    130.                 nt.push(p1trigwho);
    131.                 nt.push(p1modtrigwho);
    132.                 nt.push(p2modtrigwho);
    133.                 nt.push(p1modtrigwho);
    134.                 nt.push(p2trigwho);
    135.             }
    136.         }
    137.         else
    138.         {
    139.             for(var ii : int = 2; ii < trigs.length; ii += 3)
    140.             {
    141.                 var p0trigwhomi : int = trigs[ii-2];
    142.                 var p1trigwhomi : int = trigs[ii-1];
    143.                 var p2trigwhomi : int = trigs[ii];
    144.                 var p0trigwheremi : int = ii-2;
    145.                 var p1trigwheremi : int = ii-1;
    146.                 var p2trigwheremi : int = ii;
    147.                 var p0mi : Vector3 = verts [p0trigwhomi];
    148.                 var p1mi : Vector3 = verts [p1trigwhomi];
    149.                 var p2mi : Vector3 = verts [p2trigwhomi];
    150.                 var p0mn : Vector3 = norms [p0trigwhomi];
    151.                 var p1mn : Vector3 = norms [p1trigwhomi];
    152.                 var p2mn : Vector3 = norms [p2trigwhomi];
    153.                 var p0mu : Vector2 = uvs [p0trigwhomi];
    154.                 var p1mu : Vector2 = uvs [p1trigwhomi];
    155.                 var p2mu : Vector2 = uvs [p2trigwhomi];
    156.                 var p0modmi : Vector3 = (p0mi+p1mi+p2mi)/3;
    157.                 var p0modmn : Vector3 = ((p0mn+p1mn+p2mn)/3).normalized;
    158.                 var p0modmu : Vector2 = (p0mu+p1mu+p2mu)/3;
    159.                 var p0modtrigwhomi = nv.length;
    160.                 nv.push(p0modmi);
    161.                 nn.push(p0modmn);
    162.                 nu.push(p0modmu);
    163.                 nt [p0trigwheremi] = p0trigwhomi;
    164.                 nt [p1trigwheremi] = p1trigwhomi;
    165.                 nt [p2trigwheremi] = p0modtrigwhomi;
    166.                 nt.push(p0modtrigwhomi);
    167.                 nt.push(p1trigwhomi);
    168.                 nt.push(p2trigwhomi);
    169.                 nt.push(p0trigwhomi);
    170.                 nt.push(p0modtrigwhomi);
    171.                 nt.push(p2trigwhomi);
    172.             }
    173.         }
    174.         verts = nv.ToBuiltin(Vector3);
    175.         norms = nn.ToBuiltin(Vector3);
    176.         uvs = nu.ToBuiltin(Vector2);
    177.         trigs = nt.ToBuiltin(int);
    178.         ApplyMesh ();
    179.     }
    180.     function ApplyUvs ()
    181.     {
    182.         uvs = new Vector2 [verts.length];
    183.         for (var i : int = 0; i < verts.length; i++)
    184.         {
    185.             uvs[i] = Vector2 (verts[i].x, verts[i].y);
    186.         }
    187.     }
    188.     function UpdateMesh ()
    189.     {
    190.         mesh = this.gameObject.GetComponent(MeshFilter).mesh;
    191.     }
    192.     function ApplyMesh ()
    193.     {
    194.         if(verts.length > 65000)
    195.         {
    196.             Debug.Log("Exiting... Too many vertices");
    197.             return;
    198.         }
    199.         mesh.Clear();
    200.         mesh.vertices = verts;
    201.         mesh.uv = uvs;
    202.      
    203.         if(mesh.uv2 != null)
    204.         {
    205.             mesh.uv2 = uvs;
    206.         }
    207.         mesh.normals = norms;
    208.         mesh.triangles = trigs;
    209.         mesh.RecalculateBounds();
    210.         if(this.gameObject.GetComponent(MeshCollider) != null)
    211.         {
    212.             this.gameObject.GetComponent(MeshCollider).sharedMesh = mesh;
    213.         }
    214.         UpdateMesh ();
    215.     }
    216.     function CopyMesh (fromMesh : Mesh, toMesh : Mesh)
    217.     {
    218.         toMesh.Clear();
    219.         toMesh.vertices = fromMesh.vertices;
    220.         toMesh.normals = fromMesh.normals;
    221.         toMesh.uv = fromMesh.uv;
    222.         toMesh.triangles = fromMesh.triangles;
    223.     }
    224. }
    And here's my errors:
    ---------------------------------------------------------------------------------------------------------------------------------------------
    -When I click "Subdivide-Edge" button

    NullReferenceException: Object reference not set to an instance of an object
    Boo.Lang.Runtime.RuntimeServices.GetDispatcher (System.Object target, System.String cacheKeyName, System.Type[] cacheKeyTypes, Boo.Lang.Runtime.DynamicDispatching.DispatcherFactory factory)
    Boo.Lang.Runtime.RuntimeServices.GetDispatcher (System.Object target, System.Object[] args, System.String cacheKeyName, Boo.Lang.Runtime.DynamicDispatching.DispatcherFactory factory)
    Boo.Lang.Runtime.RuntimeServices.Invoke (System.Object target, System.String name, System.Object[] args)
    UnityScript.Lang.UnityRuntimeServices.Invoke (System.Object target, System.String name, System.Object[] args, System.Type scriptBaseType)
    MeshRendererInspector.SubdividerAwake () (at Assets/Editor/KeenansCoolToolsScripts/KeenansCoolInspectorScripts/KeenansCoolMeshStuff.js:64)
    MeshRendererInspector.OnInspectorGUI () (at Assets/Editor/KeenansCoolToolsScripts/KeenansCoolInspectorScripts/KeenansCoolMeshStuff.js:47)
    UnityEditor.InspectorWindow.DrawEditor (UnityEditor.Editor editor, Int32 editorIndex, Boolean forceDirty, System.Boolean& showImportedObjectBarNext, UnityEngine.Rect& importedObjectBarRect, Boolean eyeDropperDirty) (at C:/BuildAgent/work/d63dfc6385190b60/Editor/Mono/Inspector/InspectorWindow.cs:1124)
    UnityEditor.DockArea:OnGUI()
    ---------------------------------------------------------------------------------------------------------------------------------------------
    When I click "Subdivide-Center":

    NullReferenceException: Object reference not set to an instance of an object
    Boo.Lang.Runtime.RuntimeServices.GetDispatcher (System.Object target, System.String cacheKeyName, System.Type[] cacheKeyTypes, Boo.Lang.Runtime.DynamicDispatching.DispatcherFactory factory)
    Boo.Lang.Runtime.RuntimeServices.GetDispatcher (System.Object target, System.Object[] args, System.String cacheKeyName, Boo.Lang.Runtime.DynamicDispatching.DispatcherFactory factory)
    Boo.Lang.Runtime.RuntimeServices.Invoke (System.Object target, System.String name, System.Object[] args)
    UnityScript.Lang.UnityRuntimeServices.Invoke (System.Object target, System.String name, System.Object[] args, System.Type scriptBaseType)
    MeshRendererInspector.SubdividerAwake () (at Assets/Editor/KeenansCoolToolsScripts/KeenansCoolInspectorScripts/KeenansCoolMeshStuff.js:64)
    MeshRendererInspector.OnInspectorGUI () (at Assets/Editor/KeenansCoolToolsScripts/KeenansCoolInspectorScripts/KeenansCoolMeshStuff.js:52)
    UnityEditor.InspectorWindow.DrawEditor (UnityEditor.Editor editor, Int32 editorIndex, Boolean forceDirty, System.Boolean& showImportedObjectBarNext, UnityEngine.Rect& importedObjectBarRect, Boolean eyeDropperDirty) (at C:/BuildAgent/work/d63dfc6385190b60/Editor/Mono/Inspector/InspectorWindow.cs:1124)
    UnityEditor.DockArea:OnGUI()
    ---------------------------------------------------------------------------------------------------------------------------------------------
    When I click "Restore Mesh":
    NullReferenceException: Object reference not set to an instance of an object
    Boo.Lang.Runtime.RuntimeServices.GetDispatcher (System.Object target, System.String cacheKeyName, System.Type[] cacheKeyTypes, Boo.Lang.Runtime.DynamicDispatching.DispatcherFactory factory)
    Boo.Lang.Runtime.RuntimeServices.GetDispatcher (System.Object target, System.Object[] args, System.String cacheKeyName, Boo.Lang.Runtime.DynamicDispatching.DispatcherFactory factory)
    Boo.Lang.Runtime.RuntimeServices.Invoke (System.Object target, System.String name, System.Object[] args)
    UnityScript.Lang.UnityRuntimeServices.Invoke (System.Object target, System.String name, System.Object[] args, System.Type scriptBaseType)
    MeshRendererInspector.SubdividerAwake () (at Assets/Editor/KeenansCoolToolsScripts/KeenansCoolInspectorScripts/KeenansCoolMeshStuff.js:64)
    MeshRendererInspector.OnInspectorGUI () (at Assets/Editor/KeenansCoolToolsScripts/KeenansCoolInspectorScripts/KeenansCoolMeshStuff.js:57)
    UnityEditor.InspectorWindow.DrawEditor (UnityEditor.Editor editor, Int32 editorIndex, Boolean forceDirty, System.Boolean& showImportedObjectBarNext, UnityEngine.Rect& importedObjectBarRect, Boolean eyeDropperDirty) (at C:/BuildAgent/work/d63dfc6385190b60/Editor/Mono/Inspector/InspectorWindow.cs:1124)
    UnityEditor.DockArea:OnGUI()
    ---------------------------------------------------------------------------------------------------------------------------------------------
     
  2. keenanwoodall

    keenanwoodall

    Joined:
    May 30, 2014
    Posts:
    598
    Wtf is wrong with
    Code (js):
    1.  
    2. if (this.gameObject.GetComponent(MeshFilter) == null)
    3. {
    4.     buildMesh = true;
    5.     this.gameObject.AddComponent(MeshFilter);
    6. }
    Thats where my first error takes me too!
     
  3. keenanwoodall

    keenanwoodall

    Joined:
    May 30, 2014
    Posts:
    598
    OK, so what PART of the problem was, is that saying "this.gameObject.GetComponent(blahblahblah)" wouldn't work...For a good reason! My new Inspector script isn't applied to any object as a component, it edits the MeshRenderer. So, I had to replace "this.gameObject.GetComponent()" with "Selection.activeGameObject.GetComponent." Now it will subdivide the mesh, but I still get errors and I can't restore the mesh to its original form. I'm almost there guys!
    Here's the error I gwt when I click "Subdivide-Edge"

    Instantiating mesh due to calling MeshFilter.mesh during edit mode. This will leak meshes. Please use MeshFilter.sharedMesh instead.
    UnityEngine.MeshFilter:get_mesh()
    MeshRendererInspector:UpdateMesh() (at Assets/Editor/KeenansCoolToolsScripts/KeenansCoolInspectorScripts/KeenansCoolMeshStuff.js:204)
    MeshRendererInspector:SubdividerAwake() (at Assets/Editor/KeenansCoolToolsScripts/KeenansCoolInspectorScripts/KeenansCoolMeshStuff.js:73)
    MeshRendererInspector:OnInspectorGUI() (at Assets/Editor/KeenansCoolToolsScripts/KeenansCoolInspectorScripts/KeenansCoolMeshStuff.js:47)
    UnityEditor.DockArea:OnGUI()
     
  4. StarManta

    StarManta

    Joined:
    Oct 23, 2006
    Posts:
    8,775
    Have you tried using .sharedMesh instead?
     
  5. keenanwoodall

    keenanwoodall

    Joined:
    May 30, 2014
    Posts:
    598
    So, I had to make mesh = blahblah.sharedMesh. that fixed the error, but it permanently sets the mesh to the subdivided mesh! Now if I click GameObject/CreateOther/Cube, if I had subdivided that cube earlier, then deleted it, creating it again will ersult in the same, high poly mesh being recreated! How would I get around this? Also, this may be related, but the RestoreMesh button isn't working. There are no errors, but it doesn't do anything
     
  6. keenanwoodall

    keenanwoodall

    Joined:
    May 30, 2014
    Posts:
    598
    Yeah, I just figured it out before I saw you comment :)
     
  7. keenanwoodall

    keenanwoodall

    Joined:
    May 30, 2014
    Posts:
    598
    Ok so, to restore the mesh to its original form, the original script made a variable that stored the mesh on the Awake function. I can't call an Awake-like function from the inspector can I? If not, then how can I save the mesh without overwriting it every time a subdivide button is pressed? It would have to be based off of that because, without a start or awake function, there's no way to call one...right? Btw, here's my most current code:
    Code (js):
    1.  
    2. @CustomEditor (MeshRenderer)
    3. class MeshRendererInspector extends Editor
    4. {
    5.     @HideInInspector
    6.     var buildMesh : boolean = false;
    7.     private var verts : Vector3[];
    8.     private var norms : Vector3[];
    9.     private var uvs : Vector2[];
    10.     private var trigs : int[];
    11.     private var mesh : Mesh;
    12.     private var originalMesh : Mesh;
    13.     //Make a function that replaces the Transform Component in the Inpector
    14.     public function  OnInspectorGUI ()
    15.     {
    16.         GUILayout.BeginVertical();
    17.         DrawDefaultInspector();
    18.         if (GUILayout.Button("Show Mesh Values", GUILayout.Width(150)))
    19.         {
    20.             var selectedObject = Selection.activeGameObject.gameObject.GetComponent(MeshFilter);
    21.             if (selectedObject != null)
    22.             {
    23.                 Debug.Log (Selection.activeTransform.name + " has " + selectedObject.sharedMesh.triangles.Length/3 + " triangles.");
    24.                 Debug.Log (Selection.activeTransform.name + " has " + selectedObject.sharedMesh.vertices.Length + " vertices.");
    25.             }
    26.             else
    27.             {
    28.                 Debug.Log ("This object is either null, or it doesn't have a mesh, or more specifically a Mesh Filter.");
    29.             }
    30.         }
    31.         if (GUILayout.Button("Subdivide-Edge", GUILayout.Width(150)))
    32.         {
    33.             SubdividerAwake ();
    34.             Subdivide (false);
    35.         }
    36.         if (GUILayout.Button("Subdivide-Center", GUILayout.Width(150)))
    37.         {
    38.             SubdividerAwake ();
    39.             Subdivide (true);
    40.         }
    41.         if (GUILayout.Button("Restore Mesh", GUILayout.Width(150)))
    42.         {
    43.             CopyMesh(originalMesh, mesh);
    44.         }
    45.         GUILayout.EndVertical();
    46.     }
    47.     function SubdividerAwake ()
    48.     {
    49.         UpdateMesh ();
    50.         if (buildMesh)
    51.         {
    52.             verts = [Vector3(0,-1,0),Vector3(1,1,0),Vector3(-1,1,0),Vector3 (0,1,-1)];
    53.             uvs = [Vector2(0,0),Vector2(0,1),Vector2(1,0),Vector2(0,0)];
    54.             trigs = [0,1,2,1,3,2];
    55.             ApplyMesh();
    56.             mesh.RecalculateNormals();
    57.         }
    58.         originalMesh = new Mesh();
    59.         CopyMesh(mesh, originalMesh);
    60.     }
    61.     function Subdivide (center : boolean)
    62.     {
    63.         verts = mesh.vertices;
    64.         trigs = mesh.triangles;
    65.         uvs = mesh.uv;
    66.         norms = mesh.normals;
    67.        
    68.         var nv = new Array(verts);
    69.         var nt = new Array(trigs);
    70.         var nu = new Array(uvs);
    71.         var nn = new Array(norms);
    72.        
    73.         if (!center)
    74.         {
    75.             for (var i : int = 2; i < trigs.length; i += 3)
    76.             {
    77.                 var p0trigwho : int = trigs [i-2];
    78.                 var p1trigwho : int = trigs [i-1];
    79.                 var p2trigwho : int = trigs [i];
    80.                 var p0trigwhere : int = i-2;
    81.                 var p1trigwhere : int = i-1;
    82.                 var p2trigwhere : int = i;
    83.                 var p0 : Vector3 = verts [p0trigwho];
    84.                 var p1 : Vector3 = verts [p1trigwho];
    85.                 var p2 : Vector3 = verts [p2trigwho];
    86.                 var pn0 : Vector3 = norms [p0trigwho];
    87.                 var pn1 : Vector3 = norms [p1trigwho];
    88.                 var pn2 : Vector3 = norms [p2trigwho];
    89.                 var pu0 : Vector2 = uvs [p0trigwho];
    90.                 var pu1 : Vector2 = uvs [p1trigwho];
    91.                 var pu2 : Vector2 = uvs [p2trigwho];
    92.                 var p0mod : Vector3 = (p0+p1)/2;  
    93.                 var p1mod : Vector3 = (p1+p2)/2;
    94.                 var p2mod : Vector3 = (p0+p2)/2;
    95.                 var pn0mod : Vector3 = ((pn0+pn1)/2).normalized;  
    96.                 var pn1mod : Vector3 = ((pn1+pn2)/2).normalized;
    97.                 var pn2mod : Vector3 = ((pn0+pn2)/2).normalized;
    98.                 var pu0mod : Vector2 = (pu0+pu1)/2;  
    99.                 var pu1mod : Vector2 = (pu1+pu2)/2;
    100.                 var pu2mod : Vector2 = (pu0+pu2)/2;
    101.                 var p0modtrigwho = nv.length;
    102.                 var p1modtrigwho = nv.length+1;
    103.                 var p2modtrigwho = nv.length+2;
    104.                 nv.push(p0mod);
    105.                 nv.push(p1mod);
    106.                 nv.push(p2mod);
    107.                 nn.push(pn0mod);
    108.                 nn.push(pn1mod);
    109.                 nn.push(pn2mod);
    110.                 nu.push(pu0mod);
    111.                 nu.push(pu1mod);
    112.                 nu.push(pu2mod);
    113.                 nt[p0trigwhere] = p0trigwho;
    114.                 nt[p1trigwhere] = p0modtrigwho;
    115.                 nt[p2trigwhere] = p2modtrigwho;
    116.                 nt.push(p0modtrigwho);
    117.                 nt.push(p1modtrigwho);
    118.                 nt.push(p2modtrigwho);
    119.                 nt.push(p0modtrigwho);
    120.                 nt.push(p1trigwho);
    121.                 nt.push(p1modtrigwho);
    122.                 nt.push(p2modtrigwho);
    123.                 nt.push(p1modtrigwho);
    124.                 nt.push(p2trigwho);
    125.             }
    126.         }
    127.         else
    128.         {
    129.             for(var ii : int = 2; ii < trigs.length; ii += 3)
    130.             {
    131.                 var p0trigwhomi : int = trigs[ii-2];
    132.                 var p1trigwhomi : int = trigs[ii-1];
    133.                 var p2trigwhomi : int = trigs[ii];
    134.                 var p0trigwheremi : int = ii-2;
    135.                 var p1trigwheremi : int = ii-1;
    136.                 var p2trigwheremi : int = ii;
    137.                 var p0mi : Vector3 = verts [p0trigwhomi];
    138.                 var p1mi : Vector3 = verts [p1trigwhomi];
    139.                 var p2mi : Vector3 = verts [p2trigwhomi];
    140.                 var p0mn : Vector3 = norms [p0trigwhomi];
    141.                 var p1mn : Vector3 = norms [p1trigwhomi];
    142.                 var p2mn : Vector3 = norms [p2trigwhomi];
    143.                 var p0mu : Vector2 = uvs [p0trigwhomi];
    144.                 var p1mu : Vector2 = uvs [p1trigwhomi];
    145.                 var p2mu : Vector2 = uvs [p2trigwhomi];
    146.                 var p0modmi : Vector3 = (p0mi+p1mi+p2mi)/3;
    147.                 var p0modmn : Vector3 = ((p0mn+p1mn+p2mn)/3).normalized;
    148.                 var p0modmu : Vector2 = (p0mu+p1mu+p2mu)/3;  
    149.                 var p0modtrigwhomi = nv.length;
    150.                 nv.push(p0modmi);
    151.                 nn.push(p0modmn);
    152.                 nu.push(p0modmu);
    153.                 nt [p0trigwheremi] = p0trigwhomi;
    154.                 nt [p1trigwheremi] = p1trigwhomi;
    155.                 nt [p2trigwheremi] = p0modtrigwhomi;
    156.                 nt.push(p0modtrigwhomi);
    157.                 nt.push(p1trigwhomi);
    158.                 nt.push(p2trigwhomi);
    159.                 nt.push(p0trigwhomi);
    160.                 nt.push(p0modtrigwhomi);
    161.                 nt.push(p2trigwhomi);
    162.             }
    163.         }
    164.         verts = nv.ToBuiltin(Vector3);
    165.         norms = nn.ToBuiltin(Vector3);
    166.         uvs = nu.ToBuiltin(Vector2);
    167.         trigs = nt.ToBuiltin(int);
    168.         ApplyMesh ();
    169.     }
    170.     function ApplyUvs ()
    171.     {
    172.         uvs = new Vector2 [verts.length];
    173.         for (var i : int = 0; i < verts.length; i++)
    174.         {
    175.             uvs[i] = Vector2 (verts[i].x, verts[i].y);
    176.         }
    177.     }
    178.     function UpdateMesh ()
    179.     {
    180.         mesh = Selection.activeGameObject.GetComponent(MeshFilter).sharedMesh;
    181.     }
    182.     function ApplyMesh ()
    183.     {
    184.         if(verts.length > 65000)
    185.         {
    186.             Debug.Log("Exiting... Too many vertices");
    187.             return;
    188.         }
    189.         mesh.Clear();
    190.         mesh.vertices = verts;
    191.         mesh.uv = uvs;
    192.        
    193.         if(mesh.uv2 != null)
    194.         {
    195.             mesh.uv2 = uvs;
    196.         }
    197.         mesh.normals = norms;
    198.         mesh.triangles = trigs;
    199.         mesh.RecalculateBounds();
    200.         if(Selection.activeGameObject.GetComponent(MeshCollider) != null)
    201.         {
    202.             this.gameObject.GetComponent(MeshCollider).sharedMesh = mesh;
    203.         }
    204.         UpdateMesh ();
    205.     }
    206.     function CopyMesh (fromMesh : Mesh, toMesh : Mesh)
    207.     {
    208.         toMesh.Clear();
    209.         toMesh.vertices = fromMesh.vertices;
    210.         toMesh.normals = fromMesh.normals;
    211.         toMesh.uv = fromMesh.uv;
    212.         toMesh.triangles = fromMesh.triangles;
    213.     }
    214. }
     
  8. hpjohn

    hpjohn

    Joined:
    Aug 14, 2012
    Posts:
    2,190
    Editors call an "OnEnable" i believe (instead of awake)
     
  9. keenanwoodall

    keenanwoodall

    Joined:
    May 30, 2014
    Posts:
    598
    thanks a bunch, I'll try it out now
     
  10. keenanwoodall

    keenanwoodall

    Joined:
    May 30, 2014
    Posts:
    598
    Soo, now when I click on one of the buttons to subdivide a mesh, it subdivides, but gives me a Null Ref error again for this line -
    Code (js):
    1.  
    2. function ApplyMesh ()
    3.     {
    4.         if(verts.length > 65000)
    5.         {
    6.             Debug.Log("Exiting... Too many vertices");
    7.             return;
    8.         }
    9.         mesh.Clear();
    10.         mesh.vertices = verts;
    11.         mesh.uv = uvs;
    12.        
    13.         if(mesh.uv2 != null)
    14.         {
    15.             mesh.uv2 = uvs;
    16.         }
    17.         mesh.normals = norms;
    18.         mesh.triangles = trigs;
    19.         mesh.RecalculateBounds();
    20.         if(Selection.activeGameObject.GetComponent(MeshCollider) != null)
    21.         {
    22.             //The line below this comment
    23.             this.gameObject.GetComponent(MeshCollider).sharedMesh = mesh;
    24.         }
    25.         UpdateMesh ();
    26.     }
     
  11. hpjohn

    hpjohn

    Joined:
    Aug 14, 2012
    Posts:
    2,190
  12. keenanwoodall

    keenanwoodall

    Joined:
    May 30, 2014
    Posts:
    598
    thanks
     
  13. keenanwoodall

    keenanwoodall

    Joined:
    May 30, 2014
    Posts:
    598
    Do you know how I can get the restore mesh button to work? Because right now it permanently changes the mesh. If I want to create a sphere object with the normal poly amount, I have to restart unity