我的游戏是一个场景,所以我得到了这个小点击播放菜单设置。但问题是,当我点击菜单中的一个按钮时,按钮被按下,但玩家也开始移动。我想要实现的是,如果我点击菜单按钮播放器不会移动,但只要我点击屏幕上的其他地方,他就会开始移动。
我的播放器控制器脚本设置:
if (Input.GetMouseButtonDown(0))
{
inGameMenu.SetActive(true);
startMenu.SetActive(false);
if(grounded)
{
myRigidBody.velocity = new Vector2(angleOfJump, jumpForce);
}
}
if(Input.GetMouseButton(0))
{
if(jumpTimeCounter > 0)
{
myRigidBody.velocity = new Vector2(angleOfJump, jumpForce);
jumpTimeCounter -= Time.deltaTime;
}
}
if(Input.GetMouseButtonUp(0))
{
jumpTimeCounter = 0;
}
我知道一定有一个简单的解决办法,但我就是找不到。 使用状态机,根据当前
处理点击enum GameStates
{
Started,
Playing,
Ended
};
GameStates currentState = GameStates.Started;
void Update()
{
if (Input.GetMouseButtonDown(0))
{
if(currentState == GameStates.Started)
{
inGameMenu.SetActive(true);
startMenu.SetActive(false);
currentState = GameStates.Playing;
}
else if(currentState == GameStates.Playing)
{
// handle gameplay click here.
}
// ... etc
}
}
您可以使用Umair m建议的状态机,这是轻松处理暂停菜单或类似内容(例如)的最佳解决方案。但另一个简单的解决方案是创建一个初始化为false的bool值,并在底部的压迫将该bool值设置为true以允许字符移动。
一个例子:
播放器脚本:
bool CharacterActive = false;
void Update()
{
if(CharacterActive) // if the bool variable is active..
{
if(Input.MouseStuff :D) // if movement key pressed..
{
// ..Move the character
}
}
}
public void OnButtonClick()
{
CharacterActive = true;
}
在Unity编辑器中,从OnClick()组件中的玩家游戏对象中添加OnButtonClick()方法到按钮。这里你可以看到一个视频:https://www.youtube.com/watch?v=TYzdhiRiKd0