[英]Unity3d - Trying to change color of Material via C#
我已經到處尋找解決方案,它看起來很簡單,但我不明白為什么我不能更改位於我的一個 NPC 模型上的一種材料的屬性。
簡單地說——我只是想改變我認為是材質着色器的“_SkinColor”屬性? 我猜是因為使用顯示的代碼會將膚色更改為黑色?
非常感謝你的幫助!
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class colorchanger : MonoBehaviour
{
[SerializeField] private Material myMaterial;
// [SerializeField]
private float red = Random.Range(180, 231);
private float green = Random.Range(200, 255);
private float blue = Random.Range(50, 100);
// Start is called before the first frame update
void Start()
{
Color newColor = new Color(red,green,blue);
myMaterial.SetColor("_SkinColor",newColor);
}
// Update is called once per frame
void Update()
{
}
}
您需要通過其 Renderer 組件設置材質的顏色。
如果腳本附加到具有正在處理您的材質的渲染器的游戲對象,請嘗試:
void Start()
{
Renderer myRenderer = GetComponent<Renderer>();
Color newColor = new Color(red,green,blue);
myRenderer.material.color = newColor;
}
如果腳本旨在更改傳入的任何材質的顏色,則需要傳入相關的渲染器而不是材質。 例如:
public class MaterialColourChanger: MonoBehaviour {
public void ChangeMaterialColour(Renderer renderer, Color colour) {
renderer.material.color = colour;
}
}
從任何其他腳本調用它:
public class AnyOtherScript: MonoBehaviour {
MaterialColourChanger colourChanger;
void Start() {
colourChanger = GameObject.Find("TheColourChangerGameObject").GetComponent<MaterialColourChanger>();
// Get the renderer component for the object that this script is attached to...
Renderer thisObjectsRenderer = GetComponent<Renderer>();
Color myColour = Color.red;
// Pass it all to the colour changer script to change the colour
colourChanger.ChangeMaterialColour(thisObjectsRenderer , myColour);
}
}
如果您確定屬性着色器的正確名稱,那是因為隨機數是介於0, 1
之間的浮點數,而不是 255。修復它:
[SerializeField] private Material myMaterial;
void Start()
{
var red = Random.Range(180, 231)/255f;
var green = Random.Range(200, 255)/255f;
var blue = Random.Range(50, 100)/255f;
var newColor = new Color(red,green,blue);
myMaterial.SetColor("_SkinColor",newColor);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.