簡體   English   中英

Unity3d - 嘗試通過 C# 更改材質的顏色

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM