c# - 枪口闪光灯打开但没有用 else 语句关闭?
问题描述
所以这行得通
if (Input.GetMouseButtonDown(0))
{
_muzzleflash.SetActive(true);
Ray rayOrigin = Camera.main.ViewportPointToRay(new Vector3(0.5f, 0.5f, 0f));
RaycastHit Hitinfo;
// cast ray
if (Physics.Raycast(rayOrigin, out Hitinfo))
{
Debug.Log("hit" + Hitinfo.transform.name);
}
}
但这不起作用?
if (Input.GetMouseButtonDown(0))
{
_muzzleflash.SetActive(true);
Ray rayOrigin = Camera.main.ViewportPointToRay(new Vector3(0.5f, 0.5f, 0f));
RaycastHit Hitinfo;
// cast ray
if (Physics.Raycast(rayOrigin, out Hitinfo))
{
Debug.Log("hit" + Hitinfo.transform.name);
}
}
else
{
_muzzleflash.SetActive(false);
}
这是为什么?
我的思维过程是GetMouseButtonDown(0)
在按下它然后调用我的_muzzleflash
游戏对象时起作用。
而且我认为唯一不正确的方法是如果没有按住鼠标单击。
所以,在第一个例子中,按下会调用这个对象。但不是释放不会删除对象,而是按下鼠标时对象甚至不显示?
ls 这个对象,但是释放不删除对象?
顺便说一句,这是我的统一项目视图。
解决方案
问题是您使用GetMouseButtonDown
而不是GetMouseButton
根据GetMouseButtonDown的文档,该功能
在用户按下给定鼠标按钮的帧期间返回 true。
虽然GetMouseButton的文档说该功能
返回给定的鼠标按钮是否被按住。
这意味着在您的代码中, if 仅被调用一帧,然后几毫秒后,您将进入一个新帧。由于在新帧中鼠标按钮没有被按下(它仍然被按住,但刚刚按下的那一刻已经过去了),else 语句被调用,并停止一切。
要获得所需的行为(按住鼠标时该函数必须仍然为真),请使用GetMouseButton
推荐阅读
- python-3.x - 发生异常:ImportError Python
- r - 跨列表中的多个数据框更改单个列
- angular - 使用 Angular 在 DevExtreme 中自定义动态字段
- c# - 如何在 Visual Studio for c# 中更改启动代码?
- javascript - 如何触发 AsyncSelect 以重新加载 ReactJS 中的选项
- ionic-framework - 如何在 ionic v4 中禁用启动画面微调器?
- sql - 在 sql 中查找两个透视列之间的差异
- eclipse - 无法在 Eclipse 上创建 Web 服务客户端
- reactjs - 了解 React 部署——“将 React 应用程序部署到 Github 页面”教程中到底发生了什么?
- android - 如何在 Android 的改造响应中添加多个标头