How can I remove shooted mesh of object?
Hello, I am trying to write a script for removing shooted mesh of object (triangle) by mouse click.
There is a two approach that came up to my mind.
First one is modelling main game object with little cube objects which I can easily destroy when one of them shooted. However I want to learn mesh scripting a little bit, so this method is my last option.
Second one is, writing a mesh script which detects nearest vertices to mouse cursor and then remove them from triangles array of mesh. Here is the code that I wrote.
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using System;
public class beardScript : MonoBehaviour
{
Mesh mesh;
Vector3[] vertices;
List<int> indices;
Vector2[] uv;
// Use this for initialization
void Start()
{
mesh = GetComponent<MeshFilter>().mesh;
vertices = mesh.vertices;
indices = new List<int>(mesh.triangles);
uv= mesh.uv;
}
// Update is called once per frame
void Update()
{
if (Input.GetMouseButtonDown(0))
{
RaycastHit hitInfo = new RaycastHit();
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
if (Physics.Raycast(Camera.main.ScreenPointToRay(Input.mousePosition), out hitInfo) && hitInfo.transform.tag == "Talker")
{
int[] indexToBeRemoved = new int[3] { -1, -1, -1 };
for (int j = 0; j < 3; j++)
{
float minDist = Mathf.Infinity;
int index = -1;
for (int i = 0; i < vertices.Length; i++)
{
float dis = Vector3.Distance(hitInfo.point, vertices[i]);
if (dis < minDist&& i!=indexToBeRemoved[0] && i != indexToBeRemoved[1] && i != indexToBeRemoved[2])
{
index = i;
minDist = dis;
}
}
indexToBeRemoved[j] = index;
print(index);
}
Array.Sort(indexToBeRemoved);
indices.RemoveRange(indexToBeRemoved[0], 3);
mesh.Clear();
mesh.vertices = vertices;
mesh.uv = uv;
mesh.triangles = indices.ToArray();
}
}
}
}
However this code doesn't work. When I click to object, object gets darker gray.
Also I noticed another issue in that code. If this script worked properly, it could still give me wrong vertices. In some meshes, especially the ones that scaled down in one axis; nearest vertices to mouse cursor may not be corner of same triangle. So I couldnt get the vertices that mouse cursor shot.
Your answer
Follow this Question
Related Questions
Procedural Mesh Problems 0 Answers
Creating triangles around a mesh using an array of vertices 1 Answer
Getting face of mesh when you already have one tri 0 Answers
Triangles don't follow the vertices changed on mesh 1 Answer
How is a Mesh Built? 1 Answer