我完全被这一个难住了。我在游戏中有一本书,当你在它的一定距离内查看它的一般方向并按下动作按钮(e或鼠标左键单击)时,它应该显示一个UI面板(bookPage)。这是我的代码。
void Update () {
Vector3 direction = player.transform.position - this.transform.position;
angle = Vector3.Angle (direction, player.transform.forward);
distance = direction.magnitude;
if (angle >= 160 && distance <= 2 && !bookPage.activeSelf) {
if(Input.GetButtonDown("Action")) {
bookPage.SetActive (true);
}
}
if (bookPage.activeSelf && Input.GetButtonDown("Action")) {
bookPage.SetActive (false);
}
}
这不起作用。具体来说,将页面设置为活动的行不起作用。如果它打开,它将正确关闭。如果我复制并粘贴bookPage.SetActive (true);
除了if(Input.getButtonDown("Action")){}
之外,此方法中的任何地方都会激活bookPage。如果我将Debug.Log("message");
放在if语句中,它将显示在控制台中。它只是将bookPage设置为活动的一行无法正常工作。我不知道为什么。我已经尝试将其移动到另一种方法,然后调用它并使用Coroutine进行相同操作。都没有奏效。我也尝试使用其他有效的键,但是我需要它来处理动作键。值得注意的是,操作键可用于其他用途。我已经用它来打开门了。还有其他人遇到这样的问题吗?
答案 0 :(得分:1)
当您致电SetActive(true)
时,activeSelf
将为您的第二个条件返回true
,该条件会立即调用SetActive(false)
。
改变这一点;
if (angle >= 160 && distance <= 2 && !bookPage.activeSelf)
{
if (Input.GetButtonDown("Action"))
{
bookPage.SetActive(true);
}
}
if (bookPage.activeSelf && Input.GetButtonDown("Action"))
{
bookPage.SetActive(false);
}
对此;
if (angle >= 160 && distance <= 2 && !bookPage.activeSelf)
{
if (Input.GetButtonDown("Action"))
{
bookPage.SetActive(true);
}
}
else if (bookPage.activeSelf && Input.GetButtonDown("Action"))
{
bookPage.SetActive(false);
}