我最近开始学习用C#编写Unity代码;在以下脚本中尝试根据鼠标的位置启用和禁用对象(敌人)。
问题是代码在启用对象时工作正常,但我无法弄清楚如何在激活后禁用它,以便当鼠标来回移动时对象出现和消失 - 进出范围。如果您有解决方案,请告诉我。谢谢!
using UnityEngine;
using System.Collections;
public class Paddle : MonoBehaviour
{
public GameObject enemy;
// Use this for initialization
void Start()
{
enemy.SetActive(false);
}
// Update is called once per frame
void Update()
{
Vector3 paddlePos = new Vector3(8f, this.transform.position.y, 0f);
float mousePosInBlocks = Input.mousePosition.x / Screen.width * 16;
paddlePos.x = Mathf.Clamp(mousePosInBlocks, 6f, 8f);
this.transform.position = paddlePos;
if (mousePosInBlocks < 6f)
{
print("1");
}
else if (mousePosInBlocks <= 6.5f)
{
print("2");
enemy.SetActive(true);
}
else if (mousePosInBlocks <= 7.5f)
{
print("3");
}
else
{
print("4");
}
}
}
答案 0 :(得分:4)
如果您从不致电enemy.SetActive(false);
,您希望该对象被禁用?它只会在您的Start
方法中调用,但会被enemy.SetActive(true);
覆盖,而Update
方法每帧都会调用此方法。
我不确定您的对象何时应被禁用,只需在相应的if语句中添加enemy.SetActive(false);
。
答案 1 :(得分:1)
你必须添加代码行来禁用更新类中的对象,因为你说当你将鼠标移出范围时应该禁用它,我猜测该行应该放在你的其他对象中
using UnityEngine;
using System.Collections;
public class Paddle : MonoBehaviour
{
public GameObject enemy;
// Use this for initialization
void Start()
{
enemy.SetActive(false);
}
// Update is called once per frame
void Update()
{
Vector3 paddlePos = new Vector3(8f, this.transform.position.y, 0f);
float mousePosInBlocks = Input.mousePosition.x / Screen.width * 16;
paddlePos.x = Mathf.Clamp(mousePosInBlocks, 6f, 8f);
this.transform.position = paddlePos;
if (mousePosInBlocks < 6f)
{
print("1");
}
else if (mousePosInBlocks <= 6.5f)
{
print("2");
enemy.SetActive(true);
}
else if (mousePosInBlocks <= 7.5f)
{
print("3");
}
else
{
enemy.SetActive(false);
print("4");
}
}
}
在任何情况下,您只需要在if,if-else或其他statament中添加enemy.SetActive(false);
,确保它在其中,否则它将在每个帧中被调用并且它将保持禁用状态