我试图在运行时基于如果我正在投射的光线击中某个对象来更改我的对象材质颜色。当我退出程序时,我希望它改回原来的材质颜色。根据在Unity中查看的内容更改对象材质
我的菜单与我想要切换的材质之间有一个高亮功能,让用户知道他们即将选择的材料。在过去的几天我一直在试图得到这个工作,我有以下问题:
我想要的材质颜色的实例连接到游戏对象,但不改变渲染材料
高亮材质颜色放在我的游戏对象,而不是实际的材料我想
我已经跑出来的关于如何解决这个想法,我已经在得到隧道的设想在这里我需要一双新鲜的眼睛来看看我h到目前为止。
有没有人曾经这样做过?你能告诉我我做错了什么吗?
这是我一直在努力与代码的当前状态:
我的类存储原始材料,这样一旦程序结束就可以切换回它。
public GameObject targetMaterial;
public Color orignalMaterial;
//store GO original colour
void Awake()
{
orignalMaterial = targetMaterial.renderer.material.color;
}
//highlight code
public void ChangeObjectMaterialColour(Color materialColour)
{
targetMaterial.renderer.material.color = materialColour;
}
//
void OnApplicationQuit()
{
targetMaterial.renderer.material.color = orignalMaterial;
}
如何,我试图改变材料的颜色,我有我想要切换三种不同的选择:
ChangeObjectColour new_colour1;
ChangeObjectColour new_colour2;
ChangeObjectColour new_colour3;
void Start()
{
new_colour1 = GameObject.Find("Colour 1").GetComponent<ChangeObjectColour>();
new_colour2 = GameObject.Find("Colour 2").GetComponent<ChangeObjectColour>();
new_colour3 = GameObject.Find("Colour 3").GetComponent<ChangeObjectColour>();
}
void CastRay()
{
if (Physics.Raycast(transform.position, fwd, out hit))
{
foreach(string t in _tags)
{
if(hit.collider.gameObject.tag == t)
{
HighLight(hit.collider.gameObject);
hitTaggedObject = true;
}
}
if(hit.collider.gameObject.tag == "Colour1")
{ new_colour1.ChangeObjectMaterialColour(hit.collider.gameObject.renderer.material.color);
}
if(hit.collider.gameObject.tag == "Colour2")
{ new_colour2.ChangeObjectMaterialColour(hit.collider.gameObject.renderer.material.color);
}
if(hit.collider.gameObject.tag == "Colour3")
{
new_colour3.ChangeObjectMaterialColour(hit.collider.gameObject.renderer.material.color);
}
}
任何人都可以看到什么我做错了吗?