我如何检查玩家是否站在瓷砖上,而该瓷砖有特定的材料.将其更改为另一种材料



我试图让一名玩家站在平台上,如果平台上有材料1,则将其更改为2,如果平台有材料2,则将它更改为材料3。

public class TileHealth : MonoBehaviour
{
public Material Stage0;
public Material Stage1;
public Material Stage2;
public Material Stage3;
void OnTriggerEnter(Collider other)
{
if (other.gameObject.name.Equals("Player"))
{
Renderer render = GetComponent<Renderer>();
if (render.material == Stage0) {
render.material = Stage1;
} else if (render.material == Stage1) {
render.material = Stage2;
} else if (render.material == Stage2) {
render.material = Stage3;
}
}
}

我猜您的代码不起作用,因为render.material可能会分配材质的副本,因此相等性检查失败。好消息是你不需要支票。只需使用一个阵列,这也允许更灵活的设置:

public class TileHealth : MonoBehaviour {
[SerializeField] private Material[] materials;
private int materialIndex;
private int materialCount;
private Renderer renderer;
void Awake(){
renderer = GetComponent<Renderer>();
materialCount = materials.Length;
}
void OnTriggerEnter(Collider other) {
if (other.gameObject.CompareTag("Player")) {
materialIndex++;
if(materialIndex < materialCount){
renderer.material = materials[materialIndex];
} else {
Debug.Log("no more materials available");
}
}
}
}

注意:我还将对撞机检查更改为使用Unity的标记系统,因为这比检查名称更快、更可靠。

最新更新