Мэш чернеет при изменении

Я написал небольшой код, который при нажатии кнопки мыши опускает вниз ближайшую точку, создавая эффект добывания ресурсов. Вот код:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class MinerScript : MonoBehaviour
{
    public MeshFilter filter;
    public MeshCollider col;

    public GameObject Player;

    public float mineSpeed = 200;

    Mesh mesh;
    Vector3[] vertices;

    void Update()
    {


        filter = transform.parent.GetComponent<PlayerGravity>().mesh;
        mesh = filter.GetComponent<MeshFilter>().sharedMesh;
        vertices = mesh.vertices;

        Ray ray = new Ray(transform.position, transform.forward * 2);

        if (Physics.Raycast(ray))
        {
            if (Input.GetMouseButton(1))
            {

                int index = Mathf.RoundToInt(ClosestIndexToPoint(ray));
                vertices[index] += (-Player.transform.eulerAngles) * Time.deltaTime * mineSpeed;
                mesh.vertices = vertices;

                mesh.RecalculateBounds();
                mesh.RecalculateNormals();

                Color[] colors = new Color[mesh.vertices.Length];
                colors[index] = Color.red;
                mesh.SetColors(colors);
                //col.sharedMesh = mesh;
            }
        }
    }

    public float ClosestIndexToPoint(Ray ray)
    {

        if (Physics.Raycast(ray, out RaycastHit hit))
        {
            Mesh m = hit.transform.GetComponent<MeshFilter>().sharedMesh;
            col = hit.transform.GetComponent<MeshCollider>();

            int[] tri = new int[3] {

             m.triangles[hit.triangleIndex * 3 + 0],
             m.triangles[hit.triangleIndex * 3 + 1],
             m.triangles[hit.triangleIndex * 3 + 2],

         };

            float closestDistance = Vector3.Distance(m.vertices[tri[0]], hit.point);
            int closestVertexIndex = tri[0];
            for (int i = 0; i < tri.Length; i++)
            {
                float dist = Vector3.Distance(m.vertices[tri[i]], hit.point);
                if (dist < closestDistance)
                {
                    closestDistance = dist;
                    closestVertexIndex = tri[i];
                }
            }

            return closestVertexIndex;
        }
        else
            return -1;
    }

Проблема в том что часть (лишь часть) мэша становится чёрного цвета. Проблема не в цвете, я думаю.

Мэш при изменение А вот и сам мэш (я не думаю что это так важго)

Мэш в цвете

Буду очень рад любым ответам, я пытался бороться с этой проблемой довольно долго. Заранее спасибо! ^^


Ответы (0 шт):