- Home /
Mesh Filter Cosmetic Damage
Presently trying to work on a script that allows a ball to take cosmetic mesh damage as it goes through a level. Problem is, Ive been having trouble finding the proper equation for moving the vertexs.
Heres what I have thusfar
 using System;
 using System.Collections.Generic;
 using System.Linq;
 using System.Text;
 using UnityEngine;
 
 public class MeshDenter : MonoBehaviour {
     Vector3[] originalMesh;
     public float dentFactor;
     public LayerMask collisionMask;
     private MeshFilter meshFilter;
     void Start() {
         meshFilter = GetComponent<MeshFilter>();
         originalMesh = meshFilter.mesh.vertices;
     }
 
     void OnCollisionEnter(Collision collision) {
         Vector3[] meshCoordinates = originalMesh;
         // Loop through collision points
         foreach (ContactPoint point in collision.contacts) {
             // Index with the closest distance to point.
             int lastIndex = 0;
             // Loop through mesh coordinates
             for (int i = 0; i < meshCoordinates.Length; i++) {
                 // Check to see if there is a closer index
                 if (Vector3.Distance(point.point, meshCoordinates[i])
                     < Vector3.Distance(point.point, meshCoordinates[lastIndex])) {
                     // Set the new index
                     lastIndex = i;
                 }
             }
             // Move the vertex
             meshCoordinates[lastIndex] += /*Insert Rest Of Equation Here*/;
         }
         meshFilter.mesh.vertices = meshCoordinates;
     }
 
     void Reset() {
         meshFilter.mesh.vertices = originalMesh;
     }
 }
Answer by FortisVenaliter · May 13, 2015 at 09:22 PM
I would suggest two options:
- Use a random deformation like: - meshCoordinates[lastIndex] += new Vector3(Random.Range(-DeformScale,DeformScale), Random.Range(-DeformScale,DeformScale), Random.Range(-DeformScale,DeformScale)); 
- Dent inwards by offsetting the vertex by the inverse normal like: - meshCoordinates[lastIndex] -= meshCoordinates[lastIndex].normalized * DeformScale; 
Your answer
 
 
             Follow this Question
Related Questions
Collision detection from specific directions using rigid body character? 0 Answers
Check if other object has fired a Collision Event 2 Answers
Force a script generated primitive to test for collision 2 Answers
Velocity data from OnCollisionEnter is delayed (incorrect) 3 Answers
Collision triggers do not work on child gameobject 3 Answers
 koobas.hobune.stream
koobas.hobune.stream 
                       
                
                       
			     
			 
                