【问题标题】:How can I check if a player stands on a tile and that tile has a specific materia change it to another material?如何检查玩家是否站在瓷砖上并且该瓷砖具有特定的材料将其更改为另一种材料?
【发布时间】:2020-11-16 17:23:03
【问题描述】:

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

【问题讨论】:

  • 什么,比如Q*bert
  • 是的,类似于 Qbert
  • 你的代码有什么问题?

标签: c# unity3d


【解决方案1】:

我猜你的代码不起作用,因为 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 的 tag system,因为这比检查名称更快更可靠。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-10
    • 1970-01-01
    • 2016-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多