Нужна помощь в изменении вторичной карты при нажатии кнопки - PullRequest
0 голосов
/ 10 июля 2019

Я делаю (пробую / учусь) игру-настройщик персонажей в Unity, и мне трудно разобраться, как добавить одежду поверх кожи моих персонажей в качестве дополнительной карты, и я могу нажимать и изменять кнопки. это во время выполнения. Мой план состоит в том, чтобы иметь кнопку, которая меняет карты:

Скин - Изменения Скинтоне

Одежда - Изменяет оверлей одежды.

Эти карты имеют одну и ту же сетку.

Как мне поступить, и какой тип сценария мне нужен? Я новичок в единстве и был бы признателен за любую помощь!

Есть ли другой способ изменить наложенные карты скинов? Какие-либо инструменты для материалов, которые я могу использовать для смены материалов?

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

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

public class MaterialEditor : MonoBehaviour
{

  MeshRenderer meshRenderer;

  public Texture albedoTexture;
  public Texture normalTexture;

  float rColorValue = 1f;
  float gColorValue = 1f;
  float bColorValue = 1f;

  void Start()
  {
    meshRenderer = GetComponent<MeshRenderer>();
  }

  public void RColorValue(float rColor)
  {
    rColorValue = rColor;
    meshRenderer.material.SetColor("_Color", new Vector4(rColorValue, gColorValue, bColorValue, 1f));
  }
  public void GColorValue(float gColor)
  {
    gColorValue = gColor;
    meshRenderer.material.SetColor("_Color", new Vector4(rColorValue, gColorValue, bColorValue, 1f));
  }
  public void BColorValue(float bColor)
  {
    bColorValue = bColor;
    meshRenderer.material.SetColor("_Color", new Vector4(rColorValue, gColorValue, bColorValue, 1f));
  }

  public void ChangeAlbedoTexture()
  {
    meshRenderer.material.SetTexture("_MainTex", albedoTexture);
  }

  public void ChangeNormalTexture()
  {
    meshRenderer.material.SetTexture("_BumpMap", normalTexture);
  }

  public void MetallicSlider(float metallic)
  {
    meshRenderer.material.SetFloat("_Metallic", metallic);
  }

  public void SmoothnessSlider(float smoothness)
  {
    meshRenderer.material.SetFloat("_Glossiness", smoothness);
  }
}

1 Ответ

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

Для смены рендерера с сеткой

meshRenderer = GetComponent<MeshRenderer>();

до

meshRenderer = GetComponent<SkinnedMeshRenderer>();

Если ваша сетка использует один материал (только один слот материала), ваш код должен работать после этого изменения

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