更改实例化预制件 Unity 的颜色
Change the color of an instantiated prefab Unity
所以玩家点击一个按钮来创建一个盒子。我需要这个盒子在几种颜色之间随机变化。我还需要这个盒子有一个与所述颜色相对应的标签。绿框 - "greenBlock" 标签等
我已经实例化了盒子,然后尝试将其 material 更改为 material.color。它什么都不做。我看过 sharedMaterial 的建议,但尝试过后发现它最终会改变场景中每个游戏对象的颜色。我想我正在正确获取盒子预制件渲染器?如有任何帮助,我们将不胜感激!
这是我目前的情况:
public class ButtonScript : MonoBehaviour
{
public GameObject Box;
public Transform spawnpoint1;
public Transform spawnpoint2;
public Rigidbody2D player;
public Renderer boxRenderer;
[SerializeField]
private Color boxColor;
[SerializeField]
private AudioSource actionSound;
// Update is called once per frame
private void Start()
{
//boxRenderer = Box.gameObject.GetComponent<Renderer>();
boxRenderer = GameObject.Find("Box").GetComponent<Renderer>(); // Find the renderer of the box prefab
}
public void OnTriggerStay2D(Collider2D col)
{
if (player) // If it's the player in the collider trigger
{
if (Input.GetKeyDown(KeyCode.E))
{
Instantiate(Box, spawnpoint1.position, Quaternion.identity);
boxRenderer.material.color = boxColor; // change the color after it is instantiated
actionSound.Play();
}
}
}
}
boxRenderer.material.SetColor("_Color", boxColor);
或
boxRenderer.material.color = new Color(0.5, 0.5, 0.0, 1.0);
当你实例化盒子时,你需要在此时获取盒子的渲染,因为它是一个新对象。所以:
if (Input.GetKeyDown(KeyCode.E))
{
Box = Instantiate(Box, spawnpoint1.position, Quaternion.identity);
boxRenderer = Box.transform.GetComponent<Renderer>();
boxRenderer.material.color = boxColor; // change the color after it is instantiated
actionSound.Play();
}
请注意,您已经创建并分配了新颜色,您不能在那里修改颜色,因为它可能会用在使用相同颜色的其他对象上 material。
查看文档中的 SetColor
,即设置名为 _Color
的着色器 属性,这是着色器中的默认颜色元素,您当然可以根据着色器。
所以玩家点击一个按钮来创建一个盒子。我需要这个盒子在几种颜色之间随机变化。我还需要这个盒子有一个与所述颜色相对应的标签。绿框 - "greenBlock" 标签等
我已经实例化了盒子,然后尝试将其 material 更改为 material.color。它什么都不做。我看过 sharedMaterial 的建议,但尝试过后发现它最终会改变场景中每个游戏对象的颜色。我想我正在正确获取盒子预制件渲染器?如有任何帮助,我们将不胜感激!
这是我目前的情况:
public class ButtonScript : MonoBehaviour
{
public GameObject Box;
public Transform spawnpoint1;
public Transform spawnpoint2;
public Rigidbody2D player;
public Renderer boxRenderer;
[SerializeField]
private Color boxColor;
[SerializeField]
private AudioSource actionSound;
// Update is called once per frame
private void Start()
{
//boxRenderer = Box.gameObject.GetComponent<Renderer>();
boxRenderer = GameObject.Find("Box").GetComponent<Renderer>(); // Find the renderer of the box prefab
}
public void OnTriggerStay2D(Collider2D col)
{
if (player) // If it's the player in the collider trigger
{
if (Input.GetKeyDown(KeyCode.E))
{
Instantiate(Box, spawnpoint1.position, Quaternion.identity);
boxRenderer.material.color = boxColor; // change the color after it is instantiated
actionSound.Play();
}
}
}
}
boxRenderer.material.SetColor("_Color", boxColor);
或
boxRenderer.material.color = new Color(0.5, 0.5, 0.0, 1.0);
当你实例化盒子时,你需要在此时获取盒子的渲染,因为它是一个新对象。所以:
if (Input.GetKeyDown(KeyCode.E))
{
Box = Instantiate(Box, spawnpoint1.position, Quaternion.identity);
boxRenderer = Box.transform.GetComponent<Renderer>();
boxRenderer.material.color = boxColor; // change the color after it is instantiated
actionSound.Play();
}
请注意,您已经创建并分配了新颜色,您不能在那里修改颜色,因为它可能会用在使用相同颜色的其他对象上 material。
查看文档中的 SetColor
,即设置名为 _Color
的着色器 属性,这是着色器中的默认颜色元素,您当然可以根据着色器。