这可行
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
游戏对象时起作用。
我认为唯一的不正确的方法就是不按住鼠标单击。
因此,在第一个示例中,按下会调用此对象。但是释放不不会删除对象,但是按下鼠标时对象甚至不显示吗?
可以放这个对象,但是释放不会移除该对象?
这是我的统一项目视图。
答案 0 :(得分:1)
问题是您使用GetMouseButtonDown
而不是GetMouseButton
根据GetMouseButtonDown的文档,函数
在用户按下给定鼠标键的帧期间返回true。
GetMouseButton的文档说该函数
返回是否按住给定的鼠标按钮。
这意味着在您的代码中,if仅被调用一帧,然后在几毫秒后被称为新帧。由于在新框架中没有按下鼠标按钮(它仍然处于按下状态,但是刚刚被按下的那一刻已经过去了),因此将调用else语句,并停止所有操作。
要获得所需的行为(按住鼠标时该功能必须仍然为真),请使用GetMouseButton
答案 1 :(得分:0)
您可以使用input.getmousebuttonup()来设置active false ... 其他明智的方法是使用invoke方法将active设置为false