2015-05-08 2 views
0

В настоящее время пытается работать над сценарием, позволяющим шару наносить ущерб сетчатой ​​сетке, когда она проходит через уровень. Проблема в том, что у меня возникли проблемы с поиском правильного уравнения для перемещения вершин.Mesh Filter Cosmetic Damage

Вот что я 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; 
    } 
} 
+0

Вы можете проверить параметры для этого 'Reflect' вызова. Является ли игра 2D или 3D в природе? Если ваше движение в основном 2D, соответствующее 'collision.relativeVelocity' будет стремиться ограничить ваш выход. – rutter

+0

Этот скрипт управляет трехмерной сеткой. Сам геймплей 2D-ish http://gyazo.com/96f472dc6bfcbc8893290ccf6b4c16e6 –

ответ

0

Цитируется: http://answers.unity3d.com/questions/962794/mesh-collision-damage.html#answer-966389

Я хотел бы предложить два варианта:

Используйте случайная деформация как:

meshCoordinates[lastIndex] += new Vector3(Random.Range(-DeformScale,DeformScale), 

Random.Range (-DeformScale, DeformScale), Random.Range (-DeformScale, DeformScale));

Dent внутрь смещая вершину, обратное нормальное, как:

meshCoordinates[lastIndex] -= meshCoordinates[lastIndex].normalized * DeformScale;