【发布时间】:2020-10-19 23:22:31
【问题描述】:
我得到了这个脚本,它可以像 rts 游戏一样选择和移动单位,一切似乎都很好,直到大约 12 秒通过游戏 dosnt freeze 只是脚本中的任何内容都没有工作。它应该将选定的单位放入列表并激活突出显示子对象,但似乎单击该对象后,经过一段时间后,它停止工作。
代码如下:
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();
}
【问题讨论】: