#unity3d
#unity3d
Вопрос:
Я написал следующий код, чтобы посмотреть, могу ли я присвоить объекту случайный цвет. Чего мне не хватает, чтобы объект никогда не менял цвет?
using UnityEngine;
public class ColorManager : MonoBehaviour
{
private void Start()
{
Shader shader = Shader.Find("Diffuse");
Material mat = new Material(shader) {hideFlags = HideFlags.HideAndDontSave};
mat.color = new Color(Random.value, Random.value, Random.value);
}
}
Ответ №1:
Вы создали материал, но вы ничему не назначаете этот материал …
Вероятно, вы хотите назначить его Renderer.material
чему-то вроде
public class ColorManager : MonoBehaviour
{
// Reference this via the Inspector
[SerializeField] private Renderer targetRenderer;
private void Start()
{
// As fallback look for a renderer on this object
if(!targetRenderer) targetRenderer = GetComponent<Renderer>();
var shader = Shader.Find("Diffuse");
var mat = new Material(shader) { hideFlags = HideFlags.HideAndDontSave };
mat.color = new Color(Random.value, Random.value, Random.value);
targetRenderer.material = mat;
}
}
На самом деле нет необходимости создавать новый материал вообще. Вы могли бы просто использовать уже существующий. Создайте новый только в качестве запасного варианта:
public class ColorManager : MonoBehaviour
{
[SerializeField] private Renderer targetRenderer;
private void Start()
{
if(!targetRenderer) targetRenderer = GetComponent<Renderer>();
var mat = targetRenderer.material;
if(!mat)
{
Shader shader = Shader.Find("Diffuse");
mat = new Material(shader) { hideFlags = HideFlags.HideAndDontSave };
}
mat.color = new Color(Random.value, Random.value, Random.value);
}
}