为了创造游戏的基础知识,我在团结中创造了一个奇怪的问题,
此代码工作正常(在start()中将materialstate设置为0)并且对象本身确实更改了材质
void OnCollisionEnter(Collision col){
if (col.gameObject.name == "Player" && Materialstate == 0) {
renderComp.material = goal;
Materialstate = 1;
}
}
然而,只要我添加一个else语句就会中断,就会发生冲突(我知道因为我已经在更新()中使用Materialstate的print语句检查了它但是这次甚至没有初始碰撞(在添加else之前工作正常)有效:
void OnCollisionEnter(Collision col){
if (col.gameObject.name == "Player" && Materialstate == 0) {
renderComp.material = goal;
Materialstate = 1;
} else {
if (col.gameObject.name == "Player") {
renderComp.material = starting;
Materialstate = 0;
}
}
}
答案 0 :(得分:1)
你能试试这个代码吗?
void OnCollisionEnter(Collision col) {
if (col.gameObject.name == "Player") {
if (Materialstate == 0) {
renderComp.material = goal;
Materialstate = 1;
return;
}
renderComp.material = starting;
Materialstate = 0;
}
}
这删除了基本上检查col.GameObject.name == "Player"
是否两次的其他内容。这实际上可能会加快您的游戏代码速度以及删除额外的检查。它还在原始条件下正确执行所需的操作(col.GameObject.name == "Player"
为true
)。
编写时假设Materialstate
只是0
或1
,但是,如果您计划拥有更多状态,那么切换声明可能是您制作时最好的选择这项工作按预期进行。
void OnCollisionEnter(Collision col) {
if (col.gameObject.name == "Player") {
switch (Materialstate)
{
case 0:
renderComp.material = goal;
Materialstate = 1;
break;
case 1:
renderComp.material = starting;
Materialstate = 0;
break;
default:
// Invalid Materialstate throw exception/error
}
}
}
我希望这有帮助!