我有一个void OnCollisionEnter(Collision other)
和void OnMouseUp()
,但我希望如果我释放鼠标,则应检查碰撞。所以我想在另一个函数中使用函数。
void OnMouseUp()
{
void OnCollisionEnter(Collision other)
{
}
}
当然,这种方式不可能,所以我该怎么办呢?
答案 0 :(得分:4)
你的措辞有点含糊不清。当你说“释放我的鼠标”时我假设你的意思是“不再持有左键”,如果那是错的让我知道。
您只需在OnCollisionStay()
中检查鼠标按钮是否未被按下
void OnCollisionStay(Collision other)
{
//check if left mouse is not being held down
if(!Input.GetMouseButton(0))
{
//write your collision code here
}
}
EDIT:已修改,因此它不仅仅适用于碰撞输入/鼠标释放的第一帧。
我更喜欢@ Programmer的答案,通常我会使用这种方法进行碰撞,但我会留下这个以防万一有人觉得它有用。
答案 1 :(得分:4)
OnCollisionEnter和OnMouseUp在一帧中被调用一次,直到您重复该事件或再次发生碰撞为止。你需要一个布尔标志来保证你不会错过OnMouseUp
或OnCollisionEnter
,因为这种情况发生得非常快。
bool collided = false;
void OnMouseUp()
{
if (collided)
{
Debug.Log("Collding while mouse is up");
}
}
void OnCollisionEnter(Collision other)
{
collided = true;
}
void OnCollisionExit(Collision collision)
{
collided = false;
}
甚至没有OnMouseUp
bool collided = false;
void Update()
{
if ((Input.GetMouseButton(0)) && collided)
{
Debug.Log("Collding while mouse is up");
}
}
void OnCollisionEnter(Collision other)
{
collided = true;
}
void OnCollisionExit(Collision collision)
{
collided = false;
}
答案 2 :(得分:1)
为对手使用单独的子对象,然后在OnMouseUp
事件处理程序中启用然后禁用该对象。
答案 3 :(得分:0)
bool mouseReleased = false;
void OnMouseDown() => mouseReleased = false;
void OnMouseUp() => mouseReleased = true;
void OnCollisionEnter()
{
if(mouseReleased)
{
mouseReleased = false;
// Do something
}
}