c# - 如何检查玩家是否站在瓷砖上并且该瓷砖具有特定的材料将其更改为另一种材料?
问题描述
我试图让玩家站在一个平台上,如果该平台上有材料 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;
}
}
}
解决方案
我猜您的代码不起作用,因为 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 的标签系统,因为这比检查名称更快、更可靠。
推荐阅读
- node.js - 用户在评论系统中的显示名称
- docker - 如何使用 docker compose 运行 -it?
- mysql - Rails 安装 mysql2 时出错 (mysql2-0.3.20)
- c# - 应用程序当前路径 c# wpf
- javascript - 有没有办法将参数传递给 json 数据调用?
- javascript - Angular 6:有多个模块的名称只是大小写不同
- c# - 使用 FTP 协议列出包含大约 2,000,000 个文件的目录
- html - 为什么我的 XPath 会忽略谓词并选择多个节点?
- java - maven 编译错误:文件名、目录名或卷标语法不正确
- python-2.7 - 为什么 pandas Round 方法会爆炸我的数据框?