- 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