Неверный размер коллайдера для процедурной сетки
Я пытаюсь создать простую сетку с помощью кода и пытаюсь дать простому коллайдеру сетки тот же размер, что и для сетки. Я пробовал много разных вещей, однако меш коллайдера всегда кажется больше, чем сам меш. Я действительно смущен, может кто-нибудь решить проблему или указать мне правильное направление? Любая помощь приветствуется.
Вот скриншот того, что происходит:
Также вот код:
public class PolygonGenerator : MonoBehaviour
{
private Mesh mesh;
public List<Vector3> newVertices = new List<Vector3>();
public List<int> newTriangles = new List<int>();
private MeshCollider meshCol;
public List<Vector3> colVertices = new List<Vector3> ();
public List<int> colTriangles = new List<int> ();
float x;
float y;
float z;
// Use this for initialization
void Start ()
{
mesh = GetComponent<MeshFilter> ().mesh;
meshCol = gameObject.AddComponent(typeof(MeshCollider)) as MeshCollider;
meshCol.convex = true;
x = this.gameObject.transform.position.x;
y = this.gameObject.transform.position.y;
z = this.gameObject.transform.position.z;
GenSquare (x, y);
GenCollider (x, y);
UpdateMesh ();
}
void UpdateMesh()
{
mesh.Clear ();
mesh.vertices = newVertices.ToArray();
mesh.triangles = newTriangles.ToArray();
mesh.Optimize ();
mesh.RecalculateNormals ();
Mesh newMesh = new Mesh ();
newMesh.vertices = colVertices.ToArray ();
newMesh.triangles = colTriangles.ToArray ();
meshCol.sharedMesh = newMesh;
}
void GenSquare(float x, float y)
{
newVertices.Add( new Vector3 (x , y , z ));
newVertices.Add( new Vector3 (x + 1 , y , z ));
newVertices.Add( new Vector3 (x + 1 , y-1 , z ));
newVertices.Add( new Vector3 (x , y-1 , z ));
newTriangles.Add(0);
newTriangles.Add(2);
newTriangles.Add(3);
newTriangles.Add(0);
newTriangles.Add(1);
newTriangles.Add(2);
}
void GenCollider( float x, float y)
{
colVertices.Add( new Vector3 (x , y , z));
colVertices.Add( new Vector3 (x + 1 , y , z));
colVertices.Add( new Vector3 (x + 1 , y-1 , z ));
colVertices.Add( new Vector3 (x , y-1 , z ));
colTriangles.Add (0);
colTriangles.Add (2);
colTriangles.Add (3);
colTriangles.Add (0);
colTriangles.Add (1);
colTriangles.Add (2);
}
void OnCollisionEnter(Collision col)
{
Debug.Log("Collision");
}
void OnTriggerEnter(Collider col)
{
Debug.Log ("Trigger");
}
}
1 ответ
Если я не ошибаюсь, вам не нужно создавать коллайдер вручную. Вы должны иметь возможность добавить компонент к игровому объекту, который вы создаете с помощью вашей сетки, и он должен рассчитать коллайдер для вас. Но если вы все еще хотите создать его вручную, я думаю, что коллайдер обычно в 10 раз больше, чем сетка в мировом масштабе. Таким образом, размер коллайдера должен быть разделен на 10.
Это должно исправить это:
void GenCollider( float x, float y)
{
colVertices.Add( new Vector3 (x , y , z));
colVertices.Add( new Vector3 (x + 0.1f , y , z));
colVertices.Add( new Vector3 (x + 0.1f , y-0.1f , z ));
colVertices.Add( new Vector3 (x , y-0.1f , z ));
colTriangles.Add (0);
colTriangles.Add (2);
colTriangles.Add (3);
colTriangles.Add (0);
colTriangles.Add (1);
colTriangles.Add (2);
}
Я не уверен на 100 процентов, поэтому, пожалуйста, дайте мне знать, если вы попробуете.