Advertisement
Muk99

MeshDeformation

Oct 6th, 2015
116
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 1.33 KB | None | 0 0
  1. using UnityEngine;
  2.  
  3. public class VehicleDamage : MonoBehaviour {
  4.  
  5.     public MeshFilter filter;
  6.     private Mesh mesh;
  7.     private Ray raycast;
  8.     private RaycastHit hit;
  9.  
  10.     private void Start() {
  11.         mesh = Instantiate<Mesh>(filter.sharedMesh);
  12.         filter.mesh = mesh;
  13.         mesh.Optimize();
  14.     }
  15.  
  16.     private void OnCollisionEnter(Collision collision) {
  17.  
  18.         foreach(var contact in collision.contacts) {
  19.             Deform(contact.point);
  20.         }
  21.     }
  22.  
  23.     private void Deform(Vector3 pos) {
  24.         var verts = mesh.vertices;
  25.         for(int i = 0; i < verts.Length; i++) {
  26.             var scaledVert = Vector3.Scale(verts[i], transform.localScale);
  27.             var vertWorldPos = filter.transform.position + filter.transform.rotation * scaledVert;
  28.             var origin = vertWorldPos - pos;
  29.             var flatVertToCenterDir = transform.position - vertWorldPos;
  30.             flatVertToCenterDir.y = 0f;
  31.             if(origin.sqrMagnitude < 0.7f * 0.7f) {
  32.                 var dist = Mathf.Clamp01(origin.sqrMagnitude / 0.7f * 0.7f);
  33.                 var moveDir = Vector3.Slerp(origin, flatVertToCenterDir, 1f).normalized;
  34.                 verts[i] += Quaternion.Inverse(transform.rotation) * moveDir;
  35.             }
  36.         }
  37.         mesh.vertices = verts;
  38.         mesh.RecalculateNormals();
  39.     }
  40. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement