我得到了一个脚本,它可以像rts游戏那样选择并移动单位,直到12秒左右过去了,游戏dosnt冻结,脚本中的任何内容都没有起作用,然后一切都很好,它应该将选定的单位放到列表中并激活亮点子对象,但似乎在单击该对象后,经过一段时间后,它将停止工作。
代码如下:
bool flag = false;
NavMeshAgent agent;
[SerializeField]
List<Transform> selected_units = new List<Transform>();
public Camera cam;
public Vector3 v2;
private RaycastHit hit;
void Update()
{
if (Input.GetMouseButtonDown(0))
{
Ray ray = cam.ScreenPointToRay(Input.mousePosition);
if (Physics.Raycast(ray, out hit))
{
if (hit.collider.gameObject.CompareTag("unit"))
{
flag = true;
SelectUnits(hit.transform, Input.GetKey(KeyCode.LeftShift));
v2 = hit.point;
hit.collider.transform.GetChild(3).gameObject.SetActive(true);
}
else
{
DeselectUnits();
flag = false;
}
}
}
else if (Input.GetMouseButtonDown(1) && flag == true)
{
Ray ray = cam.ScreenPointToRay(Input.mousePosition);
if (Physics.Raycast(ray, out hit))
{
Move(hit.point);
}
}
}
private void Move(Vector3 hit)
{
for(int i = 0; i < selected_units.Count; i++)
{
agent = selected_units[i].GetComponent<NavMeshAgent>();
v2 = hit;
agent.SetDestination(v2);
}
}
private void SelectUnits(Transform unitt, bool isMultiselect)
{
if (isMultiselect == false)
{
DeselectUnits();
}
selected_units.Add(unitt);
}
private void DeselectUnits()
{
for(int i = 0; i < selected_units.Count; i++)
{
selected_units[i].transform.GetChild(3).gameObject.SetActive(false);
}
selected_units.Clear();
}
答案 0 :(得分:0)
使用Input.GetMouseButton()...
代替Input.GetMouseButtonDown...
按下并释放按钮后,拳头将返回True。 第二个在用户按下按钮的帧期间返回True。