ls_*_*dev 4 c# unity-game-engine
我是团结的新手,我只是想知道如何设置C#的材料?
我有一个预制模型,我可以从编辑器更改纹理没问题.我想要做的是在生成预制件实例时随机设置材料.
这是我要改变的字段:
我正在使用以下代码创建它们:
Instantiate(eggPrefab, spawnPos, Quaternion.identity);
Run Code Online (Sandbox Code Playgroud)
(其中eggPrefab是一个公共变换).
我希望这是足够的信息!
谢谢.
在实例化GameObject之后,从中获取MeshRenderer然后更改它的材质:
public GameObject eggPrefab;
public Vector3 spawnPos;
public Material mat;
void Start()
{
GameObject obj = Instantiate(eggPrefab, spawnPos, Quaternion.identity);
obj.GetComponent<MeshRenderer>().material = mat;
}
Run Code Online (Sandbox Code Playgroud)
如果您没有该材质,则可以使用着色器创建一个并将其指定给MeshRenderer:
GameObject obj = Instantiate(eggPrefab, spawnPos, Quaternion.identity);
//Find the Standard Shader
Material mat = new Material(Shader.Find("Standard"));
//Set Texture on the material
//mat.SetTexture("_MainTex", yourTexture);
obj.GetComponent<MeshRenderer>().material = mat;
Run Code Online (Sandbox Code Playgroud)
最后,如果您有多个材质,则使用materials属性而不是material属性并将材质数组分配给它:
GameObject obj = Instantiate(eggPrefab, spawnPos, Quaternion.identity);
//Find the Standard Shader
Material mat = new Material(Shader.Find("Standard"));
//Set Texture on the material
//mat.SetTexture("_MainTex", yourTexture);
//Create array of mats (Create one for example)
Material[] mats = new Material[1];
mats[0] = mat;
obj.GetComponent<MeshRenderer>().materials = mats;
Run Code Online (Sandbox Code Playgroud)
编辑:
我错过了随机部分.如果要随机选择材质,只需使用Random.Range从材质数组中选择一个项目.
public GameObject eggPrefab;
public Vector3 spawnPos;
public Material[] mats;
void Start()
{
GameObject obj = Instantiate(eggPrefab, spawnPos, Quaternion.identity);
int matIndex = UnityEngine.Random.Range(0, mats.Length);
obj.GetComponent<MeshRenderer>().material = mats[matIndex];
}
Run Code Online (Sandbox Code Playgroud)
我认为将随机材料行为与创造行为混合起来会使事情变得过于复杂。只需创建一个在“开始”时随机化游戏对象材质的组件,它就会在您实例化预制件时运行。
public class MaterialRandomiser : MonoBehaviour {
[SerializeField]
private Material[] _materials;
[SerializeField]
private Renderer _renderer;
public void Start () {
ChangeMaterial();
}
public void Reset () {
_renderer = GetComponent<Renderer>();
}
public void ChangeMaterial () {
_renderer.material = SelectRandomMaterial();
}
private Material SelectRandomMaterial () {
return _materials[Random.Range(0, _materials.Length)];
}
}
Run Code Online (Sandbox Code Playgroud)
将其附加到您的预制件上,现在当您生成它们时,它们将具有随机材质。您现在还可以选择在非预制对象上使用相同的代码。只是不要忘记分配材料!
| 归档时间: |
|
| 查看次数: |
122 次 |
| 最近记录: |