首页 > 解决方案 > 如何检查玩家是否站在瓷砖上并且该瓷砖具有特定的材料将其更改为另一种材料?

问题描述

我试图让玩家站在一个平台上,如果该平台上有材料 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;
        }
    }
}

标签: c#unity3d

解决方案


我猜您的代码不起作用,因为 renderer.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 的标签系统,因为这比检查名称更快、更可靠。


推荐阅读