目前,试图工作的脚本,允许一个球采取化妆品网眼的损害,因为它通过一个水平。问题是,我一直很难找到移动顶点的合适方程。
这是我现在所拥有的
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;
}
}
发布于 2015-05-15 17:52:25
引用自:http://answers.unity3d.com/questions/962794/mesh-collision-damage.html#answer-966389
我建议两种选择: 使用随机变形,例如: meshCoordinateslastIndex +=新Vector3(Random.Range(-DeformScale,DeformScale), Random.Range(-DeformScale,DeformScale),Random.Range(-DeformScale,DeformScale); 用逆法向内偏移顶点: meshCoordinateslastIndex -= meshCoordinateslastIndex.normalized * DeformScale;
https://stackoverflow.com/questions/30132101
复制相似问题