Смена материалов Skinned Mesh Renderer нажатием UI-Кнопки

Форум для самых маленьких, а так же тех, кому недосуг читать справку самостоятельно.

Смена материалов Skinned Mesh Renderer нажатием UI-Кнопки

Сообщение Yasha222 10 апр 2023, 14:13

Помогите пожалуйста сделать скрипт, в котором можно будет переключаться между двумя и более материалами skinned mesh renderer'а
На скрине у меня есть материалы, между которыми я хочу переключаться посредством UI-кнопки
По гайду зарубежного ютубера написал скрипт, но материалы не меняются, уже не знаю, к кому обратиться.

Скриптяра:
Синтаксис:
Используется csharp
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class ChangeMaterial : MonoBehaviour
{
   
        public SkinnedMeshRenderer meshRendererToUse;
        public Material materialsToUse;
    public void ChangeMaterialOnMesh()
        {
                for (int i = 0; i < meshRendererToUse.materials.Length; i++)
                {
                        meshRendererToUse.materials[i] = materialsToUse;
           
        }
        }
}

 

Скрин:
https://imageup.ru/img263/4286908/1.jpg.html
Yasha222
UNец
 
Сообщения: 5
Зарегистрирован: 10 апр 2023, 13:59

Re: Смена материалов Skinned Mesh Renderer нажатием UI-Кнопки

Сообщение waruiyume 10 апр 2023, 14:42

Нужно назначить массив materials, а не менять в нём значения по одному.
Note that like all arrays returned by Unity, this returns a copy of materials array. If you want to change some materials in it, get the value, change an entry and set materials back.
Аватара пользователя
waruiyume
Адепт
 
Сообщения: 6143
Зарегистрирован: 30 окт 2010, 05:03
Откуда: Ростов на Дону

Re: Смена материалов Skinned Mesh Renderer нажатием UI-Кнопки

Сообщение Yasha222 11 апр 2023, 13:49

waruiyume писал(а):Нужно назначить массив materials, а не менять в нём значения по одному.
Note that like all arrays returned by Unity, this returns a copy of materials array. If you want to change some materials in it, get the value, change an entry and set materials back.
У меня в Unity пишет Assets/Menu/Scripts/ChangeMaterial.cs(10,16): error CS0246: The type or namespace name `Materials' could not be found. Are you missing a using directive or an assembly reference?
Со скобочками та же фигня. Я не вдупляю.
Yasha222
UNец
 
Сообщения: 5
Зарегистрирован: 10 апр 2023, 13:59

Re: Смена материалов Skinned Mesh Renderer нажатием UI-Кнопки

Сообщение Yasha222 11 апр 2023, 15:13

Я подкорректировал скрипт, он меняет материал, но только один раз, а я хочу, чтобы он выбирал записанный материал из списка массива и назначал его на нулевой элемент меша.
То есть, я нажимаю на UI-Кнопку, и он делает размер элементов три, куда в каждый пишет прописанные в массиве материалы.

Синтаксис:
Используется csharp
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class ChangeMaterial : MonoBehaviour
{

    public SkinnedMeshRenderer meshRendererToUse;
    public Material[] materialsToUse;
    public void NextMaterial()
    {
        for (int i = 0; i < meshRendererToUse.materials.Length; i++)
        {
            meshRendererToUse.materials = materialsToUse;

        }

    }


}
Yasha222
UNец
 
Сообщения: 5
Зарегистрирован: 10 апр 2023, 13:59

Re: Смена материалов Skinned Mesh Renderer нажатием UI-Кнопки

Сообщение 1max1 12 апр 2023, 01:49

Синтаксис:
Используется csharp
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class ChangeMaterial : MonoBehaviour
{

    public SkinnedMeshRenderer meshRendererToUse;

    public Material materialToUse1;
    public Material materialToUse2;

    public void NextMaterial1()
    {
        Material[] ms = new Material[Mathf.Max(1, meshRendererToUse.materials.Length)];

        for (int i = 0; i < ms.Length; ++i)
            ms[i] = materialToUse1;

        meshRendererToUse.materials = ms;

    }

    public void NextMaterial2()
    {
        Material[] ms = new Material[Mathf.Max(1, meshRendererToUse.materials.Length)];

        for (int i = 0; i < ms.Length; ++i)
            ms[i] = materialToUse2;

        meshRendererToUse.materials = ms;

    }

}
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

Re: Смена материалов Skinned Mesh Renderer нажатием UI-Кнопки

Сообщение Yasha222 12 апр 2023, 13:19

1max1 писал(а):
Синтаксис:
Используется csharp
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class ChangeMaterial : MonoBehaviour
{

    public SkinnedMeshRenderer meshRendererToUse;

    public Material materialToUse1;
    public Material materialToUse2;

    public void NextMaterial1()
    {
        Material[] ms = new Material[Mathf.Max(1, meshRendererToUse.materials.Length)];

        for (int i = 0; i < ms.Length; ++i)
            ms[i] = materialToUse1;

        meshRendererToUse.materials = ms;

    }

    public void NextMaterial2()
    {
        Material[] ms = new Material[Mathf.Max(1, meshRendererToUse.materials.Length)];

        for (int i = 0; i < ms.Length; ++i)
            ms[i] = materialToUse2;

        meshRendererToUse.materials = ms;

    }

}

Спасибо, это почти оно, но нужно как-нибудь одним войдом, который уже назначен на кнопку перемещаться между этими двумя матами...
Yasha222
UNец
 
Сообщения: 5
Зарегистрирован: 10 апр 2023, 13:59

Re: Смена материалов Skinned Mesh Renderer нажатием UI-Кнопки

Сообщение 1max1 12 апр 2023, 18:23

Синтаксис:
Используется csharp
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class ChangeMaterial : MonoBehaviour
{

    public SkinnedMeshRenderer meshRendererToUse;

    public Material[] materialsToUse;

    int curr_ind;

    public void NextMaterial1()
    {
        Material[] ms = new Material[Mathf.Max(1, meshRendererToUse.materials.Length)];

        for (int i = 0; i < ms.Length; ++i)
            ms[i] = materialsToUse[curr_ind++];

        if (curr_ind >= materialsToUse.Length)
            curr_ind = 0;

        meshRendererToUse.materials = ms;
    }
}
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

Re: Смена материалов Skinned Mesh Renderer нажатием UI-Кнопки

Сообщение Yasha222 14 апр 2023, 16:16

1max1 писал(а):
Синтаксис:
Используется csharp
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class ChangeMaterial : MonoBehaviour
{

    public SkinnedMeshRenderer meshRendererToUse;

    public Material[] materialsToUse;

    int curr_ind;

    public void NextMaterial1()
    {
        Material[] ms = new Material[Mathf.Max(1, meshRendererToUse.materials.Length)];

        for (int i = 0; i < ms.Length; ++i)
            ms[i] = materialsToUse[curr_ind++];

        if (curr_ind >= materialsToUse.Length)
            curr_ind = 0;

        meshRendererToUse.materials = ms;
    }
}

Спасибо огромное!!! (3A4OT)
Yasha222
UNец
 
Сообщения: 5
Зарегистрирован: 10 апр 2023, 13:59


Вернуться в Почемучка

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 20