Назначение нескольких материалов игровому объекту с помощью сценария? - PullRequest
2 голосов
/ 26 июня 2019

Как мне назначить несколько материалов для игрового объекта через скрипт c #?

То, что я до сих пор пробовал, это:

public GameObject go;
public Material Mat1;
public Material Mat2;
void Start()
{ 
     //this does not work
     go.GetComponent<Renderer>().materials[0] = Mat1; 
}

Ответы [ 3 ]

1 голос
/ 26 июня 2019

Из документации:

Обратите внимание, что, как и все массивы, возвращаемые Unity, возвращается копия массива материалов.Если вы хотите изменить некоторые материалы в нем, получите значение, измените запись и восстановите материалы.

Renderer rend = go.GetComponent<Renderer>();
Material [] mats = rend.materials;
mats[0] = Mat1;
rend.materials = mats;
1 голос
/ 26 июня 2019

Если вы хотите изменить несколько материалов, вам нужно изменить весь массив.поэтому вы сначала создаете массив материалов той же длины, что и текущий рендер:

Material[] newMaterials = renderer.sharedMaterials;
for(int i = 0; i <newMaterials.Length; i++)
{
newMaterials[i] = theMaterialYouWantToSetX;
}

, а затем назначаете массив для рендерера:

renderer.materials = newMaterials;
1 голос
/ 26 июня 2019

Вы не можете обновить материалы напрямую, но вам нужно создать новый массив материалов и назначить его.

void Start()
    {
        //create your materials
        var yourMaterials = new Material[] { Mat1, Mat2 };
        //assign it
        go.GetComponent<Renderer>().materials = yourMaterials ;
    }

Вы также можете проверить документацию .

* 1007.*

Обратите внимание, что, как и все массивы, возвращаемые Unity, он возвращает копию массива материалов.Если вы хотите изменить некоторые материалы в нем, получите значение, измените запись и восстановите материалы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...