Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using UnityEngine;
- public class VehicleDamage : MonoBehaviour {
- public MeshFilter filter;
- private Mesh mesh;
- private Ray raycast;
- private RaycastHit hit;
- private void Start() {
- mesh = Instantiate<Mesh>(filter.sharedMesh);
- filter.mesh = mesh;
- mesh.Optimize();
- }
- private void OnCollisionEnter(Collision collision) {
- foreach(var contact in collision.contacts) {
- Deform(contact.point);
- }
- }
- private void Deform(Vector3 pos) {
- var verts = mesh.vertices;
- for(int i = 0; i < verts.Length; i++) {
- var scaledVert = Vector3.Scale(verts[i], transform.localScale);
- var vertWorldPos = filter.transform.position + filter.transform.rotation * scaledVert;
- var origin = vertWorldPos - pos;
- var flatVertToCenterDir = transform.position - vertWorldPos;
- flatVertToCenterDir.y = 0f;
- if(origin.sqrMagnitude < 0.7f * 0.7f) {
- var dist = Mathf.Clamp01(origin.sqrMagnitude / 0.7f * 0.7f);
- var moveDir = Vector3.Slerp(origin, flatVertToCenterDir, 1f).normalized;
- verts[i] += Quaternion.Inverse(transform.rotation) * moveDir;
- }
- }
- mesh.vertices = verts;
- mesh.RecalculateNormals();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement