c# - 如何在选择游戏对象时将材质分配给游戏对象,并在使用 C# 取消选择游戏对象时将其更改回原始材质?
问题描述
我在场景中有多个游戏对象,上面有不同的材质。当我选择一个游戏对象时,它的材质必须更改为 selectMat。我的代码在编辑器中工作,在我的 samsung s8 上它也可以工作,但是在多次选择不同的游戏对象后,selectedMat 材料会留在游戏对象上,并且不会变回原来的 Mat。
我真的可以使用一些帮助。
{
public GameObject SelectedObject;
public Material SelectMat;
public string Path = "StringPath";
private Material originalMat;
// Start is called before the first frame update
void Start()
{
originalMat = Resources.Load<Material>(Path);
}
public void Update()
{
if (Input.GetMouseButtonDown(0))
{
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit hit;
if (Physics.Raycast(ray, out hit))
{
GameObject hitObject = hit.transform.gameObject;
hitObject.GetComponent<Renderer>().material = originalMat;
SelectObject(hitObject);
hitObject.GetComponent<Renderer>().material = SelectMat;
}
else
{
ClearSelection();
}
}
}
void SelectObject(GameObject obj)
{
if (SelectedObject != null)
{
if (obj == SelectedObject)
{
return;
}
SelectedObject = obj;
}
}
void ClearSelection()
{
if (SelectedObject == null)
{
return;
}
else
{
SelectedObject.GetComponent<Renderer>().sharedMaterial = originalMat;
SelectedObject = null;
}
}
解决方案
更改后material
使用Renderer
该材质的本地实例。在那之后改变sharedMaterial
afaik 没有任何效果。
利用
SelectedObject.GetComponent<Renderer>().material = originalMat;
反而
推荐阅读
- php - PHP Date 将日期转换为日期
- api - Twitter Premium Archive 上的“请求”如何计算?
- geometry - 将子节点放置在圆圈中而不重叠
- r - 如何下载 R Shiny 中的动态图形?
- apache-kafka - Flink 不使用来自 Kafka 发布者的数据
- python - 为什么我不断得到
作为输出 - c# - 占据列表的前 26 位
- reactjs - TypeError: Object(...) is not a function when using react-toastify
- c# - 在 SAP HANA Studio 中重命名架构
- c++ - 对于黑客等级中的“两个字符串”问题,我在三个测试用例中遇到分段错误。是什么原因?