Как я могу передать конкретный материал на объект, который имеет разные материалы? - PullRequest
1 голос
/ 08 июля 2019

Я хотел бы изменить цвет точного материала на объекте, который имеет более 1 материала ... У меня есть коллайдер сетки для объекта, и я прикрепляю к нему скрипт ... Кажется, он работает немного, но не идеально. Когда я нажимаю на любой материал объекта, он меняет цвет материала. Я хотел бы, чтобы это происходило только тогда, когда я нажимаю на материал, который хочу изменить.

void Update()
     {
     if (Input.GetMouseButtonDown(0))
     { 
            Ray ray = camera.ScreenPointToRay(Input.mousePosition);
            RaycastHit hit;
            if (Physics.Raycast(ray, out hit) )
            {
                 foreach (Material material in materialsArray)
                 {
                       if (material.name == "Square (Instance)")
                       {
                          material.SetColor("_Color", Random.ColorHSV());
                       }
                       else if(material.name == "Circle (Instance)")
                       {
                          Debug.Log("circle clicked");
                       }

Мне бы хотелось, чтобы изменение цвета происходило на квадрате, когда я щелкаю только на квадрате.

1 Ответ

0 голосов
/ 18 июля 2019

Это то, что я нашел, чтобы изменить цвет вложенной сетки.

        RaycastHit hit;
        if (Physics.Raycast(cam.ScreenPointToRay(Input.mousePosition), out hit))
        {
            MeshCollider meshCollider = hit.collider as MeshCollider;
            if (meshCollider != null || meshCollider.sharedMesh != null)
            {
                mesh = meshCollider.sharedMesh;
                Vector3[] vertices = mesh.vertices;
                int[] triangles = mesh.triangles;

                int[] hittedTriangle = new int[]
                {
                        mesh.triangles[hit.triangleIndex * 3],
                        mesh.triangles[hit.triangleIndex * 3 + 1],
                        mesh.triangles[hit.triangleIndex * 3 + 2]
                };

                for (int i = 0; i < mesh.subMeshCount; i++)
                {  
                    int[] subMeshTris = mesh.GetTriangles(i);
                    for (int j = 0; j < subMeshTris.Length; j += 3)
                    {

                        if (subMeshTris[j] == hittedTriangle[0] &&
                            subMeshTris[j + 1] == hittedTriangle[1] &&
                            subMeshTris[j + 2] == hittedTriangle[2])
                        {

                            GetComponent<MeshRenderer>().materials[i].color = Color.cyan;
                        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...