我想做一个小汽车游戏,让你向前开。
现在我想编写一个脚本,当你按下“V”键时,相机切换到另一个相机,如果你再按一次,它会返回。
我有2个相机游戏对象,一个在我的车后面,一个在司机座位上。
一个摄像头始终处于禁用状态,因此您始终可以通过一个摄像头查看内容。
默认值为:
BehindC - Active FrontC -禁用
我试着告诉脚本,当我按下“V”键并且后置摄像头处于活动状态时,后置摄像头应该被禁用,前置摄像头应该被启用。
另一种方式是相同的,如果后面的相机是不活跃的,我按下“V”,前相机被禁用,后面的相机被启用。
public class CameraSwitcher : MonoBehaviour
{
//BehindC is the Camera behind my Car
public GameObject BehindC;
//FrontC is the Camera in the drivers Seat
public GameObject FrontC;
// Update is called once per frame
void Update()
{
if (Input.GetKeyDown(KeyCode.V) && BehindC.activeInHierarchy)
{
BehindC.SetActive(false);
FrontC.SetActive(true);
}
else
{
BehindC.SetActive(true);
FrontC.SetActive(false);
};
}
}
当我试着运行这个并按下“V”时,相机在毫秒内切换到前面和后面的相机,但你可以看到这个。
我认为if语句检查这个太快了,切换摄像机也太快了,因为“void Update”方法太快了。
也许我需要一些东西,延迟这一点,并允许它检查只有1次在一秒钟或东西idk。
如果你能解释一下你将如何解决这个问题以及代码是如何工作的,我将不胜感激,因为我是C#编码的新手。
谢谢
2条答案
按热度按时间z6psavjg1#
在评论部分,我不能正确地编写代码,所以这里是我的答案:
哇,我不知道为什么它工作,但好吧。.我确实试过在我的实际代码这里:
为什么这不起作用?当我试着运行这个时,什么也没发生。
为什么“else if”语句有效,而这两个if语句无效?你能解释一下吗
编辑:
好吧,我找到答案了。..
如果你有两个if语句,脚本会尝试同时检查两个条件,这是不起作用的,这就是为什么什么都没有发生。
如果你有一个“if”语句和“else if”语句,脚本只能同时检查一个条件,所以它必须接受一个条件并运行代码。
非常感谢你的回答@CodePirate
如果你想像我一样更好地理解它,请尝试这个网站:How To Differentiate If, Else if, Else in C#
jgzswidk2#
所以你的问题是,每一帧它都检查你是否按了“V”,以及BehindC对象是否处于活动状态。如果是,你激活FrontC对象并停用BehindC对象。但是在下一帧中,它再次检查,发现BehindC对象被禁用,然后直接跳到else语句并再次启用它。
你需要做的是使用else if -Statement代替else-Statement,并定义它只在按下“V”且FrontC对象处于活动状态时重新激活BehindC对象。
就像这样: